Skip to content

Commit 89d30d0

Browse files
committed
adding tests for roles endpoint
1 parent a1903ff commit 89d30d0

File tree

6 files changed

+170
-0
lines changed

6 files changed

+170
-0
lines changed

src/controllers/guildRoleHandler.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,15 @@ export async function removeGuildRoleHandler(request: IRequest, env: env) {
6868
});
6969
}
7070
}
71+
export async function getGuildRolesHandler(request: IRequest, env: env) {
72+
// To be implemented
73+
return new JSONResponse(response.NOT_FOUND);
74+
}
75+
76+
export async function getGuildRoleByRoleNameHandler(
77+
request: IRequest,
78+
env: env
79+
) {
80+
// To be implemented
81+
return new JSONResponse(response.NOT_FOUND);
82+
}

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
addGroupRoleHandler,
1111
createGuildRoleHandler,
1212
removeGuildRoleHandler,
13+
getGuildRolesHandler,
1314
} from "./controllers/guildRoleHandler";
1415
import { getMembersInServerHandler } from "./controllers/getMembersInServer";
1516
import { changeNickname } from "./controllers/changeNickname";
@@ -30,6 +31,7 @@ router.put("/roles/create", createGuildRoleHandler);
3031
router.put("/roles/add", addGroupRoleHandler);
3132

3233
router.delete("/roles", removeGuildRoleHandler);
34+
router.get("/roles", getGuildRolesHandler);
3335

3436
router.get("/discord-members", getMembersInServerHandler);
3537

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export type GuildRole = {
2+
id: string;
3+
name: string;
4+
};

src/utils/guildRole.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
guildRoleResponse,
1111
memberGroupRole,
1212
} from "../typeDefinitions/discordMessage.types";
13+
import { GuildRole } from "../typeDefinitions/role.types";
1314

1415
export async function createGuildRole(
1516
body: createNewRole,
@@ -84,3 +85,18 @@ export async function removeGuildRole(details: memberGroupRole, env: env) {
8485
return INTERNAL_SERVER_ERROR;
8586
}
8687
}
88+
89+
90+
export async function getGuildRoles(env: env): Promise<Array<GuildRole>> {
91+
return [];
92+
}
93+
94+
export async function getGuildRoleByName(
95+
roleName: string,
96+
env: env
97+
): Promise<GuildRole> {
98+
return {
99+
id: "dummy-id",
100+
name: "dummy-name",
101+
};
102+
}

