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