-
Notifications
You must be signed in to change notification settings - Fork 483
/
analytics.test.js
102 lines (84 loc) · 3.19 KB
/
analytics.test.js
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
/* global it, expect, beforeEach, afterEach, jest */
import { composeBundlesRaw } from 'redux-bundler'
import createAnalyticsBundle from './analytics'
import sleep from '../../test/helpers/sleep'
beforeEach(() => {
global.Countly = {
opt_out: jest.fn(),
opt_in: jest.fn(),
init: jest.fn()
}
})
afterEach(() => {
delete global.Countly
if (global.navigator && global.navigator.hasOwnProperty('doNotTrack')) {
delete global.navigator.doNotTrack
}
})
function createStore (analyticsOpts = {}) {
return composeBundlesRaw(
{
name: 'mockRoutesBundle',
selectRouteInfo: () => ({})
},
createAnalyticsBundle(analyticsOpts)
)()
}
it('should normalise the doNotTrack state from the navigator.doNotTrack value', () => {
let store = createStore()
// false if not set.
expect(store.selectAnalytics().doNotTrack).toBe(false)
global.navigator = { doNotTrack: 1 }
store = createStore()
expect(store.selectAnalytics().doNotTrack).toBe(true)
global.navigator.doNotTrack = 0
store = createStore()
expect(store.selectAnalytics().doNotTrack).toBe(false)
})
it('should enable analytics if doNotTrack is falsey', () => {
const store = createStore()
expect(store.selectAnalyticsEnabled()).toBe(true)
})
it('should disable analytics if doNotTrack is true', () => {
const store = createStore({ doNotTrack: true })
expect(store.selectAnalyticsEnabled()).toBe(false)
})
it('should enable analytics if doNotTrack is true but user has explicitly enabled it', () => {
const store = createStore({ doNotTrack: true })
store.doEnableAnalytics()
expect(store.selectAnalyticsEnabled()).toBe(true)
})
it('should disable analytics if doNotTrack is falsey but user has explicitly disabled it', () => {
const store = createStore({ doNotTrack: false })
store.doDisableAnalytics()
expect(store.selectAnalyticsEnabled()).toBe(false)
})
it('should enable selectAnalyticsAskToEnable if doNotTrack is true and user has not explicity enabled or disabled it', () => {
const store = createStore({ doNotTrack: true })
expect(store.selectAnalyticsAskToEnable()).toBe(true)
})
it('should disable selectAnalyticsAskToEnable if doNotTrack is true and user has explicity disabled it', () => {
const store = createStore({ doNotTrack: true })
store.doDisableAnalytics()
expect(store.selectAnalyticsAskToEnable()).toBe(false)
})
it('should disable selectAnalyticsAskToEnable if doNotTrack is true and user has explicity enabled it', () => {
const store = createStore({ doNotTrack: true })
store.doEnableAnalytics()
expect(store.selectAnalyticsAskToEnable()).toBe(false)
})
it('should disable selectAnalyticsAskToEnable if analytics are enabled', () => {
const store = createStore({ doNotTrack: false })
expect(store.selectAnalyticsAskToEnable()).toBe(false)
})
it('should toggle analytics', async (done) => {
const store = createStore({ doNotTrack: false })
expect(store.selectAnalyticsEnabled()).toBe(true)
store.doToggleAnalytics()
expect(store.selectAnalyticsEnabled()).toBe(false)
// we calc enabled state from tim diff between lastEnabledAt and lastDisabledAt, so need a pause
await sleep()
store.doToggleAnalytics()
expect(store.selectAnalyticsEnabled()).toBe(true)
done()
})