Skip to content

Commit d992603

Browse files
committed
refactor: refactor deleteGuildRoleHandler and tests
1 parent 3428a0d commit d992603

File tree

4 files changed

+170
-20
lines changed

4 files changed

+170
-20
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { IRequest } from "itty-router";
2+
import JSONResponse from "../utils/JsonResponse";
3+
import { env } from "../typeDefinitions/default.types";
4+
import * as response from "../constants/responses";
5+
import { verifyNodejsBackendAuthToken } from "../utils/verifyAuthToken";
6+
import { deleteGuildRole } from "../utils/deleteGuildRole";
7+
8+
export async function deleteGuildRoleHandler(request: IRequest, env: env) {
9+
const authHeader = request.headers.get("Authorization");
10+
const reason = request.headers.get("X-Audit-Log-Reason");
11+
const roleId = decodeURI(request.params?.roleId ?? "");
12+
const { dev } = request.query;
13+
const devFlag = dev === "true" ? true : false;
14+
15+
if (!devFlag) {
16+
return new JSONResponse(response.NOT_FOUND, { status: 404 });
17+
}
18+
19+
if (!authHeader) {
20+
return new JSONResponse(response.BAD_SIGNATURE, { status: 401 });
21+
}
22+
if (!roleId) {
23+
return new JSONResponse(response.BAD_REQUEST, { status: 400 });
24+
}
25+
26+
try {
27+
await verifyNodejsBackendAuthToken(authHeader, env);
28+
const result = await deleteGuildRole(env, roleId, reason);
29+
30+
if (result === response.ROLE_REMOVED) {
31+
return new Response(null, { status: 204 });
32+
} else {
33+
return new JSONResponse(response.INTERNAL_SERVER_ERROR, {
34+
status: 500,
35+
});
36+
}
37+
} catch (err) {
38+
return new JSONResponse(response.INTERNAL_SERVER_ERROR, {
39+
status: 500,
40+
});
41+
}
42+
}

