Skip to content

Commit a4a190b

Browse files
committed
Using roles url of discord to get roles details
1 parent abed9b9 commit a4a190b

File tree

5 files changed

+33
-48
lines changed

5 files changed

+33
-48
lines changed
Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
11
export type GuildRole = {
22
id: string;
33
name: string;
4+
color: string;
5+
hoist: boolean;
6+
icon?: string;
7+
position?: integer;
8+
managed?: boolean;
9+
mentionable?: boolean;
410
};
511

6-
export type GuildDetails = {
7-
// This type defines the partial guild details response that we get from discord
8-
id: string;
9-
name: string;
10-
roles: Array<{
11-
id: string;
12-
name: string;
13-
permissions: string;
14-
position: number;
15-
color: number;
16-
hoist: boolean;
17-
managed: boolean;
18-
mentionable: boolean;
19-
}>;
20-
};
12+
export type Role = Pick<GuildRole, "id" | "name">;

src/utils/guildRole.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
guildRoleResponse,
1212
memberGroupRole,
1313
} from "../typeDefinitions/discordMessage.types";
14-
import { GuildDetails, GuildRole } from "../typeDefinitions/role.types";
14+
import { GuildRole, Role } from "../typeDefinitions/role.types";
1515

1616
export async function createGuildRole(
1717
body: createNewRole,
@@ -87,11 +87,11 @@ export async function removeGuildRole(details: memberGroupRole, env: env) {
8787
}
8888
}
8989

