18fed17f3SAndreas Gohr<?php 28fed17f3SAndreas Gohr 38fed17f3SAndreas Gohrnamespace dokuwiki\plugin\struct\test; 48fed17f3SAndreas Gohr 58fed17f3SAndreas Gohruse dokuwiki\plugin\struct\meta; 68fed17f3SAndreas Gohruse dokuwiki\plugin\struct\test\mock\SearchConfig; 78fed17f3SAndreas Gohr 88fed17f3SAndreas Gohr/** 98fed17f3SAndreas Gohr * @group plugin_struct 108fed17f3SAndreas Gohr * @group plugins 118fed17f3SAndreas Gohr * 128fed17f3SAndreas Gohr */ 138fed17f3SAndreas Gohrclass SearchConfigTest extends StructTest 148fed17f3SAndreas Gohr{ 158fed17f3SAndreas Gohr 168fed17f3SAndreas Gohr public function test_filtervars_simple() 178fed17f3SAndreas Gohr { 188fed17f3SAndreas Gohr global $INFO; 198fed17f3SAndreas Gohr $INFO['id'] = 'foo:bar:baz'; 208fed17f3SAndreas Gohr 218fed17f3SAndreas Gohr $searchConfig = new SearchConfig([]); 228fed17f3SAndreas Gohr 238fed17f3SAndreas Gohr $this->assertEquals('foo:bar:baz', $searchConfig->applyFilterVars('$ID$')); 248fed17f3SAndreas Gohr $this->assertEquals('baz', $searchConfig->applyFilterVars('$PAGE$')); 258fed17f3SAndreas Gohr $this->assertEquals('foo:bar', $searchConfig->applyFilterVars('$NS$')); 268fed17f3SAndreas Gohr $this->assertEquals(date('Y-m-d'), $searchConfig->applyFilterVars('$TODAY$')); 278fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$USER$')); 288fed17f3SAndreas Gohr $_SERVER['REMOTE_USER'] = 'user'; 298fed17f3SAndreas Gohr $this->assertEquals('user', $searchConfig->applyFilterVars('$USER$')); 308fed17f3SAndreas Gohr 318fed17f3SAndreas Gohr $this->assertEquals('user baz', $searchConfig->applyFilterVars('$USER$ $PAGE$')); 328fed17f3SAndreas Gohr $this->assertEquals('$user', $searchConfig->applyFilterVars('$user')); 33*c1bfd816SAnna Dabrowska $this->assertEquals(date('Y-m-d'), $searchConfig->applyFilterVars('$DATE(now)$')); 348fed17f3SAndreas Gohr } 358fed17f3SAndreas Gohr 368fed17f3SAndreas Gohr public function test_filtervars_struct() 378fed17f3SAndreas Gohr { 388fed17f3SAndreas Gohr global $INFO; 398fed17f3SAndreas Gohr $INFO['id'] = 'foo:bar:baz'; 408fed17f3SAndreas Gohr 418fed17f3SAndreas Gohr // prepare some struct data 428fed17f3SAndreas Gohr $sb = new meta\SchemaImporter('schema1', file_get_contents(__DIR__ . '/json/schema1.struct.json')); 438fed17f3SAndreas Gohr $sb->build(); 448fed17f3SAndreas Gohr $schemaData = meta\AccessTable::getPageAccess('schema1', $INFO['id'], time()); 458fed17f3SAndreas Gohr $schemaData->saveData( 468fed17f3SAndreas Gohr [ 478fed17f3SAndreas Gohr 'first' => 'test', 488fed17f3SAndreas Gohr 'second' => ['multi1', 'multi2'] 498fed17f3SAndreas Gohr ] 508fed17f3SAndreas Gohr ); 518fed17f3SAndreas Gohr 528fed17f3SAndreas Gohr $searchConfig = new SearchConfig(['schemas' => [['schema1', 'alias']]]); 538fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.first$')); 548fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.alias.first$')); 558fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.schema1.first$')); 568fed17f3SAndreas Gohr 578fed17f3SAndreas Gohr $this->assertEquals('pretestpost', $searchConfig->applyFilterVars('pre$STRUCT.first$post')); 588fed17f3SAndreas Gohr $this->assertEquals('pretestpost', $searchConfig->applyFilterVars('pre$STRUCT.alias.first$post')); 598fed17f3SAndreas Gohr $this->assertEquals('pretestpost', $searchConfig->applyFilterVars('pre$STRUCT.schema1.first$post')); 608fed17f3SAndreas Gohr 618fed17f3SAndreas Gohr $this->assertEquals(['multi1', 'multi2'], $searchConfig->applyFilterVars('$STRUCT.second$')); 628fed17f3SAndreas Gohr $this->assertEquals(['multi1', 'multi2'], $searchConfig->applyFilterVars('$STRUCT.alias.second$')); 638fed17f3SAndreas Gohr $this->assertEquals(['multi1', 'multi2'], $searchConfig->applyFilterVars('$STRUCT.schema1.second$')); 648fed17f3SAndreas Gohr 658fed17f3SAndreas Gohr $this->assertEquals(['premulti1post', 'premulti2post'], $searchConfig->applyFilterVars('pre$STRUCT.second$post')); 668fed17f3SAndreas Gohr $this->assertEquals(['premulti1post', 'premulti2post'], $searchConfig->applyFilterVars('pre$STRUCT.alias.second$post')); 678fed17f3SAndreas Gohr $this->assertEquals(['premulti1post', 'premulti2post'], $searchConfig->applyFilterVars('pre$STRUCT.schema1.second$post')); 688fed17f3SAndreas Gohr 698fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.notexisting$')); 708fed17f3SAndreas Gohr } 718fed17f3SAndreas Gohr 728fed17f3SAndreas Gohr public function test_filtervars_struct_other() 738fed17f3SAndreas Gohr { 748fed17f3SAndreas Gohr global $INFO; 758fed17f3SAndreas Gohr $INFO['id'] = 'foo:bar:baz'; 768fed17f3SAndreas Gohr 778fed17f3SAndreas Gohr // prepare some struct data 788fed17f3SAndreas Gohr $sb = new meta\SchemaImporter('schema2', file_get_contents(__DIR__ . '/json/schema2.struct.json')); 798fed17f3SAndreas Gohr $sb->build(); 808fed17f3SAndreas Gohr $sb = new meta\SchemaImporter('schema3', file_get_contents(__DIR__ . '/json/schema2int.struct.json')); 818fed17f3SAndreas Gohr $sb->build(); 828fed17f3SAndreas Gohr $schemaData = meta\AccessTable::getPageAccess('schema2', $INFO['id'], time()); 838fed17f3SAndreas Gohr $schemaData->saveData( 848fed17f3SAndreas Gohr [ 858fed17f3SAndreas Gohr 'afirst' => 'test', 868fed17f3SAndreas Gohr 'asecond' => ['multi1', 'multi2'] 878fed17f3SAndreas Gohr ] 888fed17f3SAndreas Gohr ); 898fed17f3SAndreas Gohr $schemaData = meta\AccessTable::getPageAccess('schema3', 'foo:test:baz', time()); 908fed17f3SAndreas Gohr $schemaData->saveData( 918fed17f3SAndreas Gohr [ 928fed17f3SAndreas Gohr 'afirst' => 'test1', 938fed17f3SAndreas Gohr 'asecond' => ['multi1a', 'multi2a'] 948fed17f3SAndreas Gohr ] 958fed17f3SAndreas Gohr ); 968fed17f3SAndreas Gohr 978fed17f3SAndreas Gohr $searchConfig = new SearchConfig(['schemas' => [['schema3', 'alias']]]); 988fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.afirst$')); 998fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.schema2.afirst$')); 1008fed17f3SAndreas Gohr 1018fed17f3SAndreas Gohr $this->assertEquals('prepost', $searchConfig->applyFilterVars('pre$STRUCT.afirst$post')); 1028fed17f3SAndreas Gohr $this->assertEquals('pretestpost', $searchConfig->applyFilterVars('pre$STRUCT.schema2.afirst$post')); 1038fed17f3SAndreas Gohr 1048fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.asecond$')); 1058fed17f3SAndreas Gohr $this->assertEquals(['multi1', 'multi2'], $searchConfig->applyFilterVars('$STRUCT.schema2.asecond$')); 1068fed17f3SAndreas Gohr 1078fed17f3SAndreas Gohr $this->assertEquals('prepost', $searchConfig->applyFilterVars('pre$STRUCT.asecond$post')); 1088fed17f3SAndreas Gohr $this->assertEquals(['premulti1post', 'premulti2post'], $searchConfig->applyFilterVars('pre$STRUCT.schema2.asecond$post')); 1098fed17f3SAndreas Gohr 1108fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.notexisting$')); 1118fed17f3SAndreas Gohr 1128fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.afirst$')); 1138fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.schema2.afirst$')); 1148fed17f3SAndreas Gohr } 1158fed17f3SAndreas Gohr 1168fed17f3SAndreas Gohr public function test_filtervars_user() 1178fed17f3SAndreas Gohr { 1188fed17f3SAndreas Gohr global $INFO, $USERINFO; 1198fed17f3SAndreas Gohr 1208fed17f3SAndreas Gohr $searchConfig = new SearchConfig([]); 1218fed17f3SAndreas Gohr 1228fed17f3SAndreas Gohr $_SERVER['REMOTE_USER'] = 'john'; 1238fed17f3SAndreas Gohr $USERINFO['name'] = 'John Smith'; 1248fed17f3SAndreas Gohr $USERINFO['mail'] = 'john.smith@example.com'; 1258fed17f3SAndreas Gohr $USERINFO['grps'] = ['user', 'test']; 1268fed17f3SAndreas Gohr //update info array 1278fed17f3SAndreas Gohr $INFO['userinfo'] = $USERINFO; 1288fed17f3SAndreas Gohr 1298fed17f3SAndreas Gohr $this->assertEquals('John Smith', $searchConfig->applyFilterVars('$USER.name$')); 1308fed17f3SAndreas Gohr $this->assertEquals('john.smith@example.com', $searchConfig->applyFilterVars('$USER.mail$')); 1318fed17f3SAndreas Gohr $this->assertEquals(['user', 'test'], $searchConfig->applyFilterVars('$USER.grps$')); 1328fed17f3SAndreas Gohr } 1338fed17f3SAndreas Gohr 1348fed17f3SAndreas Gohr public function test_cacheflags() 1358fed17f3SAndreas Gohr { 1368fed17f3SAndreas Gohr $searchConfig = new SearchConfig([]); 1378fed17f3SAndreas Gohr 1388fed17f3SAndreas Gohr $flag = $searchConfig->determineCacheFlag(['foo', 'bar']); 1398fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DEFAULT)); 1408fed17f3SAndreas Gohr $this->assertFalse((bool)($flag & SearchConfig::$CACHE_USER)); 1418fed17f3SAndreas Gohr $this->assertFalse((bool)($flag & SearchConfig::$CACHE_DATE)); 1428fed17f3SAndreas Gohr 1438fed17f3SAndreas Gohr $flag = $searchConfig->determineCacheFlag(['foo', '$USER$']); 1448fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DEFAULT)); 1458fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_USER)); 1468fed17f3SAndreas Gohr $this->assertFalse((bool)($flag & SearchConfig::$CACHE_DATE)); 1478fed17f3SAndreas Gohr 1488fed17f3SAndreas Gohr $flag = $searchConfig->determineCacheFlag(['foo', '$TODAY$']); 1498fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DEFAULT)); 1508fed17f3SAndreas Gohr $this->assertFalse((bool)($flag & SearchConfig::$CACHE_USER)); 1518fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DATE)); 1528fed17f3SAndreas Gohr 1538fed17f3SAndreas Gohr $flag = $searchConfig->determineCacheFlag(['foo', '$TODAY$', '$USER$']); 1548fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DEFAULT)); 1558fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_USER)); 1568fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DATE)); 1578fed17f3SAndreas Gohr } 1588fed17f3SAndreas Gohr} 159