src/controllers/guildRoleHandler.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
removeGuildRole,
99
getGuildRoleByName,
1010
getGuildRoles,
11-
deleteGuildRole,
1211
} from "../utils/guildRole";
1312
import {
1413
createNewRole,
@@ -23,10 +22,6 @@ import { DISCORD_BASE_URL } from "../constants/urls";
2322
import { GROUP_ROLE_ADD } from "../constants/requestsActions";
2423
import createDiscordHeaders from "../utils/createDiscordHeaders";
2524

26-
export async function deleteGuildRoleHandler(request: IRequest, env: env) {
27-
return await deleteGuildRole(env, "101");
28-
}
29-
3025
export async function createGuildRoleHandler(request: IRequest, env: env) {
3126
const authHeader = request.headers.get("Authorization");
3227
if (!authHeader) {
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
import { generateDummyRequestObject, guildEnv } from "../../fixtures/fixture";
2+
import * as responseConstants from "../../../src/constants/responses";
3+
import * as verifyTokenUtils from "../../../src/utils/verifyAuthToken";
4+
import { deleteGuildRoleHandler } from "../../../src/controllers/deleteGuildRoleHandler";
5+
import * as deleteGuildRoleUtils from "../../../src/utils/deleteGuildRole";
6+
7+
describe("deleteGuildRoleHandler", () => {
8+
afterEach(() => {
9+
jest.restoreAllMocks();
10+
});
11+
beforeEach(() => {
12+
jest.clearAllMocks();
13+
});
14+
const roleId = "1A32BEX04";
15+
it("should return NOT_FOUND when dev is false", async () => {
16+
const mockRequest = generateDummyRequestObject({
17+
url: "/guildroles",
18+
params: {
19+
roleId: roleId,
20+
},
21+
query: {
22+
dev: "false",
23+
},
24+
method: "DELETE",
25+
});
26+
const response = await deleteGuildRoleHandler(mockRequest, guildEnv);
27+
const jsonResponse = await response.json();
28+
expect(jsonResponse).toEqual(responseConstants.NOT_FOUND);
29+
});
30+
it("should return BAD_REQUEST when roleId is not valid", async () => {
31+
const mockRequest = generateDummyRequestObject({
32+
url: "/guildroles",
33+
params: {
34+
roleId: "",
35+
},
36+
query: {
37+
dev: "true",
38+
},
39+
method: "DELETE",
40+
headers: { Authorization: "Bearer testtoken" },
41+
});
42+
const response = await deleteGuildRoleHandler(mockRequest, guildEnv);
43+
const jsonResponse = await response.json();
44+
expect(jsonResponse).toEqual(responseConstants.BAD_REQUEST);
45+
});
46+
it("should return BAD_SIGNATURE when authorization header is not provided", async () => {
47+
const mockRequest = generateDummyRequestObject({
48+
url: "/guildroles",
49+
params: {
50+
roleId: roleId,
51+
},
52+
query: {
53+
dev: "true",
54+
},
55+
method: "DELETE",
56+
});
57+
const response = await deleteGuildRoleHandler(mockRequest, guildEnv);
58+
const jsonResponse = await response.json();
59+
expect(jsonResponse).toEqual(responseConstants.BAD_SIGNATURE);
60+
});
61+
it("should return INTERNAL_SERVER_ERROR when response is not ok", async () => {
62+
const mockResponse = responseConstants.INTERNAL_SERVER_ERROR;
63+
const mockRequest = generateDummyRequestObject({
64+
url: "/guildroles",
65+
params: {
66+
roleId: roleId,
67+
},
68+
query: {
69+
dev: "true",
70+
},
71+
method: "DELETE",
72+
headers: { Authorization: "Bearer testtoken" },
73+
});
74+
jest
75+
.spyOn(deleteGuildRoleUtils, "deleteGuildRole")
76+
.mockResolvedValue(mockResponse);
77+
const response = await deleteGuildRoleHandler(mockRequest, guildEnv);
78+
const jsonResponse = await response.json();
79+
expect(jsonResponse).toEqual(mockResponse);
80+
});
81+
it("should return INTERNAL_SERVER_ERROR when token is not verified", async () => {
82+
const mockResponse = responseConstants.INTERNAL_SERVER_ERROR;
83+
const mockRequest = generateDummyRequestObject({
84+
url: "/guildroles",
85+
method: "DELETE",
86+
params: {
87+
roleId: roleId,
88+
},
89+
query: {
90+
dev: "true",
91+
},
92+
headers: { Authorization: "Bearer testtoken" },
93+
});
94+
jest
95+
.spyOn(verifyTokenUtils, "verifyNodejsBackendAuthToken")
96+
.mockRejectedValue(mockResponse);
97+
const response = await deleteGuildRoleHandler(mockRequest, guildEnv);
98+
const jsonResponse = await response.json();
99+
expect(jsonResponse).toEqual(mockResponse);
100+
});
101+
it("should return ok response", async () => {
102+
const mockResponse = new Response(null, {
103+
status: 204,
104+
});
105+
const mockRequest = generateDummyRequestObject({
106+
url: "/guildroles",
107+
method: "DELETE",
108+
params: {
109+
roleId: roleId,
110+
},
111+
query: {
112+
dev: "true",
113+
},
114+
headers: { Authorization: "Bearer testtoken" },
115+
});
116+
const verifyTokenSpy = jest
117+
.spyOn(verifyTokenUtils, "verifyNodejsBackendAuthToken")
118+
.mockResolvedValueOnce();
119+
const deleteGuildRoleSpy = jest
120+
.spyOn(deleteGuildRoleUtils, "deleteGuildRole")
121+
.mockResolvedValueOnce(responseConstants.ROLE_REMOVED);
122+
const response = await deleteGuildRoleHandler(mockRequest, guildEnv);
123+
expect(verifyTokenSpy).toHaveBeenCalledTimes(1);
124+
expect(deleteGuildRoleSpy).toHaveBeenCalledTimes(1);
125+
expect(response).toEqual(mockResponse);
126+
expect(response.status).toEqual(mockResponse.status);
127+
});
128+
});

tests/unit/handlers/guildRoleHandler.test.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
deleteGuildRoleHandler,
32
getGuildRoleByRoleNameHandler,
43
getGuildRolesHandler,
54
getGuildRolesPostHandler,
@@ -348,17 +347,3 @@ describe("getGuildRolesPostHandler", () => {
348347
expect(jsonResponse).toEqual(responseConstants.INTERNAL_SERVER_ERROR);
349348
});
350349
});
351-
352-
describe("deleteGuildRoleHandler", () => {
353-
it("should return undefined", async () => {
354-
const mockRequest = generateDummyRequestObject({
355-
url: "/guildroles",
356-
params: {
357-
roleId: "101",
358-
},
359-
method: "DELETE",
360-
});
361-
const response = await deleteGuildRoleHandler(mockRequest, guildEnv);
362-
expect(response).toEqual(undefined);
363-
});
364-
});

0 commit comments

Comments
 (0)