Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e04543b

Browse filesBrowse files
committed
Refactor tests - split into multiple test files
1 parent 5425f94 commit e04543b
Copy full SHA for e04543b

File tree

3 files changed

+97
-92
lines changed
Filter options

3 files changed

+97
-92
lines changed

‎src/cookieHandler.test.ts

Copy file name to clipboard
+31Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { createCookieHandler } from "./cookieHandler"
2+
import {getMocks} from "./index.test"
3+
4+
describe("Cookie Handler", () => {
5+
test("Reader", async () => {
6+
const { req, res } = getMocks();
7+
const handler = createCookieHandler();
8+
9+
expect(await handler.read(req)).toBeUndefined();
10+
req.headers.cookie = "something=else; nextSession=abc123; some=more";
11+
expect(await handler.read(req)).toBe("abc123");
12+
});
13+
14+
test("Writer", async () => {
15+
const { res } = getMocks();
16+
const handler = createCookieHandler();
17+
18+
res.setHeader = jest.fn();
19+
await handler.write(res, "testId")
20+
expect(res.setHeader).toHaveBeenCalledWith("Set-Cookie", "nextSession=testId; Path=/; HttpOnly; SameSite=Strict");
21+
});
22+
23+
test("Deleter", async () => {
24+
const { res } = getMocks();
25+
const handler = createCookieHandler();
26+
27+
res.setHeader = jest.fn();
28+
await handler.destroy(res)
29+
expect(res.setHeader).toHaveBeenCalledWith("Set-Cookie", "nextSession=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly; SameSite=Strict");
30+
});
31+
});

‎src/index.test.ts

Copy file name to clipboardExpand all lines: src/index.test.ts
+4-92Lines changed: 4 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { GetServerSidePropsContext, NextApiRequest, NextApiResponse } from "next
99
import { CookieHandler, createCookieHandler } from "./cookieHandler"
1010
import { createMemorySessionStore, SessionStore } from "./memorySessionStore"
1111

