xref: /plugin/struct/_test/ValidatorTest.php (revision 8fed17f342cc190557a6ce94d1787f9e2f63cb6c)
1*8fed17f3SAndreas Gohr<?php
2*8fed17f3SAndreas Gohr
3*8fed17f3SAndreas Gohrnamespace dokuwiki\plugin\struct\test;
4*8fed17f3SAndreas Gohr
5*8fed17f3SAndreas Gohruse dokuwiki\plugin\struct\meta\Column;
6*8fed17f3SAndreas Gohruse dokuwiki\plugin\struct\test\mock\Assignments;
7*8fed17f3SAndreas Gohruse dokuwiki\plugin\struct\test\mock\Lookup;
8*8fed17f3SAndreas Gohruse dokuwiki\plugin\struct\types\Decimal;
9*8fed17f3SAndreas Gohruse dokuwiki\plugin\struct\types\Text;
10*8fed17f3SAndreas Gohr
11*8fed17f3SAndreas Gohr/**
12*8fed17f3SAndreas Gohr * Tests for the basic validation functions
13*8fed17f3SAndreas Gohr *
14*8fed17f3SAndreas Gohr * @group plugin_struct
15*8fed17f3SAndreas Gohr * @group plugins
16*8fed17f3SAndreas Gohr *
17*8fed17f3SAndreas Gohr */
18*8fed17f3SAndreas Gohrclass ValidatorTest extends StructTest
19*8fed17f3SAndreas Gohr{
20*8fed17f3SAndreas Gohr
21*8fed17f3SAndreas Gohr    public function setUp(): void
22*8fed17f3SAndreas Gohr    {
23*8fed17f3SAndreas Gohr        parent::setUp();
24*8fed17f3SAndreas Gohr
25*8fed17f3SAndreas Gohr        $this->loadSchemaJSON('schema1');
26*8fed17f3SAndreas Gohr        $this->loadSchemaJSON('schema2');
27*8fed17f3SAndreas Gohr
28*8fed17f3SAndreas Gohr        $this->saveData(
29*8fed17f3SAndreas Gohr            'page01',
30*8fed17f3SAndreas Gohr            'schema1',
31*8fed17f3SAndreas Gohr            [
32*8fed17f3SAndreas Gohr                'first' => 'first data',
33*8fed17f3SAndreas Gohr                'second' => ['second data', 'more data', 'even more'],
34*8fed17f3SAndreas Gohr                'third' => 'third data',
35*8fed17f3SAndreas Gohr                'fourth' => 'fourth data'
36*8fed17f3SAndreas Gohr            ]
37*8fed17f3SAndreas Gohr        );
38*8fed17f3SAndreas Gohr    }
39*8fed17f3SAndreas Gohr
40*8fed17f3SAndreas Gohr    protected function tearDown(): void
41*8fed17f3SAndreas Gohr    {
42*8fed17f3SAndreas Gohr        parent::tearDown();
43*8fed17f3SAndreas Gohr
44*8fed17f3SAndreas Gohr        /** @var \helper_plugin_struct_db $sqlite */
45*8fed17f3SAndreas Gohr        $sqlite = plugin_load('helper', 'struct_db');
46*8fed17f3SAndreas Gohr        $sqlite->resetDB();
47*8fed17f3SAndreas Gohr        Assignments::reset();
48*8fed17f3SAndreas Gohr    }
49*8fed17f3SAndreas Gohr
50*8fed17f3SAndreas Gohr    public function test_validate_nonArray()
51*8fed17f3SAndreas Gohr    {
52*8fed17f3SAndreas Gohr        $label = 'label';
53*8fed17f3SAndreas Gohr        $errormsg = sprintf($this->getLang('validation_prefix') . $this->getLang('Validation Exception Decimal needed'), $label);
54*8fed17f3SAndreas Gohr        $integer = new Decimal();
55*8fed17f3SAndreas Gohr
56*8fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
57*8fed17f3SAndreas Gohr        $value = 'NaN';
58*8fed17f3SAndreas Gohr        $this->assertFalse($validator->validateField($integer, $label, $value));
59*8fed17f3SAndreas Gohr        $this->assertEquals([$errormsg], $validator->getErrors());
60*8fed17f3SAndreas Gohr    }
61*8fed17f3SAndreas Gohr
62*8fed17f3SAndreas Gohr    public function test_validate_array()
63*8fed17f3SAndreas Gohr    {
64*8fed17f3SAndreas Gohr        $label = 'label';
65*8fed17f3SAndreas Gohr        $errormsg = sprintf($this->getLang('validation_prefix') . $this->getLang('Validation Exception Decimal needed'), $label);
66*8fed17f3SAndreas Gohr        $integer = new Decimal();
67*8fed17f3SAndreas Gohr
68*8fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
69*8fed17f3SAndreas Gohr        $value = ['NaN', 'NaN'];
70*8fed17f3SAndreas Gohr        $this->assertFalse($validator->validateField($integer, $label, $value));
71*8fed17f3SAndreas Gohr        $this->assertEquals([$errormsg, $errormsg], $validator->getErrors());
72*8fed17f3SAndreas Gohr    }
73*8fed17f3SAndreas Gohr
74*8fed17f3SAndreas Gohr    public function test_validate_blank()
75*8fed17f3SAndreas Gohr    {
76*8fed17f3SAndreas Gohr        $integer = new Decimal();
77*8fed17f3SAndreas Gohr
78*8fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
79*8fed17f3SAndreas Gohr        $value = null;
80*8fed17f3SAndreas Gohr        $this->assertTrue($validator->validateField($integer, 'label', $value));
81*8fed17f3SAndreas Gohr        $this->assertEquals([], $validator->getErrors());
82*8fed17f3SAndreas Gohr    }
83*8fed17f3SAndreas Gohr
84*8fed17f3SAndreas Gohr    public function test_validate_clean()
85*8fed17f3SAndreas Gohr    {
86*8fed17f3SAndreas Gohr        $text = new Text();
87*8fed17f3SAndreas Gohr
88*8fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
89*8fed17f3SAndreas Gohr        $value = '  foo  ';
90*8fed17f3SAndreas Gohr        $this->assertTrue($validator->validateField($text, 'label', $value));
91*8fed17f3SAndreas Gohr        $this->assertEquals('foo', $value);
92*8fed17f3SAndreas Gohr
93*8fed17f3SAndreas Gohr        $value = ['  foo  ', '  bar  '];
94*8fed17f3SAndreas Gohr        $this->assertTrue($validator->validateField($text, 'label', $value));
95*8fed17f3SAndreas Gohr        $this->assertEquals(['foo', 'bar'], $value);
96*8fed17f3SAndreas Gohr    }
97*8fed17f3SAndreas Gohr
98*8fed17f3SAndreas Gohr    public function test_validate_empty_multivalue()
99*8fed17f3SAndreas Gohr    {
100*8fed17f3SAndreas Gohr        $lookup = new Lookup(null, '', true);
101*8fed17f3SAndreas Gohr        $col = new Column(10, $lookup);
102*8fed17f3SAndreas Gohr
103*8fed17f3SAndreas Gohr        $validator = new mock\ValueValidator();
104*8fed17f3SAndreas Gohr        $value = '';
105*8fed17f3SAndreas Gohr
106*8fed17f3SAndreas Gohr        $validator->validateValue($col, $value);
107*8fed17f3SAndreas Gohr        $this->assertEquals([''], $value);
108*8fed17f3SAndreas Gohr    }
109*8fed17f3SAndreas Gohr
110*8fed17f3SAndreas Gohr}
111