Skip to content

Commit fc90cf7

Browse files
Merge pull request #21 from sentinel-hub/feature/tests
Feature/tests
2 parents 1123b52 + 2d24cfe commit fc90cf7

File tree

8 files changed

+5548
-2119
lines changed

8 files changed

+5548
-2119
lines changed

.github/workflows/on_push.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: Lint
2-
on: [push, pull_request]
2+
on: push
33

44
jobs:
55
test:
@@ -14,5 +14,9 @@ jobs:
1414

1515
- name: Run linter
1616
run: |
17-
npm install
17+
npm ci
1818
npm run lint
19+
20+
- name: Run tests
21+
run: |
22+
npm run test

jest-setup.ts

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
declare global {
2+
namespace jest {
3+
interface Matchers<R> {
4+
toHaveQueryParams(expectedParamsKeys: Array<string>): R;
5+
toHaveQueryParamsValues(expectedParams: Record<string, string>): R;
6+
toHaveOrigin(expectedOrigin: string): R;
7+
}
8+
}
9+
}
10+
11+
expect.extend({
12+
toHaveQueryParams(received, expectedParamsKeys) {
13+
const { params } = parseUrl(received);
14+
for (let k of expectedParamsKeys) {
15+
if (params[k] === undefined) {
16+
return {
17+
message: () => `URL query parameter [${k}] should exist, but it doesn't`,
18+
pass: false,
19+
};
20+
}
21+
}
22+
return {
23+
message: () =>
24+
`URL [${received}] should not include all of the parameters ${JSON.stringify(expectedParamsKeys)}, but it does`,
25+
pass: true,
26+
};
27+
},
28+
29+
toHaveQueryParamsValues(received, expectedParams) {
30+
const { params } = parseUrl(received);
31+
for (let k in expectedParams) {
32+
if (String(params[k]) !== String(expectedParams[k])) {
33+
return {
34+
message: () => `URL query parameter [${k}] should have value [${expectedParams[k]}], instead it has value [${params[k]}]`,
35+
pass: false,
36+
};
37+
}
38+
}
39+
return {
40+
message: () =>
41+
`URL [${received}] should not include all of the values [${JSON.stringify(expectedParams)}], but it does`,
42+
pass: true,
43+
};
44+
},
45+
46+
toHaveOrigin(received, expectedOrigin) {
47+
const { origin } = parseUrl(received);
48+
if (origin !== expectedOrigin) {
49+
return {
50+
message: () => `URL hostname should have value [${expectedOrigin}], instead it has value [${origin}]`,
51+
pass: false,
52+
};
53+
}
54+
return {
55+
message: () => `URL hostname should not have value [${expectedOrigin}], but it does`, // if .not is used
56+
pass: true,
57+
};
58+
},
59+
});
60+
61+
/* ************************ */
62+
63+
function parseUrl(urlWithQueryParams: string) {
64+
const url = new URL(urlWithQueryParams);
65+
let params: Record<string, string> = {};
66+
url.searchParams.forEach((value, key) => {
67+
params[key] = value;
68+
});
69+
const baseUrl = `${url.origin}${url.pathname}`;
70+
return {
71+
origin: url.origin,
72+
baseUrl: baseUrl,
73+
params: params,
74+
};
75+
}
76+
77+
export default undefined;

0 commit comments

Comments
 (0)