-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdata-serializer.test.js
113 lines (110 loc) · 4.78 KB
/
data-serializer.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
103
104
105
106
107
108
109
110
111
112
113
'use strict'
const { expect } = require('chai')
const DataSerializer = require('./data-serializer')
describe('lib.data-serializer.DataSerializer', () => {
describe('generateSerializedDataScript', () => {
it('returns script with cached serializedData', async () => {
const dataSerializer = new DataSerializer({
poller: {
cache: {
serializedData: '{"splitsData":{"split-1-name":"{\\"name\\":\\"split-1-name\\",\\"status\\":\\"bar\\"}","split-2-name":"{\\"name\\":\\"split-2-name\\",\\"status\\":\\"baz\\"}"},"since":1,"segmentsData":{"test-segment":"{\\"name\\":\\"test-segment\\",\\"added\\":[\\"foo\\",\\"bar\\"]}"},"usingSegmentsCount":2}'
}
}
})
const res = await dataSerializer.generateSerializedDataScript()
const window = {}
// eslint-disable-next-line no-eval
eval(res.replace('<script>', '').replace('</script>', ''))
expect(window).to.deep.equal({
__splitCachePreload: {
splitsData: {
'split-1-name': '{"name":"split-1-name","status":"bar"}',
'split-2-name': '{"name":"split-2-name","status":"baz"}'
},
since: 1,
segmentsData: {
'test-segment': '{"name":"test-segment","added":["foo","bar"]}'
},
usingSegmentsCount: 2
}
})
})
it('returns script with cached serializedData when there is a splits argument', async () => {
const dataSerializer = new DataSerializer({
poller: {
cache: {
serializedData: '{"splitsData":{"split-1-name":"{\\"name\\":\\"split-1-name\\",\\"status\\":\\"bar\\"}","split-2-name":"{\\"name\\":\\"split-2-name\\",\\"status\\":\\"baz\\"}"},"since":1,"segmentsData":{"test-segment":"{\\"name\\":\\"test-segment\\",\\"added\\":[\\"foo\\",\\"bar\\"]}"},"usingSegmentsCount":2}'
},
getSerializedDataSubset: () => '{"splitsData":{"split-1-name":"{\\"name\\":\\"split-1-name\\",\\"status\\":\\"bar\\"}"},"since":1,"segmentsData":{"test-segment":"{\\"name\\":\\"test-segment\\",\\"added\\":[\\"foo\\",\\"bar\\"]}"},"usingSegmentsCount":2}'
}
})
const res = await dataSerializer.generateSerializedDataScript(['split-1-name'])
const window = {}
// eslint-disable-next-line no-eval
eval(res.replace('<script>', '').replace('</script>', ''))
expect(window).to.deep.equal({
__splitCachePreload: {
splitsData: {
'split-1-name': '{"name":"split-1-name","status":"bar"}'
},
since: 1,
segmentsData: {
'test-segment': '{"name":"test-segment","added":["foo","bar"]}'
},
usingSegmentsCount: 2
}
})
})
it('handles empty serializedData in poller cache', async () => {
const dataSerializer = new DataSerializer({
poller: {
cache: {}
}
})
const res = await dataSerializer.generateSerializedDataScript()
const window = {}
// eslint-disable-next-line no-eval
eval(res.replace('<script>', '').replace('</script>', ''))
expect(window).to.deep.equal({ __splitCachePreload: {} })
})
it('handles empty serializedData in poller cache when there is a splits argument', async () => {
const dataSerializer = new DataSerializer({
poller: {
cache: {},
getSerializedDataSubset: () => '{}'
}
})
const res = await dataSerializer.generateSerializedDataScript(['foo'])
const window = {}
// eslint-disable-next-line no-eval
eval(res.replace('<script>', '').replace('</script>', ''))
expect(window).to.deep.equal({ __splitCachePreload: {} })
})
it('can handle alternative preloadLocations', async () => {
const dataSerializer = new DataSerializer({
poller: {
cache: {
serializedData: '{"splitsData":{"split-1-name":"{\\"name\\":\\"split-1-name\\",\\"status\\":\\"bar\\"}","split-2-name":"{\\"name\\":\\"split-2-name\\",\\"status\\":\\"baz\\"}"},"since":1,"segmentsData":{"test-segment":"{\\"name\\":\\"test-segment\\",\\"added\\":[\\"foo\\",\\"bar\\"]}"},"usingSegmentsCount":2}'
}
}
})
const res = await dataSerializer.generateSerializedDataScript([], '__customLocation')
const window = {}
// eslint-disable-next-line no-eval
eval(res.replace('<script>', '').replace('</script>', ''))
expect(window).to.deep.equal({
__customLocation: {
splitsData: {
'split-1-name': '{"name":"split-1-name","status":"bar"}',
'split-2-name': '{"name":"split-2-name","status":"baz"}'
},
since: 1,
segmentsData: {
'test-segment': '{"name":"test-segment","added":["foo","bar"]}'
},
usingSegmentsCount: 2
}
})
})
})
})