1<?php
2
3/**
4 * @group plugin_googletagmanager
5 * @group plugins
6 */
7
8class action_plugin_googletagmanagerTest extends \DokuWikiTest
9{
10    const gtmPluginName = 'googletagmanager';
11
12    public function setUp(): void
13    {
14        $this->pluginsEnabled[] = self::gtmPluginName;
15        parent::setUp();
16    }
17
18    public function test_google_tag_manager()
19    {
20        global $conf;
21        $gtmValue = "GTM-12345";
22        $conf['plugin'][self::gtmPluginName][action_plugin_googletagmanager::GTMID] = $gtmValue;
23
24        $pageId = 'start';
25        saveWikiText($pageId, "Content", 'Script Test base');
26        idx_addPage($pageId);
27
28        $request = new TestRequest();
29        $response = $request->get(['id' => $pageId, '/doku.php']);
30
31        /**
32         * Tags to searched
33         */
34        $tagsSearched = ["script", "noscript"];
35
36        foreach ($tagsSearched as $tagSearched) {
37            $domElements = $response->queryHTML($tagSearched);
38
39            $patternFound = false;
40            foreach ($domElements as $domElement) {
41                $patternFound = false;
42                foreach ($domElements as $domElement) {
43                    if ($tagSearched=="script") {
44                        $value = $domElement->textContent;
45                    } else {
46                        // iframe src as subelement of noscript
47                        $this->assertEquals("iframe", $domElement->firstChild->nodeName);
48                        $value = $domElement->firstChild->getAttribute("src");
49                    }
50                    $patternFound = preg_match("!https://www.googletagmanager.com/.*id=.*$gtmValue!s", $value) === 1;
51                    if ($patternFound) {
52                        break;
53                    }
54                }
55                $this->assertTrue($patternFound, "The GTM scripts have not been found for the tag $tagSearched");
56            }
57        }
58    }
59
60    public function test_google_tag_manager_awcode()
61    {
62        global $conf;
63        $gtmValue = "AW-12345";
64        $conf['plugin'][self::gtmPluginName][action_plugin_googletagmanager::GTMID] = $gtmValue;
65
66        $pageId = 'start';
67        saveWikiText($pageId, "Content", 'Script Test base');
68        idx_addPage($pageId);
69
70        $request = new TestRequest();
71        $response = $request->get(['id' => $pageId, '/doku.php']);
72
73        $domElements = $response->queryHTML("script");
74
75        $patternFound = false;
76        foreach ($domElements as $domElement) {
77            $value = $domElement->textContent;
78            $patternFound = preg_match("/$gtmValue/", $value) === 1;
79            if ($patternFound) {
80                break;
81            }
82        }
83        $this->assertTrue($patternFound, "The GTM scripts have not been found");
84    }
85}
86