1 <?php /** @noinspection PhpComposerExtensionStubsInspection */
2 
3 use ComboStrap\TplUtility;
4 
5 require_once(__DIR__ . '/../class/TplUtility.php');
6 require_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  */
15 class 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(): void
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