-
Notifications
You must be signed in to change notification settings - Fork 3.9k
/
Copy pathtest-amp-pixel.js
128 lines (118 loc) · 3.89 KB
/
test-amp-pixel.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/**
* Copyright 2017 The AMP HTML Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS-IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {AmpPixel} from '../../builtins/amp-pixel';
import {BrowserController, RequestBank} from '../../testing/test-helper';
import {createElementWithAttributes} from '../../src/dom';
describe.configure().run('amp-pixel', function() {
describes.integration(
'amp-pixel macro integration test',
{
body: `<amp-pixel
src="${RequestBank.getUrl()}hello-world?title=TITLE&qp=QUERY_PARAM(a)">`,
params: {
a: 123,
},
},
env => {
beforeEach(() => {
const browser = new BrowserController(env.win);
return browser.waitForElementBuild('amp-pixel');
});
it('should expand the TITLE macro', () => {
return RequestBank.withdraw().then(req => {
expect(req.url).to.equal('/hello-world?title=AMP%20TEST&qp=123');
expect(req.headers.host).to.be.ok;
});
});
}
);
describes.integration(
'amp-pixel nested macro with leading spaces',
{
body: `<amp-pixel src="${RequestBank.getUrl()}?nested=QUERY_PARAM(doesNotExist, 1.QUERY_PARAM(a))">`,
params: {
a: '1234',
},
},
env => {
beforeEach(() => {
const browser = new BrowserController(env.win);
return browser.waitForElementBuild('amp-pixel');
});
it('should ignore leading spaces and resolve correctly', () => {
return RequestBank.withdraw().then(req => {
expect(req.url).to.equal('/?nested=1.1234');
expect(req.headers.host).to.be.ok;
});
});
}
);
describes.integration(
'amp-pixel referrer integration test',
{
body: `<amp-pixel src="${RequestBank.getUrl()}">`,
},
env => {
beforeEach(() => {
const browser = new BrowserController(env.win);
return browser.waitForElementBuild('amp-pixel');
});
it('should keep referrer if no referrerpolicy specified', () => {
return RequestBank.withdraw().then(req => {
expect(req.url).to.equal('/');
expect(req.headers.referer).to.be.ok;
});
});
}
);
describes.integration(
'amp-pixel no-referrer integration test',
{
body: `<amp-pixel src="${RequestBank.getUrl()}"
referrerpolicy="no-referrer">`,
},
env => {
beforeEach(() => {
const browser = new BrowserController(env.win);
return browser.waitForElementBuild('amp-pixel');
});
it('should remove referrer if referrerpolicy=no-referrer', () => {
return RequestBank.withdraw().then(req => {
expect(req.url).to.equal('/');
expect(req.headers.referer).to.not.be.ok;
});
});
}
);
});
describes.fakeWin('amp-pixel with img (inabox)', {amp: true}, env => {
it('should not write image', () => {
const src = 'https://foo.com/tracker/foo';
const pixelElem = createElementWithAttributes(
env.win.document,
'amp-pixel',
{src, 'i-amphtml-ssr': ''}
);
pixelElem.appendChild(
createElementWithAttributes(env.win.document, 'img', {src})
);
env.win.document.body.appendChild(pixelElem);
env.sandbox.stub(env.ampdoc, 'whenFirstVisible').returns(Promise.resolve());
const pixel = new AmpPixel(pixelElem);
pixel.buildCallback();
expect(pixelElem.querySelectorAll('img').length).to.equal(1);
});
});