1<?php /** @noinspection PhpComposerExtensionStubsInspection */
2
3use ComboStrap\TplUtility;
4
5require_once(__DIR__ . '/../class/TplUtility.php');
6require_once(__DIR__ . '/../class/DomUtility.php');
7
8/**
9 *
10 * Test the {@link tpl_strap_meta_header()
11 *
12 * @group template_strap
13 * @group templates
14 */
15class strapTest extends DokuWikiTest
16{
17
18    const DEFAULT_BOOTSTRAP_4 = "4.5.0 - bootstrap";
19    const DEFAULT_BOOTSTRAP_5 = "5.0.1 - bootstrap";
20
21    public function setUp()
22    {
23
24        global $conf;
25        parent::setUp();
26        $conf ['template'] = 'strap';
27
28        /**
29         * static variable bug in the {@link tpl_getConf()}
30         * that does not load the configuration twice
31         */
32        TplUtility::reloadConf();
33
34    }
35
36    /**
37     * An utility function that test if the headers meta are still
38     * on the page (ie response)
39     * @param TestResponse $response
40     * @param $selector - the DOM elementselector
41     * @param $attr - the attribute to check
42     * @param $scriptSignatures - the pattern signature to find
43     * @param string $testDescription - the login type (anonymous, logged in, ...)
44     */
45    private function checkMeta(TestResponse $response, $selector, $attr, $scriptSignatures, $testDescription)
46    {
47
48
49        /**
50         * @var array|DomElement $scripts
51         */
52        $domElements = $response->queryHTML($selector)->get();
53
54        $domValueToChecks = [];
55        foreach ($domElements as $domElement) {
56            /**
57             * @var DOMElement $domElement
58             */
59            $value = $domElement->getAttribute($attr);
60            if (empty($value)) {
61                $value = $domElement->textContent;
62            }
63            $domValueToChecks[] = $value;
64        }
65        $domValueNotFounds = $domValueToChecks;
66        foreach ($scriptSignatures as $signatureToFind) {
67            $patternFound = 0;
68            foreach ($domValueToChecks as $domValueToCheck) {
69                $patternFound = preg_match("/$signatureToFind/i", $domValueToCheck);
70                if ($patternFound === 1) {
71                    if (($key = array_search($domValueToCheck, $domValueNotFounds)) !== false) {
72                        unset($domValueNotFounds[$key]);
73                    }
74                    break;
75                }
76            }
77            $this->assertTrue($patternFound !== 0, "Unable to find ($signatureToFind) for ${testDescription}");
78        }
79
80
81        foreach ($domValueNotFounds as $domValueNotFound) {
82            $this->assertNull($domValueNotFound, "All selected element have been found by a signature, for ($selector) on ${testDescription}");
83        }
84
85
86    }
87
88
89    /**
90     * Test the default configuration
91     *
92     * Test the {@link \Combostrap\TplUtility::handleBootstrapMetaHeaders()} function
93     */
94    public function test_handleBootStrapMetaHeaders_anonymous_default()
95    {
96
97        $bootstrapStylesheetVersions = [self::DEFAULT_BOOTSTRAP_5, self::DEFAULT_BOOTSTRAP_4];
98
99        foreach ($bootstrapStylesheetVersions as $bootstrapStylesheetVersion) {
100            TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, $bootstrapStylesheetVersion);
101
102            $version = TplUtility::getBootStrapVersion();
103            if ($version == "4.5.0") {
104                /**
105                 * Script signature
106                 * CDN is on by default
107                 *
108                 * js.php is needed for custom script such as a consent box
109                 */
110                $scriptsSignature = [
111                    "jquery.com\/jquery-(.*).js",
112                    "cdn.jsdelivr.net\/npm\/popper.js",
113                    "stackpath.bootstrapcdn.com\/bootstrap\/$version\/js\/bootstrap.min.js",
114                    'JSINFO',
115                    'js.php'
116                ];
117
118                /**
119                 * Stylesheet signature (href)
120                 */
121                $stylsheetSignature = ["stackpath.bootstrapcdn.com\/bootstrap\/$version\/css\/bootstrap.min.css", '\/lib\/exe\/css.php\?t\=strap'];
122
123            } else {
124
125                $scriptsSignature = [
126                    //    "jquery.com\/jquery-(.*).js", no more need in Bootstrap 5
127                    "cdn.jsdelivr.net\/npm\/@popperjs",// out of the bundle to use it for auto-completion dropdown
128                    "cdn.jsdelivr.net\/npm\/bootstrap\@$version\/dist\/js\/bootstrap.min.js",
129                    "jquery.php", // jquery of Dokuwiki (Bootstrap 5 does not have its own)
130                    'JSINFO',
131                    'js.php'
132                ];
133
134                /**
135                 * Stylesheet signature (href)
136                 */
137                $stylsheetSignature = [
138                    "cdn.jsdelivr.net\/npm\/bootstrap\@$version\/dist\/css\/bootstrap.min.css",
139                    '\/lib\/exe\/css.php\?t\=strap'
140                ];
141
142            }
143
144            // Anonymous
145            $pageId = 'start';
146            saveWikiText($pageId, "Content", 'Script Test base');
147            idx_addPage($pageId);
148
149            $request = new TestRequest();
150            $response = $request->get(array('id' => $pageId, '/doku.php'));
151
152            $cdn = tpl_getConf(TplUtility::CONF_USE_CDN);
153            $this->assertEquals(1, $cdn, "The CDN is by default on on version $bootstrapStylesheetVersion");
154
155            /**
156             * Meta script test
157             */
158            $testDescription = "Anonymous on version ($bootstrapStylesheetVersion)";
159            $this->checkMeta($response, 'script', "src", $scriptsSignature, $testDescription);
160            /**
161             * Meta stylesheet test
162             */
163            $this->checkMeta($response, 'link[rel="stylesheet"]', "href", $stylsheetSignature, $testDescription);
164        }
165
166
167    }
168
169    /**
170     * Test the Jquery conf
171     *
172     * Test the {@link \Combostrap\TplUtility::handleBootstrapMetaHeaders()} function
173     * @throws Exception
174     */
175    public function test_handleBootStrapMetaHeaders_anonymous_jquery_doku()
176    {
177
178        /**
179         * Jquery Doku is off by default
180         * Because on Bootstrap 5, there is no Jquery
181         * There should be a Jquery even if off
182         */
183        $jqueryUI = tpl_getConf(TplUtility::CONF_JQUERY_DOKU);
184        $this->assertEquals(0, $jqueryUI, "jquery is off");
185        TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, self::DEFAULT_BOOTSTRAP_5);
186        $testDescription = "Jquery on Boostrap 5 should be present";
187        $version = TplUtility::getBootStrapVersion();
188        $scriptsSignature = [
189            "jquery.php",
190            "cdn.jsdelivr.net\/npm\/@popperjs",
191            "cdn.jsdelivr.net\/npm\/bootstrap\@$version\/dist\/js\/bootstrap.min.js",
192            'JSINFO',
193            'js.php'
194        ];
195        $stylsheetSignature = [
196            "cdn.jsdelivr.net\/npm\/bootstrap\@$version\/dist\/css\/bootstrap.min.css",
197            '\/lib\/exe\/css.php\?t\=strap'
198        ];
199        $pageId = 'start';
200        saveWikiText($pageId, "Content", 'Script Test base');
201        idx_addPage($pageId);
202        $request = new TestRequest();
203        $response = $request->get(array('id' => $pageId, '/doku.php'));
204        $this->checkMeta($response, 'script', "src", $scriptsSignature, $testDescription);
205        $this->checkMeta($response, 'link[rel="stylesheet"]', "href", $stylsheetSignature, $testDescription);
206
207        /**
208         * Jquery is on
209         */
210        TplUtility::setConf(TplUtility::CONF_JQUERY_DOKU, 1);
211        $jqueryUI = tpl_getConf(TplUtility::CONF_JQUERY_DOKU);
212        $this->assertEquals(1, $jqueryUI, "jquery is on");
213
214        /**
215         * For 4 and 5
216         */
217        $bootstrapStylesheetVersions = [self::DEFAULT_BOOTSTRAP_5, self::DEFAULT_BOOTSTRAP_4];
218
219        foreach ($bootstrapStylesheetVersions as $bootstrapStylesheetVersion) {
220
221            $testDescription = "Anonymous for $bootstrapStylesheetVersion";
222
223            TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, $bootstrapStylesheetVersion);
224
225            $version = TplUtility::getBootStrapVersion();
226            if ($version == "4.5.0") {
227
228                $scriptsSignature = [
229                    "jquery.php",
230                    "cdn.jsdelivr.net\/npm\/popper.js",
231                    "stackpath.bootstrapcdn.com\/bootstrap\/$version\/js\/bootstrap.min.js",
232                    'JSINFO',
233                    'js.php'
234                ];
235
236                $stylsheetSignature = ["stackpath.bootstrapcdn.com\/bootstrap\/$version\/css\/bootstrap.min.css", '\/lib\/exe\/css.php\?t\=strap'];
237
238
239            } else {
240
241                /**
242                 * 5
243                 */
244                $scriptsSignature = [
245                    "jquery.php",
246                    "cdn.jsdelivr.net\/npm\/@popperjs",
247                    "cdn.jsdelivr.net\/npm\/bootstrap\@$version\/dist\/js\/bootstrap.min.js",
248                    'JSINFO',
249                    'js.php'
250                ];
251
252                $stylsheetSignature = [
253                    "cdn.jsdelivr.net\/npm\/bootstrap\@$version\/dist\/css\/bootstrap.min.css",
254                    '\/lib\/exe\/css.php\?t\=strap'
255                ];
256
257
258            }
259            // Anonymous
260            $pageId = 'start';
261            saveWikiText($pageId, "Content", 'Script Test base');
262            idx_addPage($pageId);
263
264            $request = new TestRequest();
265            $response = $request->get(array('id' => $pageId, '/doku.php'));
266
267
268            /**
269             * Script signature
270             * CDN is on by default
271             *
272             * js.php is needed for custom script such as a consent box
273             */
274
275            $this->checkMeta($response, 'script', "src", $scriptsSignature, $testDescription);
276
277            /**
278             * Stylesheet signature (href)
279             */
280            $this->checkMeta($response, 'link[rel="stylesheet"]', "href", $stylsheetSignature, $testDescription);
281
282        }
283    }
284
285    /**
286     * @throws Exception
287     */
288    public function test_handleBootStrapMetaHeaders_anonymous_nocdn()
289    {
290
291        /**
292         * CDN is on by default, disable
293         */
294        TplUtility::setConf(TplUtility::CONF_USE_CDN, 0);
295
296        /**
297         * For 4 and 5
298         */
299        $bootstrapStylesheetVersions = [self::DEFAULT_BOOTSTRAP_5, self::DEFAULT_BOOTSTRAP_4];
300
301        foreach ($bootstrapStylesheetVersions as $bootstrapStylesheetVersion) {
302
303            $testDescription = "Anonymous no cdn for $bootstrapStylesheetVersion";
304
305            TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, $bootstrapStylesheetVersion);
306
307            $version = TplUtility::getBootStrapVersion();
308            $localDirPattern = '\/lib\/tpl\/strap\/bootstrap\/' . $version;
309            if ($version == "4.5.0") {
310
311                $scriptsSignature = [
312
313                    "$localDirPattern\/jquery-(.*).js",
314                    "$localDirPattern\/popper.min.js",
315                    "$localDirPattern\/bootstrap.min.js",
316                    'JSINFO', 'js.php'];
317
318                $stylsheetSignature = [
319                    "$localDirPattern\/bootstrap.min.css",
320                    '\/lib\/exe\/css.php\?t\=strap'
321                ];
322
323
324            } else {
325
326                /**
327                 * 5
328                 */
329                $scriptsSignature = [
330                    // "jquery.php", no jquery
331                    "$localDirPattern\/bootstrap.min.js",
332                    "$localDirPattern\/popper.min.js",
333                    "jquery.php", // jquery of Dokuwiki (Bootstrap 5 does not have its own)
334                    'JSINFO',
335                    'js.php'
336                ];
337
338                $stylsheetSignature = [
339                    "$localDirPattern\/bootstrap.min.css",
340                    '\/lib\/exe\/css.php\?t\=strap'
341                ];
342
343
344            }
345
346            // Anonymous
347            $pageId = 'start';
348            saveWikiText($pageId, "Content", 'Script Test base');
349            idx_addPage($pageId);
350
351            $request = new TestRequest();
352            $response = $request->get(array('id' => $pageId, '/doku.php'));
353
354            /**
355             * Script signature
356             */
357
358
359            $this->checkMeta($response, 'script', "src", $scriptsSignature, $testDescription);
360
361            /**
362             * Stylesheet signature (href)
363             */
364            $this->checkMeta($response, 'link[rel="stylesheet"]', "href", $stylsheetSignature, $testDescription);
365        }
366
367    }
368
369
370    /**
371     * For public combostrap website
372     * The Dokuwiki Javascript can be disabled
373     * If no other plugin use it
374     */
375    public function test_handleBootStrapMetaHeaders_anonymous_no_dokuwiki_javascript()
376    {
377
378        /**
379         * Disable
380         */
381        TplUtility::setConf(TplUtility::CONF_DISABLE_BACKEND_JAVASCRIPT, 1);
382
383        /**
384         * For 4 and 5
385         */
386        $bootstrapStylesheetVersions = [self::DEFAULT_BOOTSTRAP_5, self::DEFAULT_BOOTSTRAP_4];
387
388        foreach ($bootstrapStylesheetVersions as $bootstrapStylesheetVersion) {
389
390            $testDescription = "No Javascript for public user (Bootstrap $bootstrapStylesheetVersion)";
391
392            TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, $bootstrapStylesheetVersion);
393
394            $version = TplUtility::getBootStrapVersion();
395            if ($version == "4.5.0") {
396
397                /**
398                 * On 4, bootstrap depends on Jquery
399                 */
400                $scriptsSignature = [
401                    "jquery-(.*).js",
402                    "popper.min.js",
403                    "bootstrap.min.js",
404                    'JSINFO'
405                ];
406
407                $stylsheetSignature = [
408                    "bootstrap.min.css",
409                    '\/lib\/exe\/css.php\?t\=strap'
410                ];
411
412
413            } else {
414
415                /**
416                 * 5, only boostrap js
417                 */
418                $scriptsSignature = [
419                    "bootstrap.min.js",
420                    "cdn.jsdelivr.net\/npm\/@popperjs",
421                    'JSINFO'
422                ];
423
424                $stylsheetSignature = [
425                    "bootstrap.min.css",
426                    '\/lib\/exe\/css.php\?t\=strap'
427                ];
428
429
430            }
431
432            // Anonymous
433            $pageId = 'start';
434            saveWikiText($pageId, "Content", 'Script Test base');
435            idx_addPage($pageId);
436
437            $request = new TestRequest();
438            $response = $request->get(array('id' => $pageId, '/doku.php'));
439
440            /**
441             * Script signature
442             */
443            $this->checkMeta($response, 'script', "src", $scriptsSignature, $testDescription);
444
445            /**
446             * Stylesheet signature (href)
447             */
448            $this->checkMeta($response, 'link[rel="stylesheet"]', "href", $stylsheetSignature, $testDescription);
449        }
450
451    }
452
453    /**
454     * When a user is logged in, the CDN is no more
455     */
456    public
457    function test_handleBootStrapMetaHeaders_loggedin_default()
458    {
459
460        $pageId = 'start';
461        saveWikiText($pageId, "Content", 'Script Test base');
462        idx_addPage($pageId);
463        // Log in
464        global $conf;
465        $conf['useacl'] = 1;
466        $user = 'admin';
467        $conf['superuser'] = $user;
468
469        /**
470         * For 4 and 5
471         */
472        $bootstrapStylesheetVersions = [self::DEFAULT_BOOTSTRAP_5, self::DEFAULT_BOOTSTRAP_4];
473
474        foreach ($bootstrapStylesheetVersions as $bootstrapStylesheetVersion) {
475
476            $testDescription = "Logged in for $bootstrapStylesheetVersion";
477
478            TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, $bootstrapStylesheetVersion);
479
480            $version = TplUtility::getBootStrapVersion();
481            if ($version == "4.5.0") {
482
483                $scriptsSignature = [
484                    "jquery.php",
485                    "cdn.jsdelivr.net\/npm\/popper.js",
486                    "stackpath.bootstrapcdn.com\/bootstrap\/$version\/js\/bootstrap.min.js",
487                    'JSINFO',
488                    'js.php'];
489
490                $stylsheetSignature = [
491                    "stackpath.bootstrapcdn.com\/bootstrap\/$version\/css\/bootstrap.min.css",
492                    '\/lib\/exe\/css.php\?t\=strap'
493                ];
494
495
496            } else {
497
498                /**
499                 * 5
500                 */
501                $scriptsSignature = [
502                    "jquery.php",
503                    "cdn.jsdelivr.net\/npm\/@popperjs",
504                    "cdn.jsdelivr.net\/npm\/bootstrap\@$version\/dist\/js\/bootstrap.min.js",
505                    'JSINFO',
506                    'js.php'];
507
508                $stylsheetSignature = [
509                    "cdn.jsdelivr.net\/npm\/bootstrap\@$version\/dist\/css\/bootstrap.min.css",
510                    '\/lib\/exe\/css.php\?t\=strap'
511                ];
512
513            }
514
515            $request = new TestRequest();
516            $request->setServer('REMOTE_USER', $user);
517            $response = $request->get(array('id' => $pageId, '/doku.php'));
518
519            /**
520             * No Css preloading
521             */
522            $stylesheets = $response->queryHTML('link[rel="preload"]')->get();
523            $this->assertEquals(0, sizeof($stylesheets));
524
525            /**
526             * Script signature
527             */
528            $this->checkMeta($response, 'script', "src", $scriptsSignature, $testDescription);
529
530            /**
531             * Stylesheet signature (href)
532             */
533            $this->checkMeta($response, 'link[rel="stylesheet"]', "href", $stylsheetSignature, $testDescription);
534        }
535
536    }
537
538    /**
539     * test the css preload configuration
540     *
541     * @throws Exception
542     */
543    public
544    function test_css_preload_anonymous()
545    {
546
547        TplUtility::setConf('preloadCss', 1);
548
549        $pageId = 'start';
550        saveWikiText($pageId, "Content", 'Script Test base');
551        idx_addPage($pageId);
552
553        /**
554         * For 4 and 5
555         */
556        $bootstrapStylesheetVersions = [self::DEFAULT_BOOTSTRAP_5, self::DEFAULT_BOOTSTRAP_4];
557
558        foreach ($bootstrapStylesheetVersions as $bootstrapStylesheetVersion) {
559
560            $testDescription = "CSS preload in for $bootstrapStylesheetVersion";
561
562            TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, $bootstrapStylesheetVersion);
563
564            $version = TplUtility::getBootStrapVersion();
565            if ($version == "4.5.0") {
566
567                $stylsheetSignature = [
568                    "stackpath.bootstrapcdn.com\/bootstrap\/$version\/css\/bootstrap.min.css",
569                    '\/lib\/exe\/css.php\?t\=strap'
570                ];
571
572
573            } else {
574
575                /**
576                 * 5
577                 */
578                $stylsheetSignature = [
579                    "cdn.jsdelivr.net\/npm\/bootstrap\@$version\/dist\/css\/bootstrap.min.css",
580                    '\/lib\/exe\/css.php\?t\=strap'
581                ];
582
583            }
584
585            $request = new TestRequest();
586            $response = $request->get(array('id' => $pageId, '/doku.php'));
587
588
589            /**
590             * preload object
591             */
592            $stylesheets = $response->queryHTML('link[rel="preload"]')->get();
593
594
595            $node = array();
596            foreach ($stylesheets as $key => $stylesheet) {
597                if ($stylesheet->hasAttributes()) {
598                    foreach ($stylesheet->attributes as $attr) {
599                        $name = $attr->name;
600                        $value = $attr->value;
601                        $node[$key][$name] = $value;
602                    }
603                }
604            }
605
606            $this->assertEquals(2, sizeof($node), "The stylesheet count should be 2");
607
608            $this->checkMeta($response, 'link[rel="stylesheet"]', "href", $stylsheetSignature, $testDescription);
609
610        }
611
612
613    }
614
615
616    /**
617     * Test the {@link \Combostrap\TplUtility::getBootstrapMetaHeaders()} function
618     * with default conf
619     * @throws Exception
620     */
621    public
622    function test_getBootstrapMetaHeaders()
623    {
624
625        // Default
626        $metas = TplUtility::getBootstrapMetaHeaders();
627        $this->assertEquals(2, sizeof($metas));
628        $this->assertEquals(2, sizeof($metas['script']), "There is two js script (bootstrap+popper)");
629        $this->assertEquals(1, sizeof($metas['link']), "There is one css script");
630
631        TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, self::DEFAULT_BOOTSTRAP_4);
632        $metas = TplUtility::getBootstrapMetaHeaders();
633        $this->assertEquals(2, sizeof($metas));
634        $this->assertEquals(3, sizeof($metas['script']), "There is three js script");
635        $this->assertEquals(1, sizeof($metas['link']), "There is one css script");
636
637
638    }
639
640    /**
641     * Test the {@link \Combostrap\TplUtility::getBootstrapMetaHeaders()} function
642     * with bootswatch stylesheet and cdn (default)
643     * @throws Exception
644     */
645    public
646    function test_getBootstrapMetaHeadersWithCustomStyleSheet()
647    {
648        $template = "simplex";
649        $version = "5.0.1";
650        TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, "$version - $template");
651        $metas = TplUtility::getBootstrapMetaHeaders();
652        $this->assertEquals(2, sizeof($metas));
653        $this->assertEquals(2, sizeof($metas['script']), "There is 2 js script (bootstrap+popper)");
654        $this->assertEquals(1, sizeof($metas['link']), "There is one css script");
655        $this->assertEquals("https://cdn.jsdelivr.net/npm/bootswatch@{$version}/dist/$template/bootstrap.min.css", $metas['link']['css']['href'], "The href is the cdn");
656
657        $version = "4.5.0";
658        TplUtility::setConf(TplUtility::CONF_BOOTSTRAP_VERSION_STYLESHEET, "$version - {$template}");
659        $metas = TplUtility::getBootstrapMetaHeaders();
660        $this->assertEquals(2, sizeof($metas));
661        $this->assertEquals(3, sizeof($metas['script']), "There is three js script");
662        $this->assertEquals(1, sizeof($metas['link']), "There is one css script");
663        $this->assertEquals("https://cdn.jsdelivr.net/npm/bootswatch@$version/dist/$template/bootstrap.min.css", $metas['link']['css']['href'], "The href is the cdn");
664
665    }
666
667
668    /**
669     * Test favicon
670     */
671    public
672    function test_favicon()
673    {
674        $pageId = 'start';
675        saveWikiText($pageId, "Content", 'Script Test base');
676        idx_addPage($pageId);
677
678        $request = new TestRequest();
679        $response = $request->get(array('id' => $pageId));
680
681        // Favicon
682        $shortCut = $response->queryHTML('link[rel="shortcut icon"]');
683        $this->assertEquals(1, $shortCut->count());
684        $this->assertEquals("http://wiki.example.com/./lib/tpl/strap/images/favicon.ico", $shortCut->attr("href"), "Favicon");
685
686        // Icon
687        $icons = $response->queryHTML('link[rel="icon"]');
688        $this->assertEquals(2, $icons->count());
689        /**
690         * @var DOMElement $firstIcons
691         */
692        $firstIcons = $icons->elements[0];
693        $this->assertEquals("http://wiki.example.com/./lib/tpl/strap/images/favicon-32x32.png", $firstIcons->getAttribute("href"));
694        /**
695         * @var DOMElement $secondIcon
696         */
697        $secondIcon = $icons->elements[1];
698        $this->assertEquals("http://wiki.example.com/./lib/tpl/strap/images/favicon-16x16.png", $secondIcon->getAttribute("href"));
699
700        // Apple touch icon
701        $appleIcons = $response->queryHTML('link[rel="apple-touch-icon"]');
702        $this->assertEquals(1, $appleIcons->count());
703        $this->assertEquals("http://wiki.example.com/./lib/tpl/strap/images/apple-touch-icon.png", $appleIcons->attr("href"), "Apple Icon");
704
705    }
706
707    /**
708     * Test that a media page is rendering
709     */
710    public
711    function test_media_manager_php()
712    {
713        $pageId = 'start';
714        saveWikiText($pageId, "Content", 'Script Test base');
715        idx_addPage($pageId);
716
717        $request = new TestRequest();
718        $response = $request->get(array('id' => $pageId, '/mediamanager.php'));
719
720        $generator = $response->queryHTML('meta[name="generator"]')->attr("content");
721        $this->assertEquals("DokuWiki", $generator);
722
723    }
724
725    /**
726     * Test that a railbar is not shown when it's private
727     * @throws Exception
728     */
729    public
730    function test_privateRailbar()
731    {
732        TplUtility::setConf(TplUtility::CONF_PRIVATE_RAIL_BAR, 0);
733
734        $pageId = 'start';
735        saveWikiText($pageId, "Content", 'Script Test base');
736        idx_addPage($pageId);
737
738        $request = new TestRequest();
739        $response = $request->get(array('id' => $pageId, '/doku.php'));
740
741        $toolbarCount = $response->queryHTML('.railbar')->count();
742        $this->assertEquals(2, $toolbarCount);
743
744        // Anonymous user should not see it
745        TplUtility::setConf(TplUtility::CONF_PRIVATE_RAIL_BAR, 1);
746        $request = new TestRequest();
747        $response = $request->get(array('id' => $pageId, '/doku.php'));
748        $toolbarCount = $response->queryHTML('.railbar')->count();
749        $this->assertEquals(0, $toolbarCount);
750
751        // Connected user should see it
752        $request = new TestRequest();
753        $request->setServer('REMOTE_USER', 'auser');
754        $response = $request->get(array('id' => $pageId, '/doku.php'));
755        $toolbarCount = $response->queryHTML('.railbar')->count();
756        $this->assertEquals(2, $toolbarCount);
757
758    }
759
760
761}
762