90-
export async function getGuildRoles(env: env): Promise<Array<GuildRole>> {
91-
const guildDetailsUrl = `${DISCORD_BASE_URL}/guilds/${env.DISCORD_GUILD_ID}`;
90+
export async function getGuildRoles(env: env): Promise<Array<Role>> {
91+
const guildRolesUrl = `${DISCORD_BASE_URL}/guilds/${env.DISCORD_GUILD_ID}/roles`;
9292

9393
try {
94-
const response = await fetch(guildDetailsUrl, {
94+
const response = await fetch(guildRolesUrl, {
9595
method: "GET",
9696
headers: {
9797
"Content-Type": "application/json",
@@ -103,9 +103,9 @@ export async function getGuildRoles(env: env): Promise<Array<GuildRole>> {
103103
throw new Error(ROLE_FETCH_FAILED);
104104
}
105105

106-
const guildDetails: GuildDetails = await response.json();
106+
const guildRoles: Array<GuildRole> = await response.json();
107107

108-
return guildDetails.roles.map((role) => ({
108+
return guildRoles.map((role) => ({
109109
id: role.id,
110110
name: role.name,
111111
}));
@@ -117,7 +117,7 @@ export async function getGuildRoles(env: env): Promise<Array<GuildRole>> {
117117
export async function getGuildRoleByName(
118118
roleName: string,
119119
env: env
120-
): Promise<GuildRole | undefined> {
120+
): Promise<Role | undefined> {
121121
const roles = await getGuildRoles(env);
122122
return roles?.find((role) => role.name === roleName);
123123
}

tests/fixtures/fixture.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,3 @@ export const rolesMock = [
135135
mentionable: true,
136136
},
137137
];
138-
139-
export const guildDetailsMock = {
140-
id: "123434232324242424",
141-
name: "test server",
142-
roles: rolesMock,
143-
};

tests/unit/handlers/guildRoleHandler.test.ts

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {
22
getGuildRoleByRoleNameHandler,
33
getGuildRolesHandler,
44
} from "../../../src/controllers/guildRoleHandler";
5-
import { GuildRole } from "../../../src/typeDefinitions/role.types";
5+
import { Role } from "../../../src/typeDefinitions/role.types";
66
import JSONResponse from "../../../src/utils/JsonResponse";
77
import {
88
generateDummyRequestObject,
@@ -84,16 +84,14 @@ describe("get roles", () => {
8484
mockRequest,
8585
guildEnv
8686
);
87-
const jsonResponse: { roles: Array<GuildRole> } = await response.json();
87+
const jsonResponse: { roles: Array<Role> } = await response.json();
8888
expect(response.status).toBe(200);
8989
expect(Array.isArray(jsonResponse.roles)).toBeTruthy();
9090
expect(jsonResponse.roles.length).toBe(0);
9191
});
9292

9393
it("should return array of id and name of roles present in guild", async () => {
94-
const expectedResponse = rolesMock;
95-
getGuildRolesSpy.mockResolvedValueOnce(expectedResponse);
96-
94+
getGuildRolesSpy.mockResolvedValueOnce(rolesMock);
9795
const mockRequest = generateDummyRequestObject({
9896
url: "/roles",
9997
headers: { Authorization: "Bearer testtoken" },
@@ -103,15 +101,15 @@ describe("get roles", () => {
103101
mockRequest,
104102
guildEnv
105103
);
106-
const jsonResponse: { roles: Array<GuildRole> } = await response.json();
104+
const jsonResponse: { roles: Array<Role> } = await response.json();
107105
expect(response.status).toBe(200);
108106
expect(Array.isArray(jsonResponse.roles)).toBeTruthy();
109-
expect(jsonResponse.roles).toEqual(expectedResponse);
107+
expect(jsonResponse.roles).toEqual(rolesMock);
110108
});
111109
});
112110

113111
describe("get role by role name", () => {
114-
beforeEach(() => {
112+
afterEach(() => {
115113
jest.resetAllMocks();
116114
});
117115

@@ -199,9 +197,9 @@ describe("get role by role name", () => {
199197
mockRequest,
200198
guildEnv
201199
);
202-
const jsonResponse: { roles: Array<GuildRole> } = await response.json();
200+
const role: Role = await response.json();
203201
expect(response.status).toBe(500);
204-
expect(jsonResponse).toEqual({
202+
expect(role).toEqual({
205203
error: responseConstants.ROLE_FETCH_FAILED,
206204
});
207205
});
@@ -221,15 +219,16 @@ describe("get role by role name", () => {
221219
mockRequest,
222220
guildEnv
223221
);
224-
const jsonResponse: { roles: Array<GuildRole> } = await response.json();
222+
const role: Role = await response.json();
225223
expect(response.status).toBe(500);
226-
expect(jsonResponse).toEqual({
224+
expect(role).toEqual({
227225
error: responseConstants.INTERNAL_SERVER_ERROR,
228226
});
229227
});
230228

231229
it("should return object of id and name corresponding to the role name recieved", async () => {
232-
getGuildRoleByNameSpy.mockResolvedValueOnce(rolesMock[0]);
230+
const resultMock = { id: rolesMock[0].id, name: rolesMock[0].name };
231+
getGuildRoleByNameSpy.mockResolvedValueOnce(resultMock);
233232

234233
const mockRequest = generateDummyRequestObject({
235234
url: "/roles",
@@ -243,8 +242,8 @@ describe("get role by role name", () => {
243242
mockRequest,
244243
guildEnv
245244
);
246-
const jsonResponse: { roles: Array<GuildRole> } = await response.json();
245+
const role: Role = await response.json();
247246
expect(response.status).toBe(200);
248-
expect(jsonResponse).toEqual(rolesMock[0]);
247+
expect(role).toEqual(resultMock);
249248
});
250249
});

tests/unit/utils/guildRole.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import {
1010
import {
1111
dummyAddRoleBody,
1212
dummyCreateBody,
13-
guildDetailsMock,
1413
guildEnv,
14+
rolesMock,
1515
} from "../../fixtures/fixture";
1616

1717
describe("createGuildRole", () => {
@@ -162,10 +162,10 @@ describe("getGuildRoles", () => {
162162
jest
163163
.spyOn(global, "fetch")
164164
.mockImplementationOnce(async () =>
165-
Promise.resolve(new JSONResponse(guildDetailsMock))
165+
Promise.resolve(new JSONResponse(rolesMock))
166166
);
167167
const roles = await getGuildRoles(guildEnv);
168-
const expectedRoles = guildDetailsMock.roles.map(({ id, name }) => ({
168+
const expectedRoles = rolesMock.map(({ id, name }) => ({
169169
id,
170170
name,
171171
}));
@@ -200,7 +200,7 @@ describe("getGuildRolesByName", () => {
200200
jest
201201
.spyOn(global, "fetch")
202202
.mockImplementationOnce(async () =>
203-
Promise.resolve(new JSONResponse(guildDetailsMock))
203+
Promise.resolve(new JSONResponse(rolesMock))
204204
);
205205
const role = await getGuildRoleByName("@everyone", guildEnv);
206206
const expectedRoles = {
@@ -214,7 +214,7 @@ describe("getGuildRolesByName", () => {
214214
jest
215215
.spyOn(global, "fetch")
216216
.mockImplementationOnce(async () =>
217-
Promise.resolve(new JSONResponse(guildDetailsMock))
217+
Promise.resolve(new JSONResponse(rolesMock))
218218
);
219219
const role = await getGuildRoleByName("everyone", guildEnv);
220220
expect(role).toBeUndefined();

0 commit comments

Comments
 (0)