Skip to content

Commit 1f24edd

Browse files
authored
Merge pull request #37 from coderPaddyS/Integration-Tests
Implemented most integration tests.
2 parents ecedf59 + 18bae51 commit 1f24edd

24 files changed

+1911
-56
lines changed

.github/workflows/node.js.yml .github/workflows/node.js.yaml

-1
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,3 @@ jobs:
2727
- run: npm install
2828
- run: npm ci
2929
- run: npm run build --if-present
30-
- run: npm test

jest.config.json

+4-2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
"./src/**",
4040
"!./src/routes/**",
4141
"!./src/global.d.ts",
42-
"!./src/hooks.ts"
43-
]
42+
"!./src/hooks.ts",
43+
"!./src/__tests__/**"
44+
],
45+
"testRegex": ".src/__tests__/(?!integration/).*\\.test\\.ts"
4446
}

package.json

+8-3
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@
33
"version": "0.0.1",
44
"scripts": {
55
"dev": "svelte-kit dev",
6-
"build": " npm run test && svelte-kit build",
7-
"package": "npm run test && svelte-kit package",
6+
"build": " npm run test:all && svelte-kit build",
7+
"package": "npm run test:all && svelte-kit package",
88
"preview": "svelte-kit preview",
99
"test": "NODE_OPTIONS=--experimental-vm-modules jest src --config jest.config.json",
1010
"test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest src --config jest.config.json --coverage",
1111
"check": "svelte-check --tsconfig ./tsconfig.json",
1212
"check:watch": "svelte-check --tsconfig ./tsconfig.json --watch",
13-
"test:watch": "npm run test -- --watch"
13+
"test:watch": "npm run test -- --watch",
14+
"test:integration": "NODE_OPTIONS=--experimental-vm-modules jest src --config jest.config.json --testRegex \"./src/__tests__/integration/.*\\.test\\.ts$\"",
15+
"test:integration:coverage": "NODE_OPTIONS=--experimental-vm-modules jest src --config jest.config.json --testRegex \"./src/__tests__/integration/.*\\.test\\.ts$\" --coverage",
16+
"test:all": "NODE_OPTIONS=--experimental-vm-modules jest src --config jest.config.json --testRegex \"./src/__tests__/.*\\.test\\.ts$\" --coverage"
1417
},
1518
"devDependencies": {
1619
"@babel/core": "^7.14.0",
@@ -25,12 +28,14 @@
2528
"babel-jest": "^27.0.0",
2629
"jest": "27",
2730
"jsdom": "^19.0.0",
31+
"rewire": "^6.0.0",
2832
"sass": "^1.47.0",
2933
"svelte": "^3.44.0",
3034
"svelte-check": "^2.2.6",
3135
"svelte-jester": "^2.0.1",
3236
"svelte-preprocess": "^4.9.4",
3337
"ts-jest": "^27.0.0",
38+
"ts-node": "^10.7.0",
3439
"tslib": "^2.3.1",
3540
"typedoc": "^0.22.11",
3641
"typescript": "^4.4.3"
+178
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
2+
import { Framework } from "$lib/controller/framework";
3+
import { BlacklistEntry } from "$lib/model/tables/blacklist/Blacklist";
4+
import { jest } from "@jest/globals";
5+
import { fireEvent } from "@testing-library/dom";
6+
import { ServerMock } from "./__setup__/serverMock";
7+
import { BUTTON } from "./__setup__/constants";
8+
import { clickOnButtonForRows, clickOnButtonForSomeRows, getAllRows } from "./__setup__/helpers";
9+
import { matchers } from "./__setup__/matcher";
10+
import render from "./__setup__/pageRenderer";
11+
import { OpenFramework } from "./__setup__/__mocks__/OpenFramework";
12+
13+
expect.extend(matchers);
14+
15+
describe("Testing interactions of blacklist as user", () => {
16+
17+
let page: HTMLElement;
18+
19+
let framework: OpenFramework;
20+
let serverMock: ServerMock;
21+
let fetchBackend: (body: string) => Promise<any>;
22+
23+
beforeAll(() => {
24+
serverMock = new ServerMock([], [], []);
25+
fetchBackend = serverMock.getFetchBackendMock();
26+
framework = new OpenFramework();
27+
Framework['instance'] = framework;
28+
framework['backend']['fetchBackend'] = fetchBackend;
29+
});
30+
31+
const originalWarn = console.warn.bind(console.warn)
32+
beforeAll(() => {
33+
console.warn = (msg) => !msg.toString().includes('prop') && originalWarn(msg)
34+
})
35+
afterAll(() => {
36+
console.warn = originalWarn
37+
})
38+
39+
beforeEach(() => {
40+
serverMock.setBlacklist([]);
41+
});
42+
43+
describe("a single entry", () => {
44+
45+
const entry = new BlacklistEntry("seggs");
46+
47+
beforeEach(async () => {
48+
serverMock.setBlacklist([entry]);
49+
page = await render.blacklist();
50+
});
51+
52+
test("renders correctly", async () => {
53+
expect(page).toHaveAllRows([entry]);
54+
expect(getAllRows(page).length).toBe(serverMock.getBlacklist().length);
55+
});
56+
57+
test("can be removed", async () => {
58+
expect(page).toHaveAllRows([entry]);
59+
clickOnButtonForRows(page, BUTTON.BLACKLIST.DELETE);
60+
61+
page = await render.blacklist();
62+
expect(page).not.toHaveAllRows([entry]);
63+
64+
page = await render.changes();
65+
expect(getAllRows(page).length).toBe(1);
66+
expect(page).toHaveAllMetadata([entry]);
67+
68+
clickOnButtonForRows(page, BUTTON.CHANGES.ACCEPT);
69+
70+
page = await render.changes();
71+
expect(getAllRows(page).length).toBe(0);
72+
expect(serverMock.getBlacklist().length).toBe(0);
73+
74+
page = await render.blacklist();
75+
expect(page).not.toHaveAllRows([entry]);
76+
});
77+
78+
test("is visible after abortion of change", async () => {
79+
expect(page).toHaveAllRows([entry]);
80+
clickOnButtonForRows(page, BUTTON.BLACKLIST.DELETE);
81+
82+
page = await render.blacklist();
83+
expect(page).not.toHaveAllRows([entry]);
84+
85+
page = await render.changes();
86+
expect(getAllRows(page).length).toBe(1);
87+
expect(page).toHaveAllMetadata([entry]);
88+
89+
clickOnButtonForRows(page, BUTTON.CHANGES.CANCEL);
90+
91+
page = await render.changes();
92+
expect(getAllRows(page).length).toBe(0);
93+
94+
page = await render.blacklist();
95+
expect(page).toHaveAllRows([entry]);
96+
expect(serverMock.getBlacklist().length).toBe(1);
97+
});
98+
});
99+
100+
describe("multiple entries", () => {
101+
102+
beforeEach(async () => {
103+
serverMock.setBlacklist([new BlacklistEntry("seggs"), new BlacklistEntry("penis"), new BlacklistEntry("arsch")]);
104+
page = await render.blacklist();
105+
});
106+
107+
test("renders correctly", () => {
108+
expect(page).toHaveAllRows(serverMock.getBlacklist())
109+
expect(getAllRows(page).length).toBe(serverMock.getBlacklist().length);
110+
});
111+
112+
test.each([
113+
[[0], [1,2]],
114+
[[1], [0,2]],
115+
[[2], [0,1]],
116+
[[0,1], [2]],
117+
[[1,2], [0]],
118+
[[0,2], [1]],
119+
[[0,1,2], []]
120+
])("can be removed", async (toRemove: number[], alwaysVisible: number[]) => {
121+
let visibleEntries = alwaysVisible.map(index => serverMock.getBlacklist()[index].toDisplayData()[0]);
122+
let removedEntries = toRemove.map(index => serverMock.getBlacklist()[index].toDisplayData()[0]);
123+
clickOnButtonForSomeRows(page, toRemove, BUTTON.BLACKLIST.DELETE);
124+
125+
page = await render.blacklist();
126+
expect(page).toHaveSomeRows(alwaysVisible, serverMock.getBlacklist());
127+
expect(page).not.toHaveSomeRows(toRemove, serverMock.getBlacklist());
128+
129+
page = await render.changes();
130+
expect(page).toHaveSomeMetadata(toRemove, serverMock.getBlacklist());
131+
expect(getAllRows(page).length).toBe(toRemove.length);
132+
133+
clickOnButtonForRows(page, BUTTON.CHANGES.ACCEPT);
134+
135+
page = await render.changes();
136+
expect(page).not.toHaveSomeMetadata(toRemove, serverMock.getBlacklist());
137+
expect(getAllRows(page).length).toBe(0);
138+
expect(serverMock.getBlacklist().length).toBe(alwaysVisible.length);
139+
140+
page = await render.blacklist();
141+
expect(getAllRows(page).length).toBe(serverMock.getBlacklist().length);
142+
143+
expect(page).toHaveAllRows(visibleEntries);
144+
expect(page).not.toHaveAllRows(removedEntries);
145+
});
146+
147+
test.each([
148+
[[0], [1,2]],
149+
[[1], [0,2]],
150+
[[2], [0,1]],
151+
[[0,1], [2]],
152+
[[1,2], [0]],
153+
[[0,2], [1]],
154+
[[0,1,2], []]
155+
])("is visible after abortion of action", async (toRemove: number[], alwaysVisible: number[]) => {
156+
clickOnButtonForSomeRows(page, toRemove, BUTTON.BLACKLIST.DELETE);
157+
158+
page = await render.blacklist();
159+
expect(page).toHaveSomeRows(alwaysVisible, serverMock.getBlacklist());
160+
expect(page).not.toHaveSomeRows(toRemove, serverMock.getBlacklist());
161+
162+
page = await render.changes();
163+
expect(page).toHaveSomeMetadata(toRemove, serverMock.getBlacklist());
164+
expect(getAllRows(page).length).toBe(toRemove.length);
165+
166+
clickOnButtonForRows(page, BUTTON.CHANGES.CANCEL);
167+
168+
page = await render.changes();
169+
expect(getAllRows(page).length).toBe(0);
170+
expect(page).not.toHaveSomeMetadata(toRemove, serverMock.getBlacklist());
171+
expect(serverMock.getBlacklist().length).toBe(toRemove.length + alwaysVisible.length);
172+
173+
page = await render.blacklist();
174+
expect(getAllRows(page).length).toBe(serverMock.getBlacklist().length);
175+
expect(page).toHaveAllRows(serverMock.getBlacklist())
176+
});
177+
});
178+
});

0 commit comments

Comments
 (0)