Skip to content

Commit d8d12da

Browse files
committed
Add tests for removeQueryParams
1 parent 04141be commit d8d12da

File tree

3 files changed

+107
-64
lines changed

3 files changed

+107
-64
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import { expect } from 'chai';
2+
3+
import createWebPageDOM from './dom.js';
4+
import { removeQueryParams } from './exposedFilters.js';
5+
6+
describe('exposedFilters', () => {
7+
let webPageDOM;
8+
const baseURL = 'https://example.com';
9+
10+
before(() => {
11+
webPageDOM = createWebPageDOM('<!DOCTYPE html><html><body></body></html>', baseURL);
12+
});
13+
14+
describe('#removeQueryParams', () => {
15+
describe('from links', () => {
16+
let link;
17+
18+
before(() => {
19+
link = webPageDOM.createElement('a');
20+
link.href = 'https://example.com/page?utm_source=test&keep=value';
21+
webPageDOM.body.appendChild(link);
22+
removeQueryParams(webPageDOM, ['utm_source']);
23+
});
24+
25+
it('removes specified query parameters', () => {
26+
expect(link.href).to.equal('https://example.com/page?keep=value');
27+
});
28+
});
29+
30+
describe('from images', () => {
31+
let img;
32+
33+
before(() => {
34+
img = webPageDOM.createElement('img');
35+
img.src = 'https://example.com/image.jpg?width=100&keep=value';
36+
webPageDOM.body.appendChild(img);
37+
removeQueryParams(webPageDOM, ['width']);
38+
});
39+
40+
it('removes specified query parameters', () => {
41+
expect(img.src).to.equal('https://example.com/image.jpg?keep=value');
42+
});
43+
});
44+
45+
describe('with string parameter', () => {
46+
let link;
47+
48+
before(() => {
49+
link = webPageDOM.createElement('a');
50+
link.href = 'https://example.com/page?utm_source=test&keep=value';
51+
webPageDOM.body.appendChild(link);
52+
removeQueryParams(webPageDOM, 'utm_source');
53+
});
54+
55+
it('removes single query parameter passed as string', () => {
56+
expect(link.href).to.equal('https://example.com/page?keep=value');
57+
});
58+
});
59+
60+
describe('with empty parameters', () => {
61+
let link;
62+
63+
before(() => {
64+
link = webPageDOM.createElement('a');
65+
link.href = 'https://example.com/page?utm_source=test&keep=value';
66+
webPageDOM.body.appendChild(link);
67+
removeQueryParams(webPageDOM, []);
68+
});
69+
70+
it('leaves URL unchanged when no parameters to remove', () => {
71+
expect(link.href).to.equal('https://example.com/page?utm_source=test&keep=value');
72+
});
73+
});
74+
75+
describe('with invalid URLs', () => {
76+
let link;
77+
78+
before(() => {
79+
link = webPageDOM.createElement('a');
80+
link.href = 'invalid://url';
81+
webPageDOM.body.appendChild(link);
82+
removeQueryParams(webPageDOM, ['utm_source']);
83+
});
84+
85+
it('ignores elements with invalid URLs', () => {
86+
expect(link.href).to.equal('invalid://url');
87+
});
88+
});
89+
90+
describe('with multiple parameters', () => {
91+
let link;
92+
93+
before(() => {
94+
link = webPageDOM.createElement('a');
95+
link.href = 'https://example.com/page?utm_source=test&utm_medium=email&keep=value&remove=me';
96+
webPageDOM.body.appendChild(link);
97+
removeQueryParams(webPageDOM, [ 'utm_source', 'utm_medium', 'remove' ]);
98+
});
99+
100+
it('removes all specified query parameters', () => {
101+
expect(link.href).to.equal('https://example.com/page?keep=value');
102+
});
103+
});
104+
});
105+
});

src/archivist/extract/filter.test.js

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -212,38 +212,4 @@ describe('Filter', () => {
212212
expect(webPageDOM.querySelector('a.email-protection').innerHTML).to.equal('[email&nbsp;protected]');
213213
});
214214
});
215-
216-
describe('#removeQueryParams', () => {
217-
describe('from links', () => {
218-
let link;
219-
220-
before(async () => {
221-
link = webPageDOM.createElement('a');
222-
link.href = 'https://example.com/page?utm_source=test&keep=value';
223-
webPageDOM.body.appendChild(link);
224-
sourceDocument.removeQueryParams = ['utm_source'];
225-
await filter(webPageDOM, sourceDocument);
226-
});
227-
228-
it('removes specified query parameters', async () => {
229-
expect(link.href).to.equal('https://example.com/page?keep=value');
230-
});
231-
});
232-
233-
describe('from images', () => {
234-
let img;
235-
236-
before(async () => {
237-
img = webPageDOM.createElement('img');
238-
img.src = 'https://example.com/image.jpg?width=100&keep=value';
239-
webPageDOM.body.appendChild(img);
240-
sourceDocument.removeQueryParams = ['width'];
241-
await filter(webPageDOM, sourceDocument);
242-
});
243-
244-
it('removes specified query parameters', async () => {
245-
expect(img.src).to.equal('https://example.com/image.jpg?keep=value');
246-
});
247-
});
248-
});
249215
});

src/archivist/extract/index.test.js

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ const rawHTMLWithCommonChangingItems = `
7575
const expectedExtractedWithCommonChangingItems = `Title
7676
=====
7777
78-
[link 1](https://exemple.com/relative/link)
78+
[link 1](https://exemple.com/relative/link?utm_source=test&id=123)
7979
8080
[link 2](#anchor)
8181
82-
[link 3](http://absolute.url/link)
82+
[link 3](http://absolute.url/link?keep=me)
8383
8484
link 4
8585
@@ -150,34 +150,6 @@ describe('Extract', () => {
150150
expect(result).to.not.include('2d4e4243594c4e596d4e4459545e4e424259034858');
151151
});
152152

153-
it('removes specified query parameters from links and images', async () => {
154-
const result = await extract(new SourceDocument({
155-
content: rawHTMLWithCommonChangingItems,
156-
location: virtualLocation,
157-
contentSelectors: 'body',
158-
removeQueryParams: [ 'utm_source', 'width' ],
159-
}));
160-
161-
expect(result).to.include('https://exemple.com/relative/link?id=123');
162-
expect(result).to.include('http://absolute.url/link?keep=me');
163-
expect(result).to.include('https://exemple.com/image.jpg?quality=80');
164-
expect(result).to.not.include('utm_source=test');
165-
expect(result).to.not.include('width=100');
166-
});
167-
168-
it('keeps all query parameters when none are specified for removal', async () => {
169-
const result = await extract(new SourceDocument({
170-
content: rawHTMLWithCommonChangingItems,
171-
location: virtualLocation,
172-
contentSelectors: 'body',
173-
}));
174-
175-
expect(result).to.include('utm_source=test');
176-
expect(result).to.include('width=100');
177-
expect(result).to.include('quality=80');
178-
expect(result).to.include('keep=me');
179-
});
180-
181153
context('with a synchronous filter', () => {
182154
it('extracts content from the given HTML also with given additional filter', async () => {
183155
const result = await extract(new SourceDocument({

0 commit comments

Comments
 (0)