12-
function getMocks() {
12+
export function getMocks() {
1313
const req = {
1414
headers: {
1515
cookie: ""
@@ -48,98 +48,7 @@ function getMocks() {
4848
}
4949
}
5050

51-
describe("Memory Session Store", () => {
52-
it("Should create unique string IDs", async () => {
53-
const store = createMemorySessionStore();
54-
expect(typeof (await store.id())).toBe("string");
55-
const id1 = await store.id();
56-
const id2 = await store.id();
57-
expect(id1 === id2).toBe(false);
58-
});
59-
60-
it("Should return null on unknown sessionId", async () => {
61-
const store = createMemorySessionStore();
62-
expect(await store.get("unknown")).toBe(null);
63-
});
64-
65-
it("Should resolve to void when setting or replacing values", async () => {
66-
const store = createMemorySessionStore();
67-
expect(await store.set("id1", { test: true })).toBeUndefined();
68-
expect(await store.merge("id2", { test: true })).toBeUndefined();
69-
});
70-
71-
it("Should return the correct data that previously has been set", async () => {
72-
const store = createMemorySessionStore();
73-
await store.set("id1", { test: true });
74-
expect(await store.get("id1")).toMatchObject({ test: true });
75-
});
76-
77-
it("Should replace objects when calling set on the same session id", async () => {
78-
const store = createMemorySessionStore();
79-
await store.set("id1", { test: true });
80-
expect(await store.get("id1")).toMatchObject({ test: true });
81-
await store.set("id1", { foo: "bar" });
82-
expect(await store.get("id1")).toMatchObject({ foo: "bar" });
83-
});
84-
85-
it("Should correctly merge session objects", async () => {
86-
const store = createMemorySessionStore();
87-
await store.merge("id1", { foo: "bar" });
88-
expect(await store.get("id1")).toMatchObject({ foo: "bar" });
89-
await store.merge("id1", { some: "more" });
90-
expect(await store.get("id1")).toMatchObject({ foo: "bar", some: "more" });
91-
});
92-
93-
it("Should correctly destroy session objects", async () => {
94-
const store = createMemorySessionStore();
95-
await store.set("id1", { test: true });
96-
expect(await store.get("id1")).not.toBe(null);
97-
await store.destroy("id1");
98-
expect(await store.get("id1")).toBe(null);
99-
});
100-
101-
it("Should remove older session objects", async () => {
102-
const now = Date.now();
103-
jest.useFakeTimers("modern");
104-
const store = createMemorySessionStore();
105-
await store.set("timeoutTest", { exists: true });
106-
jest.setSystemTime(now + 31 * 60 * 1000);
107-
jest.advanceTimersByTime(10000);
108-
expect(await store.get("timeoutTest")).toBe(null);
109-
});
110-
});
111-
112-
describe("Cookie Handler", () => {
113-
test("Reader", async () => {
114-
const { req, res } = getMocks();
115-
const handler = createCookieHandler();
116-
117-
expect(await handler.read(req)).toBeUndefined();
118-
req.headers.cookie = "something=else; nextSession=abc123; some=more";
119-
expect(await handler.read(req)).toBe("abc123");
120-
});
121-
122-
test("Writer", async () => {
123-
const { res } = getMocks();
124-
const handler = createCookieHandler();
125-
126-
res.setHeader = jest.fn();
127-
await handler.write(res, "testId")
128-
expect(res.setHeader).toHaveBeenCalledWith("Set-Cookie", "nextSession=testId; Path=/; HttpOnly; SameSite=Strict");
129-
});
130-
131-
test("Deleter", async () => {
132-
const { res } = getMocks();
133-
const handler = createCookieHandler();
134-
135-
res.setHeader = jest.fn();
136-
await handler.destroy(res)
137-
expect(res.setHeader).toHaveBeenCalledWith("Set-Cookie", "nextSession=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT; HttpOnly; SameSite=Strict");
138-
});
139-
});
140-
14151
describe("externals", () => {
142-
14352
describe("getSessionId", () => {
14453
it("Returns fresh id, creates cookie, if requested", async () => {
14554
const { req, res, context, sessionStore, cookieHandler } = getMocks();
@@ -286,6 +195,9 @@ describe("externals", () => {
286195
expect(await validateCSRFToken(context, token)).toBe(true);
287196
expect(await validateCSRFToken(req, res, token)).toBe(false);
288197
expect(await sessionStore.get("uuid")).toMatchObject({});
198+
199+
const token2 = await getCSRFToken(req, res);
200+
expect(token === token2).toBe(false);
289201
});
290202
});
291203
});

‎src/memorySessionStore.test.ts

Copy file name to clipboard
+62Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { createMemorySessionStore } from "./memorySessionStore"
2+
3+
describe("Memory Session Store", () => {
4+
it("Should create unique string IDs", async () => {
5+
const store = createMemorySessionStore();
6+
expect(typeof (await store.id())).toBe("string");
7+
const id1 = await store.id();
8+
const id2 = await store.id();
9+
expect(id1 === id2).toBe(false);
10+
});
11+
12+
it("Should return null on unknown sessionId", async () => {
13+
const store = createMemorySessionStore();
14+
expect(await store.get("unknown")).toBe(null);
15+
});
16+
17+
it("Should resolve to void when setting or replacing values", async () => {
18+
const store = createMemorySessionStore();
19+
expect(await store.set("id1", { test: true })).toBeUndefined();
20+
expect(await store.merge("id2", { test: true })).toBeUndefined();
21+
});
22+
23+
it("Should return the correct data that previously has been set", async () => {
24+
const store = createMemorySessionStore();
25+
await store.set("id1", { test: true });
26+
expect(await store.get("id1")).toMatchObject({ test: true });
27+
});
28+
29+
it("Should replace objects when calling set on the same session id", async () => {
30+
const store = createMemorySessionStore();
31+
await store.set("id1", { test: true });
32+
expect(await store.get("id1")).toMatchObject({ test: true });
33+
await store.set("id1", { foo: "bar" });
34+
expect(await store.get("id1")).toMatchObject({ foo: "bar" });
35+
});
36+
37+
it("Should correctly merge session objects", async () => {
38+
const store = createMemorySessionStore();
39+
await store.merge("id1", { foo: "bar" });
40+
expect(await store.get("id1")).toMatchObject({ foo: "bar" });
41+
await store.merge("id1", { some: "more" });
42+
expect(await store.get("id1")).toMatchObject({ foo: "bar", some: "more" });
43+
});
44+
45+
it("Should correctly destroy session objects", async () => {
46+
const store = createMemorySessionStore();
47+
await store.set("id1", { test: true });
48+
expect(await store.get("id1")).not.toBe(null);
49+
await store.destroy("id1");
50+
expect(await store.get("id1")).toBe(null);
51+
});
52+
53+
it("Should remove older session objects", async () => {
54+
const now = Date.now();
55+
jest.useFakeTimers("modern");
56+
const store = createMemorySessionStore();
57+
await store.set("timeoutTest", { exists: true });
58+
jest.setSystemTime(now + 31 * 60 * 1000);
59+
jest.advanceTimersByTime(10000);
60+
expect(await store.get("timeoutTest")).toBe(null);
61+
});
62+
});

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.