xref: /plugin/struct/_test/SearchConfigTest.php (revision c1bfd816f493f6882c3b243ee6fead6d0d406838)
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