Skip to content

Commit 5ca2710

Browse files
committed
test case success
1 parent 223907c commit 5ca2710

File tree

5 files changed

+195
-9
lines changed

5 files changed

+195
-9
lines changed

src/controllers/editGuildRolesHandler.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { env } from "../typeDefinitions/default.types";
55
import JSONResponse from "../utils/JsonResponse";
66
import { verifyNodejsBackendAuthToken } from "../utils/verifyAuthToken";
77
import { updateRole } from "../typeDefinitions/discordMessage.types";
8-
import { updateGuildRole } from "../utils/editGroupRole";
8+
import { editGuildRole } from "../utils/editGroupRole";
99

1010
export async function editGuildRoleHandler(request: IRequest, env: env) {
1111
const authHeader = request.headers.get("Authorization");
@@ -15,7 +15,6 @@ export async function editGuildRoleHandler(request: IRequest, env: env) {
1515
const devFlag = dev === "true";
1616

1717
if (!authHeader) {
18-
console.log("authheader did it");
1918
return new JSONResponse(response.BAD_SIGNATURE, { status: 401 });
2019
}
2120

@@ -28,8 +27,8 @@ export async function editGuildRoleHandler(request: IRequest, env: env) {
2827
try {
2928
await verifyNodejsBackendAuthToken(authHeader, env);
3029
const body: updateRole = await request.json();
30+
const result = await editGuildRole(body.rolename, roleId, env, reason);
3131

32-
const result = await updateGuildRole(body.rolename, roleId, env, reason);
3332
if (result === response.ROLE_UPDATED) {
3433
return new Response(null, { status: 204 });
3534
} else {

src/utils/editGroupRole.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import { env } from "../typeDefinitions/default.types";
44

55
import createDiscordHeaders from "./createDiscordHeaders";
66

7-
export async function updateGuildRole(
7+
export async function editGuildRole(
88
rolename: string,
99
roleid: string,
1010
env: env,
1111
reason?: string
1212
) {
13-
const updateGuildRoleUrl = `${DISCORD_BASE_URL}/guilds/${env.DISCORD_GUILD_ID}/roles/${roleid}`;
13+
const editGuildRoleUrl = `${DISCORD_BASE_URL}/guilds/${env.DISCORD_GUILD_ID}/roles/${roleid}`;
1414

1515
const headers: HeadersInit = createDiscordHeaders({
1616
reason,
@@ -21,7 +21,7 @@ export async function updateGuildRole(
2121
mentionable: true,
2222
};
2323
try {
24-
const response = await fetch(updateGuildRoleUrl, {
24+
const response = await fetch(editGuildRoleUrl, {
2525
method: "PATCH",
2626
headers,
2727
body: JSON.stringify(data),
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
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 { editGuildRoleHandler } from "../../../src/controllers/editGuildRolesHandler";
5+
import * as editGuildRoleUtils from "../../../src/utils/editGroupRole";
6+
7+
describe("editGuildRoleHandler", () => {
8+
afterEach(() => {
9+
jest.restoreAllMocks();
10+
});
11+
beforeEach(() => {
12+
jest.clearAllMocks();
13+
});
14+
const roleId = "1A32BEX04";
15+
it("should return BAD_SIGNATURE when authorization header is not provided", async () => {
16+
const mockRequest = generateDummyRequestObject({
17+
url: "/roles",
18+
params: {
19+
roleId: roleId,
20+
},
21+
method: "PATCH",
22+
});
23+
const response = await editGuildRoleHandler(mockRequest, guildEnv);
24+
const jsonResponse = await response.json();
25+
expect(jsonResponse).toEqual(responseConstants.BAD_SIGNATURE);
26+
});
27+
it("should return NOT_IMPLEMENTED when dev is false", async () => {
28+
const mockRequest = generateDummyRequestObject({
29+
url: "/roles",
30+
params: {
31+
roleId: roleId,
32+
},
33+
query: {
34+
dev: "false",
35+
},
36+
method: "PATCH",
37+
headers: { Authorization: "Bearer testtoken" },
38+
});
39+
const response = await editGuildRoleHandler(mockRequest, guildEnv);
40+
const jsonResponse = await response.json();
41+
expect(jsonResponse).toEqual(responseConstants.NOT_IMPLEMENTED);
42+
});
43+
it("should return BAD_REQUEST when roleId is not valid", async () => {
44+
const mockRequest = generateDummyRequestObject({
45+
url: "/roles",
46+
params: {
47+
roleId: "",
48+
},
49+
query: {
50+
dev: "true",
51+
},
52+
method: "PATCH",
53+
headers: { Authorization: "Bearer testtoken" },
54+
});
55+
const response = await editGuildRoleHandler(mockRequest, guildEnv);
56+
const jsonResponse = await response.json();
57+
expect(jsonResponse).toEqual(responseConstants.BAD_REQUEST);
58+
});
59+
it("should return INTERNAL_SERVER_ERROR when token is not verified", async () => {
60+
const expectedResponse = responseConstants.INTERNAL_SERVER_ERROR;
61+
const mockRequest = generateDummyRequestObject({
62+
url: "/roles",
63+
params: {
64+
roleId: roleId,
65+
},
66+
query: {
67+
dev: "true",
68+
},
69+
method: "PATCH",
70+
headers: { Authorization: "Bearer testtoken" },
71+
});
72+
jest
73+
.spyOn(verifyTokenUtils, "verifyNodejsBackendAuthToken")
74+
.mockRejectedValue(expectedResponse);
75+
const response = await editGuildRoleHandler(mockRequest, guildEnv);
76+
const jsonResponse = await response.json();
77+
expect(jsonResponse).toEqual(expectedResponse);
78+
});
79+
it("should return INTERNAL_SERVER_ERROR when update fails", async () => {
80+
const expectedResponse = responseConstants.INTERNAL_SERVER_ERROR;
81+
const mockRequest = generateDummyRequestObject({
82+
url: "/roles",
83+
params: {
84+
roleId: roleId,
85+
},
86+
query: {
87+
dev: "true",
88+
},
89+
method: "PATCH",
90+
headers: { Authorization: "Bearer testtoken" },
91+
body: JSON.stringify({ rolename: "New Role Name" }),
92+
});
93+
jest
94+
.spyOn(verifyTokenUtils, "verifyNodejsBackendAuthToken")
95+
.mockResolvedValueOnce();
96+
const response = await editGuildRoleHandler(mockRequest, guildEnv);
97+
const jsonResponse = await response.json();
98+
expect(jsonResponse).toEqual(expectedResponse);
99+
});
100+
it("should return ok response when role is updated", async () => {
101+
const expectedResponse = new Response(null, {
102+
status: 204,
103+
});
104+
const mockRequest = generateDummyRequestObject({
105+
url: "/roles",
106+
method: "PATCH",
107+
params: {
108+
roleId: roleId,
109+
},
110+
query: {
111+
dev: "true",
112+
},
113+
headers: { Authorization: "Bearer testtoken" },
114+
json: () => Promise.resolve({ rolename: "something" }),
115+
});
116+
const verifyTokenSpy = jest
117+
.spyOn(verifyTokenUtils, "verifyNodejsBackendAuthToken")
118+
.mockResolvedValueOnce();
119+
const editGuildRoleSpy = jest
120+
.spyOn(editGuildRoleUtils, "editGuildRole")
121+
.mockResolvedValueOnce(responseConstants.ROLE_UPDATED);
122+
const response = await editGuildRoleHandler(mockRequest, guildEnv);
123+
124+
expect(verifyTokenSpy).toHaveBeenCalledTimes(1);
125+
expect(editGuildRoleSpy).toHaveBeenCalledTimes(1);
126+
expect(response).toEqual(expectedResponse);
127+
expect(response.status).toEqual(expectedResponse.status);
128+
});
129+
});
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { DISCORD_BASE_URL } from "../../../src/constants/urls";
2+
import { editGuildRole } from "../../../src/utils/editGroupRole";
3+
import JSONResponse from "../../../src/utils/JsonResponse";
4+
import { guildEnv } from "../../fixtures/fixture";
5+
import * as response from "../../../src/constants/responses";
6+
7+
describe("editGuildRole", () => {
8+
const roleid = "1A32BEX04";
9+
const rolename = "something";
10+
11+
const editGuildRoleUrl = `${DISCORD_BASE_URL}/guilds/${guildEnv.DISCORD_GUILD_ID}/roles/${roleid}`;
12+
const mockRequestInit = {
13+
method: "PATCH",
14+
headers: {
15+
"Content-Type": "application/json",
16+
Authorization: `Bot ${guildEnv.DISCORD_TOKEN}`,
17+
"X-Audit-Log-Reason": "This is reason for this action",
18+
},
19+
body: JSON.stringify({ name: rolename, mentionable: true }),
20+
};
21+
beforeEach(() => {
22+
jest.clearAllMocks();
23+
});
24+
afterEach(() => {
25+
jest.restoreAllMocks();
26+
});
27+
it("should pass the reason to discord as a X-Audit-Log-Reason header if provided", async () => {
28+
jest
29+
.spyOn(global, "fetch")
30+
.mockImplementation((inp) => Promise.resolve(new JSONResponse(inp)));
31+
32+
await editGuildRole(
33+
rolename,
34+
roleid,
35+
guildEnv,
36+
"This is reason for this action"
37+
);
38+
39+
expect(global.fetch).toHaveBeenCalledWith(
40+
editGuildRoleUrl,
41+
mockRequestInit
42+
);
43+
});
44+
45+
it("should return ROLE_UPDATED when response is ok", async () => {
46+
const expectedResponse = new Response(null, {
47+
status: 204,
48+
});
49+
jest.spyOn(global, "fetch").mockResolvedValue(expectedResponse);
50+
const result = await editGuildRole(rolename, roleid, guildEnv);
51+
expect(result).toEqual(response.ROLE_UPDATED);
52+
expect(global.fetch).toHaveBeenCalledTimes(1);
53+
});
54+
it("should return INTERNAL_SERVER_ERROR when response is not ok", async () => {
55+
const expectedErrorResponse = new Response(response.INTERNAL_SERVER_ERROR);
56+
jest.spyOn(global, "fetch").mockRejectedValue(expectedErrorResponse);
57+
const result = await editGuildRole(rolename, roleid, guildEnv);
58+
expect(result).toEqual(response.INTERNAL_SERVER_ERROR);
59+
expect(global.fetch).toHaveBeenCalledTimes(1);
60+
});
61+
});

wrangler.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,3 @@ name = "discord-slash-commands"
22
main = "src/index.ts"
33
compatibility_date = "2023-01-13"
44
node_compat = true
5-
[vars]
6-
[triggers]
7-
crons = ["0 */12 * * *"]

0 commit comments

Comments
 (0)