Skip to content

Commit 1aa75af

Browse files
Feature: Consume Discord Role Removal API in Real Dev Squad Backend (#1201)
* fix issue with merge conflict resolution * fix sentences and typos
1 parent 227e5d0 commit 1aa75af

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

services/discordService.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,25 @@ const addRoleToUser = async (userid, roleid) => {
5151
return response;
5252
};
5353

54+
const removeRoleFromUser = async (roleId, discordId) => {
55+
try {
56+
const authToken = await generateAuthTokenForCloudflare();
57+
const data = await fetch(`${DISCORD_BASE_URL}/roles`, {
58+
method: "DELETE",
59+
headers: { "Content-Type": "application/json", Authorization: `Bearer ${authToken}` },
60+
body: JSON.stringify({ userid: discordId, roleid: roleId }),
61+
});
62+
const response = await data.json();
63+
return response;
64+
} catch (err) {
65+
logger.error("Error in consuming remove role service", err);
66+
throw new Error(err);
67+
}
68+
};
69+
5470
module.exports = {
5571
getDiscordMembers,
5672
setInDiscordFalseScript,
5773
addRoleToUser,
74+
removeRoleFromUser,
5875
};

test/unit/services/discordService.test.js

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
const { expect } = require("chai");
22
const firestore = require("../../../utils/firestore");
3-
const { setInDiscordFalseScript, addRoleToUser, getDiscordMembers } = require("../../../services/discordService");
3+
const {
4+
setInDiscordFalseScript,
5+
addRoleToUser,
6+
getDiscordMembers,
7+
removeRoleFromUser,
8+
} = require("../../../services/discordService");
49
const { fetchAllUsers } = require("../../../models/users");
510
const Sinon = require("sinon");
611
const userModel = firestore.collection("users");
@@ -73,4 +78,39 @@ describe("Discord services", function () {
7378
});
7479
});
7580
});
81+
82+
describe("remove role from a user", function () {
83+
beforeEach(function () {
84+
fetchStub = Sinon.stub(global, "fetch");
85+
});
86+
afterEach(function () {
87+
fetchStub.restore();
88+
});
89+
it("makes a successful fetch call to discord", async function () {
90+
fetchStub.returns(
91+
Promise.resolve({
92+
status: 200,
93+
json: () =>
94+
Promise.resolve({
95+
message: "Role Removed Successfully",
96+
userAffected: { userid: "987654321123456789", roleid: "112233445566778899" },
97+
}),
98+
})
99+
);
100+
const response = await removeRoleFromUser("112233445566778899", "987654321123456789");
101+
expect(response).to.deep.equal({
102+
message: "Role Removed Successfully",
103+
userAffected: { userid: "987654321123456789", roleid: "112233445566778899" },
104+
});
105+
expect(fetchStub.calledOnce).to.be.equal(true);
106+
});
107+
108+
it("makes a failing fetch call to discord", async function () {
109+
fetchStub.rejects(new Error("Fetch Error"));
110+
removeRoleFromUser("", "").catch((err) => {
111+
expect(err).to.be.an.instanceOf(Error);
112+
expect(err.message).to.equal("Fetch error");
113+
});
114+
});
115+
});
76116
});

0 commit comments

Comments
 (0)