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