-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathmetadata.test.js
More file actions
85 lines (75 loc) · 2.52 KB
/
metadata.test.js
File metadata and controls
85 lines (75 loc) · 2.52 KB
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
const { expect } = require("chai");
const { createDOM } = require("./helpers/dom");
describe("metadata", function () {
it("collects metadata from global object and collector", function (done) {
const dom = createDOM({
settings: { autoCollect: false, metadataCollector: "collector" },
beforeRun(vmContext) {
const { runInContext } = require("vm");
runInContext(
"window.sa_metadata = { fromGlobal: true };" +
"window.collector = function(data){ return { fromCollector: true, path: data.path }; };",
vmContext
);
},
});
const { runInContext } = require("vm");
runInContext(
"window.manualMeta = { manual: true };",
dom.getInternalVMContext()
);
dom.window.sa_pageview("/meta", dom.window.manualMeta);
setTimeout(() => {
const req = dom.sent.find(
(r) => r.type === "image" && /path=%2Fmeta/.test(r.url)
);
expect(req, "pageview request").to.exist;
const url = new URL(req.url);
const meta = JSON.parse(
decodeURIComponent(url.searchParams.get("metadata"))
);
expect(meta).to.include({
manual: true,
fromGlobal: true,
fromCollector: true,
});
done();
}, 10);
});
it("reloads global metadata on each call", function (done) {
const dom = createDOM({ settings: { autoCollect: false } });
const { runInContext } = require("vm");
runInContext(
"window.sa_metadata = { first: true };",
dom.getInternalVMContext()
);
dom.window.sa_pageview("/first");
setTimeout(() => {
let req = dom.sent.find(
(r) => r.type === "image" && /path=%2Ffirst/.test(r.url)
);
expect(req, "first pageview request").to.exist;
let url = new URL(req.url);
let meta = JSON.parse(
decodeURIComponent(url.searchParams.get("metadata"))
);
expect(meta).to.include({ first: true });
runInContext(
"window.sa_metadata = { second: true };",
dom.getInternalVMContext()
);
dom.window.sa_pageview("/second");
setTimeout(() => {
req = dom.sent.find(
(r) => r.type === "image" && /path=%2Fsecond/.test(r.url)
);
expect(req, "second pageview request").to.exist;
url = new URL(req.url);
meta = JSON.parse(decodeURIComponent(url.searchParams.get("metadata")));
expect(meta).to.include({ second: true });
expect(meta).to.not.have.property("first");
done();
}, 10);
}, 10);
});
});