developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #455: 455.diff

File 455.diff, 4.1 KB (added by laurentj, 14 years ago)

The patch

  • testapp/modules/jelix_tests/tests/jdao.main_api.html.php

     
    317317</array>';
    318318        $this->assertComplexIdenticalStr($list, $verif);
    319319    }
     320
     321
     322    function testCheck() {
     323
     324        $record = jDao::createRecord('products');
     325        $check = $record->check();
     326        $results = array('name'=>array(jDaoRecordBase::ERROR_REQUIRED));
     327        $this->assertEqual($results,$check);
     328
     329        $record->name = 'Foo';
     330        $check = $record->check();
     331        $this->assertEqual(array(),$check);
     332
     333        $record->create_date = 'foo';
     334        $check = $record->check();
     335        $results = array('create_date'=>array(jDaoRecordBase::ERROR_BAD_FORMAT));
     336        $this->assertEqual($results,$check);
     337
     338        $record->create_date = '2008-02-15';
     339        $check = $record->check();
     340        $results = array('create_date'=>array(jDaoRecordBase::ERROR_BAD_FORMAT));
     341        $this->assertEqual($results,$check);
     342
     343        $record->create_date = '2008-02-15 12:03:34';
     344        $check = $record->check();
     345        $this->assertEqual(array(),$check);
     346
     347        $record->price='foo';
     348        $check = $record->check();
     349        $results = array('price'=>array(jDaoRecordBase::ERROR_BAD_TYPE));
     350        $this->assertEqual($results,$check);
     351
     352        $record->price=56;
     353        $check = $record->check();
     354        $this->assertEqual(array(),$check);
     355
     356    }
    320357}
    321358?>
     359 Pas de fin de ligne à la fin du fichier
  • lib/jelix/dao/jDaoRecordBase.class.php

     
    5151                continue;
    5252            }
    5353
    54             if($infos['datatype']=='varchar' || $infos['datatype']=='string'){
     54            switch($infos['datatype']) {
     55              case 'varchar':
     56              case 'string' :
    5557                if(!is_string($value) && $value !== null){
    5658                    $errors[$prop][] = self::ERROR_BAD_TYPE;
    57                     continue;
     59                    break;
    5860                }
    5961                // test regexp
    6062                if ($infos['regExp'] !== null && preg_match ($infos['regExp'], $value) === 0){
    6163                    $errors[$prop][] = self::ERROR_BAD_FORMAT;
    62                     continue;
     64                    break;
    6365                }
    6466
    6567                //  test maxlength et minlength
     
    7173                if($infos['minlength'] !== null && $len < intval($infos['minlength'])){
    7274                    $errors[$prop][] = self::ERROR_MINLENGTH;
    7375                }
    74 
    75             }elseif( in_array($infos['datatype'], array('int','integer','numeric', 'double', 'float'))) {
    76                 // test datatype
     76                break;
     77            case 'int';
     78            case 'integer':
     79            case 'numeric':
     80            case 'double':
     81            case 'float':
    7782                if($value !== null && !is_numeric($value)){
    7883                    $errors[$prop][] = self::ERROR_BAD_TYPE;
    79                     continue;
    8084                }
    81             }elseif( in_array($infos['datatype'], array('datetime', 'time','varchardate', 'date'))) {
    82                 if (jLocale::timestampToDate ($value) === false){
     85                break;
     86            case 'datetime':
     87                if(!preg_match('/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})?$/', $value))
    8388                    $errors[$prop][] = self::ERROR_BAD_FORMAT;
    84                     continue;
    85                 }
     89                break;
     90            case 'time':
     91                if(!preg_match('/^(\d{2}:\d{2}:\d{2})?$/', $value))
     92                    $errors[$prop][] = self::ERROR_BAD_FORMAT;
     93                break;
     94            case 'varchardate':
     95            case 'date':
     96                if(!preg_match('/^(\d{4}-\d{2}-\d{2})?$/', $value))
     97                    $errors[$prop][] = self::ERROR_BAD_FORMAT;
     98                break;
    8699            }
    87100        }
    88101        return $errors;