xref: /plugin/struct/_test/ValidatorTest.php (revision 66055609a304a63ade38f5565c189bd09e885a05)
18fed17f3SAndreas Gohr<?php
28fed17f3SAndreas Gohr
38fed17f3SAndreas Gohrnamespace dokuwiki\plugin\struct\test;
48fed17f3SAndreas Gohr
58fed17f3SAndreas Gohruse dokuwiki\plugin\struct\meta\Column;
68fed17f3SAndreas Gohruse dokuwiki\plugin\struct\test\mock\Assignments;
78fed17f3SAndreas Gohruse dokuwiki\plugin\struct\test\mock\Lookup;
88fed17f3SAndreas Gohruse dokuwiki\plugin\struct\types\Decimal;
9*66055609SAnna Dabrowskause dokuwiki\plugin\struct\types\Media;
108fed17f3SAndreas Gohruse dokuwiki\plugin\struct\types\Text;
118fed17f3SAndreas Gohr
128fed17f3SAndreas Gohr/**
138fed17f3SAndreas Gohr * Tests for the basic validation functions
148fed17f3SAndreas Gohr *
158fed17f3SAndreas Gohr * @group plugin_struct
168fed17f3SAndreas Gohr * @group plugins
178fed17f3SAndreas Gohr *
188fed17f3SAndreas Gohr */
198fed17f3SAndreas Gohrclass ValidatorTest extends StructTest
208fed17f3SAndreas Gohr{
218fed17f3SAndreas Gohr
228fed17f3SAndreas Gohr    public function setUp(): void
238fed17f3SAndreas Gohr    {
248fed17f3SAndreas Gohr        parent::setUp();
258fed17f3SAndreas Gohr
268fed17f3SAndreas Gohr        $this->loadSchemaJSON('schema1');
278fed17f3SAndreas Gohr        $this->loadSchemaJSON('schema2');
288fed17f3SAndreas Gohr
298fed17f3SAndreas Gohr        $this->saveData(
308fed17f3SAndreas Gohr            'page01',
318fed17f3SAndreas Gohr            'schema1',
328fed17f3SAndreas Gohr            [
338fed17f3SAndreas Gohr                'first' => 'first data',
348fed17f3SAndreas Gohr                'second' => ['second data', 'more data', 'even more'],
358fed17f3SAndreas Gohr                'third' => 'third data',
368fed17f3SAndreas Gohr                'fourth' => 'fourth data'
378fed17f3SAndreas Gohr            ]
388fed17f3SAndreas Gohr        );
398fed17f3SAndreas Gohr    }
408fed17f3SAndreas Gohr
418fed17f3SAndreas Gohr    protected function tearDown(): void
428fed17f3SAndreas Gohr    {
438fed17f3SAndreas Gohr        parent::tearDown();
448fed17f3SAndreas Gohr
458fed17f3SAndreas Gohr        /** @var \helper_plugin_struct_db $sqlite */
468fed17f3SAndreas Gohr        $sqlite = plugin_load('helper', 'struct_db');
478fed17f3SAndreas Gohr        $sqlite->resetDB();
488fed17f3SAndreas Gohr        Assignments::reset();
498fed17f3SAndreas Gohr    }
508fed17f3SAndreas Gohr
518fed17f3SAndreas Gohr    public function test_validate_nonArray()
528fed17f3SAndreas Gohr    {
538fed17f3SAndreas Gohr        $label = 'label';
548fed17f3SAndreas Gohr        $errormsg = sprintf($this->getLang('validation_prefix') . $this->getLang('Validation Exception Decimal needed'), $label);
558fed17f3SAndreas Gohr        $integer = new Decimal();
568fed17f3SAndreas Gohr
578fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
588fed17f3SAndreas Gohr        $value = 'NaN';
598fed17f3SAndreas Gohr        $this->assertFalse($validator->validateField($integer, $label, $value));
608fed17f3SAndreas Gohr        $this->assertEquals([$errormsg], $validator->getErrors());
618fed17f3SAndreas Gohr    }
628fed17f3SAndreas Gohr
638fed17f3SAndreas Gohr    public function test_validate_array()
648fed17f3SAndreas Gohr    {
658fed17f3SAndreas Gohr        $label = 'label';
668fed17f3SAndreas Gohr        $errormsg = sprintf($this->getLang('validation_prefix') . $this->getLang('Validation Exception Decimal needed'), $label);
678fed17f3SAndreas Gohr        $integer = new Decimal();
688fed17f3SAndreas Gohr
698fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
708fed17f3SAndreas Gohr        $value = ['NaN', 'NaN'];
718fed17f3SAndreas Gohr        $this->assertFalse($validator->validateField($integer, $label, $value));
728fed17f3SAndreas Gohr        $this->assertEquals([$errormsg, $errormsg], $validator->getErrors());
738fed17f3SAndreas Gohr    }
748fed17f3SAndreas Gohr
758fed17f3SAndreas Gohr    public function test_validate_blank()
768fed17f3SAndreas Gohr    {
778fed17f3SAndreas Gohr        $integer = new Decimal();
788fed17f3SAndreas Gohr
798fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
808fed17f3SAndreas Gohr        $value = null;
818fed17f3SAndreas Gohr        $this->assertTrue($validator->validateField($integer, 'label', $value));
828fed17f3SAndreas Gohr        $this->assertEquals([], $validator->getErrors());
838fed17f3SAndreas Gohr    }
848fed17f3SAndreas Gohr
858fed17f3SAndreas Gohr    public function test_validate_clean()
868fed17f3SAndreas Gohr    {
878fed17f3SAndreas Gohr        $text = new Text();
888fed17f3SAndreas Gohr
898fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
908fed17f3SAndreas Gohr        $value = '  foo  ';
918fed17f3SAndreas Gohr        $this->assertTrue($validator->validateField($text, 'label', $value));
928fed17f3SAndreas Gohr        $this->assertEquals('foo', $value);
938fed17f3SAndreas Gohr
948fed17f3SAndreas Gohr        $value = ['  foo  ', '  bar  '];
958fed17f3SAndreas Gohr        $this->assertTrue($validator->validateField($text, 'label', $value));
968fed17f3SAndreas Gohr        $this->assertEquals(['foo', 'bar'], $value);
978fed17f3SAndreas Gohr    }
988fed17f3SAndreas Gohr
998fed17f3SAndreas Gohr    public function test_validate_empty_multivalue()
1008fed17f3SAndreas Gohr    {
1018fed17f3SAndreas Gohr        $lookup = new Lookup(null, '', true);
1028fed17f3SAndreas Gohr        $col = new Column(10, $lookup);
1038fed17f3SAndreas Gohr
1048fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
1058fed17f3SAndreas Gohr        $value = '';
1068fed17f3SAndreas Gohr
1078fed17f3SAndreas Gohr        $validator->validateValue($col, $value);
1088fed17f3SAndreas Gohr        $this->assertEquals([''], $value);
109*66055609SAnna Dabrowska
110*66055609SAnna Dabrowska        // some fields like media or date can post an array with multiple empty strings
111*66055609SAnna Dabrowska        // because they use multiple inputs instead of comma separation in one input
112*66055609SAnna Dabrowska        $media = new Media(null, '', true);
113*66055609SAnna Dabrowska        $col = new Column(10, $media);
114*66055609SAnna Dabrowska
115*66055609SAnna Dabrowska        $validator = new mock\ValueValidator();
116*66055609SAnna Dabrowska        $value = ['', '', ''];
117*66055609SAnna Dabrowska
118*66055609SAnna Dabrowska        $validator->validateValue($col, $value);
119*66055609SAnna Dabrowska        $this->assertEquals([''], $value);
1208fed17f3SAndreas Gohr    }
1218fed17f3SAndreas Gohr
1228fed17f3SAndreas Gohr}
123