File size: 3,550 Bytes
6778ee0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import { initializePageDynamically } from './support/initialize-page-dynamically'
import {
  e,
  expectPlausibleInAction,
  hideAndShowCurrentTab,
  switchByMode
} from './support/test-utils'
import { test } from '@playwright/test'
import { ScriptConfig } from './support/types'
import { LOCAL_SERVER_ADDR } from './support/server'

const DEFAULT_CONFIG: ScriptConfig = {
  domain: 'example.com',
  endpoint: `${LOCAL_SERVER_ADDR}/api/event`,
  captureOnLocalhost: true
}

for (const mode of ['web', 'esm']) {
  test.describe(`respects hashBasedRouting config option (${mode})`, () => {
    test('pageviews and engagement events are sent without "h" parameter if hashBasedRouting is not set', async ({
      page
    }, { testId }) => {
      const { url } = await initializePageDynamically(page, {
        testId,
        scriptConfig: switchByMode(
          {
            web: DEFAULT_CONFIG,
            esm: `<script type="module">import { init, track } from '/tracker/js/npm_package/plausible.js'; init(${JSON.stringify(
              DEFAULT_CONFIG
            )})</script>`
          },
          mode
        ),
        bodyContent: ''
      })

      await expectPlausibleInAction(page, {
        action: async () => {
          await page.goto(url)
          await hideAndShowCurrentTab(page, { delay: 200 })
        },
        expectedRequests: [
          {
            n: 'pageview',
            h: e.toBeUndefined()
          },
          { n: 'engagement', h: e.toBeUndefined() }
        ]
      })
    })

    test('pageviews and engagement events are sent with "h:1" parameter if hashBasedRouting is set to true', async ({
      page
    }, { testId }) => {
      const config = { ...DEFAULT_CONFIG, hashBasedRouting: true }
      const { url } = await initializePageDynamically(page, {
        testId,
        scriptConfig: switchByMode(
          {
            web: config,
            esm: `<script type="module">import { init, track } from '/tracker/js/npm_package/plausible.js'; init(${JSON.stringify(
              config
            )})</script>`
          },
          mode
        ),
        bodyContent: ''
      })

      await expectPlausibleInAction(page, {
        action: async () => {
          await page.goto(`${url}#page1`)
          await hideAndShowCurrentTab(page, { delay: 200 })
        },
        expectedRequests: [
          {
            n: 'pageview',
            h: 1,
            u: `${LOCAL_SERVER_ADDR}${url}#page1`
          },
          {
            n: 'engagement',
            h: 1,
            u: `${LOCAL_SERVER_ADDR}${url}#page1`
          }
        ]
      })
    })
  })
}

test.describe('hash-based routing (legacy)', () => {
  test('pageviews and engagement events are sent with "h:1" parameter if using the hash extension', async ({
    page
  }, { testId }) => {
    const { url } = await initializePageDynamically(page, {
      testId,
      scriptConfig: /* HTML */ `<script
        data-domain="${DEFAULT_CONFIG.domain}"
        async
        src="/tracker/js/plausible.hash.local.js"
      ></script>`,
      bodyContent: ''
    })

    await expectPlausibleInAction(page, {
      action: async () => {
        await page.goto(`${url}#page1`)
        await hideAndShowCurrentTab(page, { delay: 200 })
      },
      expectedRequests: [
        {
          n: 'pageview',
          h: 1,
          u: `${LOCAL_SERVER_ADDR}${url}#page1`
        },
        {
          n: 'engagement',
          h: 1,
          u: `${LOCAL_SERVER_ADDR}${url}#page1`
        }
      ]
    })
  })
})