Example #1
0
 function testBeforeAfterValidation()
 {
     $r = Request::create('/');
     $f = new Form($r);
     $f->addInput('age');
     $f->setBeforeValidation(function ($data, Form $form) {
         if (!empty($data['wrong'])) {
             $form->addError('Никогда не случится, т.к. поступают "чистые" данные');
         }
         if ($data['age'] > 10) {
             $data['before'] = 1;
             $data['age'] += 10;
         } else {
             $form->addError('Возраст должен быть больше 10');
         }
         return $data;
     });
     $f->setAfterValidation(function ($data, Form $form) {
         if ($data['age'] > 100) {
             $data['after'] = 1;
             $data['age'] += 100;
         } else {
             $form->addError('Возраст должен быть больше 100');
         }
         return $data;
     });
     $this->assertFalse($f->validate(array('age' => 5, 'wrong' => 1)), 'Данные не проходят валидацию');
     $this->assertEquals('Возраст должен быть больше 10, Возраст должен быть больше 100', $f->getErrors(', '), 'Ошибки');
     $f->validate(array('age' => 123));
     $exp = array('age' => 233, 'before' => 1, 'after' => 1);
     $this->assertEquals($exp, $f->getValues(), 'Фильтры до и после могут изменять итоговые данные');
 }