Skip to content

Commit 0790f9c

Browse files
chore: add get and list users tests (#53)
* chore: add get and list users tests * fix: update list users type
1 parent 8fd10e2 commit 0790f9c

File tree

3 files changed

+718
-2
lines changed

3 files changed

+718
-2
lines changed

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"devDependencies": {
3434
"@types/node": "^15.0.1",
3535
"@types/pluralize": "0.0.29",
36+
"msw": "^2.1.5",
3637
"prettier": "2.2.1",
3738
"tslint": "6.1.3",
3839
"typescript": "^5.3.3",
@@ -41,4 +42,4 @@
4142
"dependencies": {
4243
"jose": "^5.2.0"
4344
}
44-
}
45+
}

test/resources/users.test.ts

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import { afterAll, afterEach, beforeAll, describe, test, expect } from "vitest";
2+
import { setupServer } from "msw/node";
3+
import { HttpResponse, http } from "msw";
4+
import { Knock } from "../../src/knock";
5+
6+
const mockUsers = [
7+
{
8+
__typename: "User",
9+
created_at: null,
10+
id: "e8534d44-8f7f-41a9-9b81-931ca9bf4962",
11+
updated_at: "2023-10-18T17:19:26.286Z",
12+
13+
name: "Dennis Nedry",
14+
},
15+
{
16+
__typename: "User",
17+
created_at: null,
18+
id: "49fc5f5a-516d-42aa-b47c-60fdab7adf99",
19+
updated_at: "2023-10-18T17:19:26.457Z",
20+
21+
name: "John Hammond",
22+
},
23+
{
24+
__typename: "User",
25+
created_at: null,
26+
id: "cbcdacc5-ab59-444c-8abc-33df05b8535e",
27+
updated_at: "2023-10-18T17:19:26.568Z",
28+
29+
name: "Alan Grant",
30+
},
31+
{
32+
__typename: "User",
33+
created_at: null,
34+
id: "bdd33263-ad89-4ea3-98f3-3b0e80e32fa6",
35+
updated_at: "2023-10-18T17:19:26.678Z",
36+
37+
name: "Ian Malcolm",
38+
},
39+
{
40+
__typename: "User",
41+
created_at: null,
42+
id: "0a2131d6-ed83-4140-9d89-d0904e57fb4e",
43+
updated_at: "2023-10-18T17:19:26.785Z",
44+
45+
name: "Ellie Sattler",
46+
},
47+
];
48+
49+
const restHandlers = [
50+
http.get("http://api.knock.test/v1/users", () => {
51+
return HttpResponse.json({
52+
entries: mockUsers,
53+
page_info: {
54+
__typename: "PageInfo",
55+
after: null,
56+
before: null,
57+
page_size: 50,
58+
total_count: mockUsers.length,
59+
},
60+
});
61+
}),
62+
http.get("http://api.knock.test/v1/users/:userId", ({ params }) => {
63+
const user = mockUsers.find((u) => u.id === params.userId);
64+
if (!user) {
65+
return new HttpResponse(null, {
66+
status: 404,
67+
});
68+
}
69+
return HttpResponse.json(user);
70+
}),
71+
];
72+
73+
const server = setupServer(...restHandlers);
74+
75+
const knock = new Knock("sk_test_12345", {
76+
host: "http://api.knock.test",
77+
});
78+
79+
beforeAll(() => server.listen({ onUnhandledRequest: "error" }));
80+
81+
afterAll(() => server.close());
82+
83+
afterEach(() => server.resetHandlers());
84+
85+
describe("it can get users", () => {
86+
test("it can list users", async () => {
87+
const { entries, page_info } = await knock.users.list();
88+
expect(entries).toStrictEqual(mockUsers);
89+
expect(page_info.total_count).toBe(mockUsers.length);
90+
});
91+
92+
test("it can get a user by id", async () => {
93+
const user = await knock.users.get("e8534d44-8f7f-41a9-9b81-931ca9bf4962");
94+
expect(user).toBeDefined();
95+
expect(user.id).toBe("e8534d44-8f7f-41a9-9b81-931ca9bf4962");
96+
expect(user.name).toBe("Dennis Nedry");
97+
});
98+
});

0 commit comments

Comments
 (0)