1*8fed17f3SAndreas Gohr<?php 2*8fed17f3SAndreas Gohr 3*8fed17f3SAndreas Gohrnamespace dokuwiki\plugin\struct\test; 4*8fed17f3SAndreas Gohr 5*8fed17f3SAndreas Gohruse dokuwiki\plugin\struct\meta; 6*8fed17f3SAndreas Gohruse dokuwiki\plugin\struct\test\mock\SearchConfig; 7*8fed17f3SAndreas Gohr 8*8fed17f3SAndreas Gohr/** 9*8fed17f3SAndreas Gohr * @group plugin_struct 10*8fed17f3SAndreas Gohr * @group plugins 11*8fed17f3SAndreas Gohr * 12*8fed17f3SAndreas Gohr */ 13*8fed17f3SAndreas Gohrclass SearchConfigTest extends StructTest 14*8fed17f3SAndreas Gohr{ 15*8fed17f3SAndreas Gohr 16*8fed17f3SAndreas Gohr public function test_filtervars_simple() 17*8fed17f3SAndreas Gohr { 18*8fed17f3SAndreas Gohr global $INFO; 19*8fed17f3SAndreas Gohr $INFO['id'] = 'foo:bar:baz'; 20*8fed17f3SAndreas Gohr 21*8fed17f3SAndreas Gohr $searchConfig = new SearchConfig([]); 22*8fed17f3SAndreas Gohr 23*8fed17f3SAndreas Gohr $this->assertEquals('foo:bar:baz', $searchConfig->applyFilterVars('$ID$')); 24*8fed17f3SAndreas Gohr $this->assertEquals('baz', $searchConfig->applyFilterVars('$PAGE$')); 25*8fed17f3SAndreas Gohr $this->assertEquals('foo:bar', $searchConfig->applyFilterVars('$NS$')); 26*8fed17f3SAndreas Gohr $this->assertEquals(date('Y-m-d'), $searchConfig->applyFilterVars('$TODAY$')); 27*8fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$USER$')); 28*8fed17f3SAndreas Gohr $_SERVER['REMOTE_USER'] = 'user'; 29*8fed17f3SAndreas Gohr $this->assertEquals('user', $searchConfig->applyFilterVars('$USER$')); 30*8fed17f3SAndreas Gohr 31*8fed17f3SAndreas Gohr $this->assertEquals('user baz', $searchConfig->applyFilterVars('$USER$ $PAGE$')); 32*8fed17f3SAndreas Gohr $this->assertEquals('$user', $searchConfig->applyFilterVars('$user')); 33*8fed17f3SAndreas Gohr 34*8fed17f3SAndreas Gohr } 35*8fed17f3SAndreas Gohr 36*8fed17f3SAndreas Gohr public function test_filtervars_struct() 37*8fed17f3SAndreas Gohr { 38*8fed17f3SAndreas Gohr global $INFO; 39*8fed17f3SAndreas Gohr $INFO['id'] = 'foo:bar:baz'; 40*8fed17f3SAndreas Gohr 41*8fed17f3SAndreas Gohr // prepare some struct data 42*8fed17f3SAndreas Gohr $sb = new meta\SchemaImporter('schema1', file_get_contents(__DIR__ . '/json/schema1.struct.json')); 43*8fed17f3SAndreas Gohr $sb->build(); 44*8fed17f3SAndreas Gohr $schemaData = meta\AccessTable::getPageAccess('schema1', $INFO['id'], time()); 45*8fed17f3SAndreas Gohr $schemaData->saveData( 46*8fed17f3SAndreas Gohr [ 47*8fed17f3SAndreas Gohr 'first' => 'test', 48*8fed17f3SAndreas Gohr 'second' => ['multi1', 'multi2'] 49*8fed17f3SAndreas Gohr ] 50*8fed17f3SAndreas Gohr ); 51*8fed17f3SAndreas Gohr 52*8fed17f3SAndreas Gohr $searchConfig = new SearchConfig(['schemas' => [['schema1', 'alias']]]); 53*8fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.first$')); 54*8fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.alias.first$')); 55*8fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.schema1.first$')); 56*8fed17f3SAndreas Gohr 57*8fed17f3SAndreas Gohr $this->assertEquals('pretestpost', $searchConfig->applyFilterVars('pre$STRUCT.first$post')); 58*8fed17f3SAndreas Gohr $this->assertEquals('pretestpost', $searchConfig->applyFilterVars('pre$STRUCT.alias.first$post')); 59*8fed17f3SAndreas Gohr $this->assertEquals('pretestpost', $searchConfig->applyFilterVars('pre$STRUCT.schema1.first$post')); 60*8fed17f3SAndreas Gohr 61*8fed17f3SAndreas Gohr $this->assertEquals(['multi1', 'multi2'], $searchConfig->applyFilterVars('$STRUCT.second$')); 62*8fed17f3SAndreas Gohr $this->assertEquals(['multi1', 'multi2'], $searchConfig->applyFilterVars('$STRUCT.alias.second$')); 63*8fed17f3SAndreas Gohr $this->assertEquals(['multi1', 'multi2'], $searchConfig->applyFilterVars('$STRUCT.schema1.second$')); 64*8fed17f3SAndreas Gohr 65*8fed17f3SAndreas Gohr $this->assertEquals(['premulti1post', 'premulti2post'], $searchConfig->applyFilterVars('pre$STRUCT.second$post')); 66*8fed17f3SAndreas Gohr $this->assertEquals(['premulti1post', 'premulti2post'], $searchConfig->applyFilterVars('pre$STRUCT.alias.second$post')); 67*8fed17f3SAndreas Gohr $this->assertEquals(['premulti1post', 'premulti2post'], $searchConfig->applyFilterVars('pre$STRUCT.schema1.second$post')); 68*8fed17f3SAndreas Gohr 69*8fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.notexisting$')); 70*8fed17f3SAndreas Gohr } 71*8fed17f3SAndreas Gohr 72*8fed17f3SAndreas Gohr public function test_filtervars_struct_other() 73*8fed17f3SAndreas Gohr { 74*8fed17f3SAndreas Gohr global $INFO; 75*8fed17f3SAndreas Gohr $INFO['id'] = 'foo:bar:baz'; 76*8fed17f3SAndreas Gohr 77*8fed17f3SAndreas Gohr // prepare some struct data 78*8fed17f3SAndreas Gohr $sb = new meta\SchemaImporter('schema2', file_get_contents(__DIR__ . '/json/schema2.struct.json')); 79*8fed17f3SAndreas Gohr $sb->build(); 80*8fed17f3SAndreas Gohr $sb = new meta\SchemaImporter('schema3', file_get_contents(__DIR__ . '/json/schema2int.struct.json')); 81*8fed17f3SAndreas Gohr $sb->build(); 82*8fed17f3SAndreas Gohr $schemaData = meta\AccessTable::getPageAccess('schema2', $INFO['id'], time()); 83*8fed17f3SAndreas Gohr $schemaData->saveData( 84*8fed17f3SAndreas Gohr [ 85*8fed17f3SAndreas Gohr 'afirst' => 'test', 86*8fed17f3SAndreas Gohr 'asecond' => ['multi1', 'multi2'] 87*8fed17f3SAndreas Gohr ] 88*8fed17f3SAndreas Gohr ); 89*8fed17f3SAndreas Gohr $schemaData = meta\AccessTable::getPageAccess('schema3', 'foo:test:baz', time()); 90*8fed17f3SAndreas Gohr $schemaData->saveData( 91*8fed17f3SAndreas Gohr [ 92*8fed17f3SAndreas Gohr 'afirst' => 'test1', 93*8fed17f3SAndreas Gohr 'asecond' => ['multi1a', 'multi2a'] 94*8fed17f3SAndreas Gohr ] 95*8fed17f3SAndreas Gohr ); 96*8fed17f3SAndreas Gohr 97*8fed17f3SAndreas Gohr $searchConfig = new SearchConfig(['schemas' => [['schema3', 'alias']]]); 98*8fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.afirst$')); 99*8fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.schema2.afirst$')); 100*8fed17f3SAndreas Gohr 101*8fed17f3SAndreas Gohr $this->assertEquals('prepost', $searchConfig->applyFilterVars('pre$STRUCT.afirst$post')); 102*8fed17f3SAndreas Gohr $this->assertEquals('pretestpost', $searchConfig->applyFilterVars('pre$STRUCT.schema2.afirst$post')); 103*8fed17f3SAndreas Gohr 104*8fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.asecond$')); 105*8fed17f3SAndreas Gohr $this->assertEquals(['multi1', 'multi2'], $searchConfig->applyFilterVars('$STRUCT.schema2.asecond$')); 106*8fed17f3SAndreas Gohr 107*8fed17f3SAndreas Gohr $this->assertEquals('prepost', $searchConfig->applyFilterVars('pre$STRUCT.asecond$post')); 108*8fed17f3SAndreas Gohr $this->assertEquals(['premulti1post', 'premulti2post'], $searchConfig->applyFilterVars('pre$STRUCT.schema2.asecond$post')); 109*8fed17f3SAndreas Gohr 110*8fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.notexisting$')); 111*8fed17f3SAndreas Gohr 112*8fed17f3SAndreas Gohr $this->assertEquals('', $searchConfig->applyFilterVars('$STRUCT.afirst$')); 113*8fed17f3SAndreas Gohr $this->assertEquals('test', $searchConfig->applyFilterVars('$STRUCT.schema2.afirst$')); 114*8fed17f3SAndreas Gohr } 115*8fed17f3SAndreas Gohr 116*8fed17f3SAndreas Gohr public function test_filtervars_user() 117*8fed17f3SAndreas Gohr { 118*8fed17f3SAndreas Gohr global $INFO, $USERINFO; 119*8fed17f3SAndreas Gohr 120*8fed17f3SAndreas Gohr $searchConfig = new SearchConfig([]); 121*8fed17f3SAndreas Gohr 122*8fed17f3SAndreas Gohr $_SERVER['REMOTE_USER'] = 'john'; 123*8fed17f3SAndreas Gohr $USERINFO['name'] = 'John Smith'; 124*8fed17f3SAndreas Gohr $USERINFO['mail'] = 'john.smith@example.com'; 125*8fed17f3SAndreas Gohr $USERINFO['grps'] = ['user', 'test']; 126*8fed17f3SAndreas Gohr //update info array 127*8fed17f3SAndreas Gohr $INFO['userinfo'] = $USERINFO; 128*8fed17f3SAndreas Gohr 129*8fed17f3SAndreas Gohr $this->assertEquals('John Smith', $searchConfig->applyFilterVars('$USER.name$')); 130*8fed17f3SAndreas Gohr $this->assertEquals('john.smith@example.com', $searchConfig->applyFilterVars('$USER.mail$')); 131*8fed17f3SAndreas Gohr $this->assertEquals(['user', 'test'], $searchConfig->applyFilterVars('$USER.grps$')); 132*8fed17f3SAndreas Gohr } 133*8fed17f3SAndreas Gohr 134*8fed17f3SAndreas Gohr public function test_cacheflags() 135*8fed17f3SAndreas Gohr { 136*8fed17f3SAndreas Gohr $searchConfig = new SearchConfig([]); 137*8fed17f3SAndreas Gohr 138*8fed17f3SAndreas Gohr $flag = $searchConfig->determineCacheFlag(['foo', 'bar']); 139*8fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DEFAULT)); 140*8fed17f3SAndreas Gohr $this->assertFalse((bool)($flag & SearchConfig::$CACHE_USER)); 141*8fed17f3SAndreas Gohr $this->assertFalse((bool)($flag & SearchConfig::$CACHE_DATE)); 142*8fed17f3SAndreas Gohr 143*8fed17f3SAndreas Gohr $flag = $searchConfig->determineCacheFlag(['foo', '$USER$']); 144*8fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DEFAULT)); 145*8fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_USER)); 146*8fed17f3SAndreas Gohr $this->assertFalse((bool)($flag & SearchConfig::$CACHE_DATE)); 147*8fed17f3SAndreas Gohr 148*8fed17f3SAndreas Gohr $flag = $searchConfig->determineCacheFlag(['foo', '$TODAY$']); 149*8fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DEFAULT)); 150*8fed17f3SAndreas Gohr $this->assertFalse((bool)($flag & SearchConfig::$CACHE_USER)); 151*8fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DATE)); 152*8fed17f3SAndreas Gohr 153*8fed17f3SAndreas Gohr $flag = $searchConfig->determineCacheFlag(['foo', '$TODAY$', '$USER$']); 154*8fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DEFAULT)); 155*8fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_USER)); 156*8fed17f3SAndreas Gohr $this->assertTrue((bool)($flag & SearchConfig::$CACHE_DATE)); 157*8fed17f3SAndreas Gohr } 158*8fed17f3SAndreas Gohr} 159