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