Open Journal Systems  3.3.0
FormValidatorArrayTest.php
1 <?php
2 
17 import('lib.pkp.tests.PKPTestCase');
18 import('lib.pkp.classes.form.Form');
19 
25  public function testIsValid() {
26  $form = new Form('some template');
27 
28  // Tests are completely bypassed when the validation type is "optional" values.
29  $form->setData('testData', '');
30  $validator = new FormValidatorArray($form, 'testData', FORM_VALIDATOR_OPTIONAL_VALUE, 'some.message.key');
31  self::assertTrue($validator->isValid());
32  self::assertEquals(array(), $validator->getErrorFields());
33 
34  // Field data must be an array, otherwise validation fails
35  $form->setData('testData', '');
36  $validator = new FormValidatorArray($form, 'testData', FORM_VALIDATOR_REQUIRED_VALUE, 'some.message.key');
37  self::assertFalse($validator->isValid());
38  self::assertEquals(array(), $validator->getErrorFields());
39 
40  // We can either require all sub-fields (which is default)...
41  $form->setData('testData', array('subfield1' => 'abc', 'subfield2' => '0'));
42  $validator = new FormValidatorArray($form, 'testData', FORM_VALIDATOR_REQUIRED_VALUE, 'some.message.key');
43  self::assertTrue($validator->isValid());
44  self::assertEquals(array(), $validator->getErrorFields());
45 
46  $form->setData('testData', array('subfield1' => '', 'subfield2' => null));
47  $validator = new FormValidatorArray($form, 'testData', FORM_VALIDATOR_REQUIRED_VALUE, 'some.message.key');
48  self::assertFalse($validator->isValid());
49  self::assertEquals(array('testData[subfield1]', 'testData[subfield2]'), $validator->getErrorFields());
50 
51  // ..or the same explicit sub-sub-fields within all sub-fields.
52  $testArray = array(
53  'subfield1' => array('subsubfield1' => 'abc', 'subsubfield2' => 'def'),
54  'subfield2' => array('subsubfield1' => '0', 'subsubfield2' => 0) // also test allowed boarder conditions
55  );
56  $form->setData('testData', $testArray);
57  $validator = new FormValidatorArray($form, 'testData', FORM_VALIDATOR_REQUIRED_VALUE, 'some.message.key', array('subsubfield1', 'subsubfield2'));
58  self::assertTrue($validator->isValid());
59  self::assertEquals(array(), $validator->getErrorFields());
60 
61  $testArray = array(
62  'subfield1' => array('subsubfield1' => 'abc', 'subsubfield2' => 'def'),
63  'subfield2' => array('subsubfield1' => '', 'subsubfield2' => 'xyz')
64  );
65  $form->setData('testData', $testArray);
66  $validator = new FormValidatorArray($form, 'testData', FORM_VALIDATOR_REQUIRED_VALUE, 'some.message.key', array('subsubfield1', 'subsubfield2'));
67  self::assertFalse($validator->isValid());
68  self::assertEquals(array('testData[subfield2][subsubfield1]'), $validator->getErrorFields());
69 
70  // Test border conditions...
71  // ...pass in a one-dimensional array where a two-dimensional array is expected
72  $testArray = array('subfield1' => 'abc', 'subfield2' => 'def');
73  $form->setData('testData', $testArray);
74  $validator = new FormValidatorArray($form, 'testData', FORM_VALIDATOR_REQUIRED_VALUE, 'some.message.key', array('subsubfield'));
75  self::assertFalse($validator->isValid());
76  self::assertEquals(array('testData[subfield1]', 'testData[subfield2]'), $validator->getErrorFields());
77 
78  // ...pass in a two-dimensional array but leave out expected subsubfields
79  $testArray = array(
80  'subfield1' => array('subsubfield1' => 'abc', 'subsubfield2' => null),
81  'subfield2' => array('subsubfield2' => 'xyz')
82  );
83  $form->setData('testData', $testArray);
84  $validator = new FormValidatorArray($form, 'testData', FORM_VALIDATOR_REQUIRED_VALUE, 'some.message.key', array('subsubfield1', 'subsubfield2'));
85  self::assertFalse($validator->isValid());
86  self::assertEquals(array('testData[subfield1][subsubfield2]', 'testData[subfield2][subsubfield1]'), $validator->getErrorFields());
87  }
88 }
89 
FormValidatorArray
Form validation check that checks an array of fields.
Definition: FormValidatorArray.inc.php:18
PKPTestCase
Class that implements functionality common to all PKP unit test cases.
Definition: PKPTestCase.inc.php:27
FormValidatorArrayTest
Test class for FormValidatorArray.
Definition: FormValidatorArrayTest.php:20
FormValidatorArrayTest\testIsValid
testIsValid()
Definition: FormValidatorArrayTest.php:25
Form
Class defining basic operations for handling HTML forms.
Definition: Form.inc.php:47