tests/fixtures/fixture.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { IRequest } from "itty-router";
12
import {
23
createNewRole,
34
discordMessageRequest,
@@ -95,3 +96,19 @@ export const onlyRoleToBeTagged = {
9596
value: "1118201414078976192",
9697
},
9798
};
99+
100+
export const generateDummyRequestObject = ({
101+
url,
102+
method,
103+
params,
104+
query,
105+
headers, // Object of key value pair
106+
}: Partial<IRequest>): IRequest => {
107+
return {
108+
method: method ?? "GET",
109+
url: url ?? "/roles",
110+
params: params ?? {},
111+
query: query ?? {},
112+
headers: new Map(Object.entries(headers ?? {})),
113+
};
114+
};
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import {
2+
getGuildRoleByRoleNameHandler,
3+
getGuildRolesHandler,
4+
} from "../../../src/controllers/guildRoleHandler";
5+
import { GuildRole } from "../../../src/typeDefinitions/role.types";
6+
import JSONResponse from "../../../src/utils/JsonResponse";
7+
import { generateDummyRequestObject } from "../../fixtures/fixture";
8+
import * as responseConstants from "../../../src/constants/responses";
9+
10+
jest.mock("../../../src/utils/verifyAuthToken", () => ({
11+
verifyAuthToken: jest.fn().mockReturnValue(true),
12+
}));
13+
14+
describe.skip("get roles", () => {
15+
it("should return a instance of JSONResponse", async () => {
16+
const mockRequest = generateDummyRequestObject({ url: "/roles" });
17+
const response = await getGuildRolesHandler(mockRequest, {});
18+
expect(response).toBeInstanceOf(JSONResponse);
19+
});
20+
21+
it("should return Bad Signature object if no auth headers provided", async () => {
22+
const mockRequest = generateDummyRequestObject({ url: "/roles" });
23+
const response: JSONResponse = await getGuildRolesHandler(mockRequest, {});
24+
const jsonResponse: { error: string } = await response.json();
25+
expect(response.status).toBe(401);
26+
expect(jsonResponse.error).toBe(responseConstants.BAD_SIGNATURE);
27+
});
28+
29+
it("should return empty array if there is no roles in guild", async () => {
30+
const mockRequest = generateDummyRequestObject({
31+
url: "/roles",
32+
headers: { Authorization: "Bearer testtoken" },
33+
});
34+
35+
const response: JSONResponse = await getGuildRolesHandler(mockRequest, {});
36+
const jsonRespose: { roles: Array<{ id: string; name: string }> } =
37+
await response.json();
38+
expect(response.status).toBe(200);
39+
expect(Array.isArray(jsonRespose.roles)).toBeTruthy();
40+
expect(jsonRespose.roles.length).toBe(0);
41+
});
42+
43+
it("should return array of id and name of roles present in guild", async () => {
44+
const expectedResponse = [
45+
{
46+
id: "role_id_one",
47+
name: "role_name_one",
48+
},
49+
{
50+
id: "role_id_two",
51+
name: "role_name_two",
52+
},
53+
];
54+
const mockRequest = generateDummyRequestObject({
55+
url: "/roles",
56+
headers: { Authorization: "Bearer testtoken" },
57+
});
58+
59+
const response: JSONResponse = await getGuildRolesHandler(mockRequest, {});
60+
const jsonRespose: { roles: Array<GuildRole> } = await response.json();
61+
expect(response.status).toBe(200);
62+
expect(Array.isArray(jsonRespose.roles)).toBeTruthy();
63+
expect(jsonRespose.roles).toEqual(expectedResponse);
64+
});
65+
});
66+
67+
describe.skip("get role by role name", () => {
68+
it("should return a instance of JSONResponse", async () => {
69+
const mockRequest = generateDummyRequestObject({ url: "/roles/everyone" });
70+
const response = await getGuildRoleByRoleNameHandler(mockRequest, {});
71+
expect(response).toBeInstanceOf(JSONResponse);
72+
});
73+
74+
it("should return Bad Signature object if no auth headers provided", async () => {
75+
const mockRequest = generateDummyRequestObject({ url: "/roles/everyone" });
76+
const response: JSONResponse = await getGuildRoleByRoleNameHandler(
77+
mockRequest,
78+
{}
79+
);
80+
const jsonResponse: { error: string } = await response.json();
81+
expect(response.status).toBe(401);
82+
expect(jsonResponse.error).toBe("🚫 Bad Request Signature");
83+
});
84+
85+
it("should return not found object if there is no roles with given name in guild", async () => {
86+
const mockRequest = generateDummyRequestObject({
87+
url: "/roles/everyone",
88+
headers: { Authorization: "Bearer testtoken" },
89+
});
90+
91+
const response: JSONResponse = await getGuildRoleByRoleNameHandler(
92+
mockRequest,
93+
{}
94+
);
95+
const jsonRespose: { error: string } = await response.json();
96+
expect(response.status).toBe(404);
97+
expect(jsonRespose.error).toBe(responseConstants.NOT_FOUND);
98+
});
99+
100+
it("should return object of id and name corresponding to the role name recieved", async () => {
101+
const expectedResponse = {
102+
id: "role_id_one",
103+
name: "everyone",
104+
};
105+
106+
const mockRequest = generateDummyRequestObject({
107+
url: "/roles/everyone",
108+
headers: { Authorization: "Bearer testtoken" },
109+
});
110+
111+
const response: JSONResponse = await getGuildRoleByRoleNameHandler(
112+
mockRequest,
113+
{}
114+
);
115+
const jsonRespose: { roles: Array<GuildRole> } = await response.json();
116+
expect(response.status).toBe(200);
117+
expect(jsonRespose).toEqual(expectedResponse);
118+
});
119+
});

0 commit comments

Comments
 (0)