Skip to content

Commit 0bdf41e

Browse files
test: add tests for getPaginatedAllGroupRoles function in the controller
1 parent a4be6c4 commit 0bdf41e

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed

test/integration/discordactions.test.js

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,4 +1218,135 @@ describe("Discord actions", function () {
12181218
});
12191219
});
12201220
});
1221+
1222+
describe("GET /discord-actions/groups (getPaginatedAllGroupRoles)", function () {
1223+
let userId;
1224+
let userAuthToken;
1225+
1226+
beforeEach(async function () {
1227+
// Create a standard user instead of a superuser
1228+
const user = await addUser(userData[0]); // Assume userData[0] is a standard user fixture
1229+
userId = user;
1230+
userAuthToken = authService.generateAuthToken({ userId });
1231+
1232+
// Mock adding roles to the database
1233+
await discordRoleModel.add(groupData[0]);
1234+
await discordRoleModel.add(groupData[1]);
1235+
});
1236+
1237+
afterEach(async function () {
1238+
sinon.restore();
1239+
await cleanDb();
1240+
});
1241+
1242+
it("should return paginated results when dev=true is passed", function (done) {
1243+
chai
1244+
.request(app)
1245+
.get("/discord-actions/groups?dev=true&page=1&size=10")
1246+
.set("cookie", `${cookieName}=${userAuthToken}`)
1247+
.end((err, res) => {
1248+
if (err) {
1249+
return done(err);
1250+
}
1251+
1252+
expect(res).to.have.status(200);
1253+
expect(res.body).to.be.an("object");
1254+
expect(res.body.message).to.equal("Roles fetched successfully!");
1255+
expect(res.body.groups).to.be.an("array");
1256+
1257+
const groups = res.body.groups;
1258+
groups.forEach((group) => {
1259+
expect(group).to.have.keys([
1260+
"roleid",
1261+
"rolename",
1262+
"memberCount",
1263+
"firstName",
1264+
"lastName",
1265+
"image",
1266+
"isMember",
1267+
]);
1268+
});
1269+
1270+
expect(res.body.links).to.have.keys(["next", "prev"]);
1271+
return done();
1272+
});
1273+
});
1274+
1275+
it("should return null for next link on the last page", function (done) {
1276+
const size = 10;
1277+
const page = 2; // Assume this is the last page based on dataset size
1278+
1279+
chai
1280+
.request(app)
1281+
.get(`/discord-actions/groups?dev=true&page=${page}&size=${size}`)
1282+
.set("cookie", `${cookieName}=${userAuthToken}`)
1283+
.end((err, res) => {
1284+
if (err) {
1285+
return done(err);
1286+
}
1287+
1288+
expect(res).to.have.status(200);
1289+
expect(res.body).to.be.an("object");
1290+
expect(res.body.message).to.equal("Roles fetched successfully!");
1291+
expect(res.body.groups).to.be.an("array");
1292+
expect(res.body.links).to.have.keys(["next", "prev"]);
1293+
// eslint-disable-next-line no-unused-expressions
1294+
expect(res.body.links.next).to.be.null; // Assert next is null
1295+
expect(res.body.links.prev).to.equal(`/discord-actions/groups?page=${page - 1}&size=${size}&dev=true`);
1296+
return done();
1297+
});
1298+
});
1299+
1300+
it("should return a bad request error for invalid size parameter", function (done) {
1301+
chai
1302+
.request(app)
1303+
.get("/discord-actions/groups?dev=true&size=101&page=1")
1304+
.set("cookie", `${cookieName}=${userAuthToken}`)
1305+
.end((_err, res) => {
1306+
expect(res).to.have.status(400);
1307+
expect(res.body).to.be.an("object");
1308+
expect(res.body.message).to.equal('"size" must be less than or equal to 100');
1309+
return done();
1310+
});
1311+
});
1312+
1313+
it("should return an empty array for groups on a page with no data", function (done) {
1314+
const size = 10;
1315+
const page = 100; // Assume this page exceeds the dataset size
1316+
1317+
chai
1318+
.request(app)
1319+
.get(`/discord-actions/groups?dev=true&page=${page}&size=${size}`)
1320+
.set("cookie", `${cookieName}=${userAuthToken}`)
1321+
.end((_err, res) => {
1322+
expect(res).to.have.status(200);
1323+
expect(res.body).to.be.an("object");
1324+
expect(res.body.message).to.equal("Roles fetched successfully!");
1325+
// eslint-disable-next-line no-unused-expressions
1326+
expect(res.body.groups).to.be.an("array").that.is.empty; // Assert empty groups
1327+
expect(res.body.links).to.have.keys(["next", "prev"]);
1328+
// eslint-disable-next-line no-unused-expressions
1329+
expect(res.body.links.next).to.be.null;
1330+
expect(res.body.links.prev).to.equal(`/discord-actions/groups?page=${page - 1}&size=${size}&dev=true`);
1331+
return done();
1332+
});
1333+
});
1334+
1335+
it("should handle internal server errors", function (done) {
1336+
sinon.stub(discordRolesModel, "getPaginatedGroupRolesByPage").throws(new Error("Database error"));
1337+
1338+
chai
1339+
.request(app)
1340+
.get("/discord-actions/groups?dev=true")
1341+
.set("cookie", `${cookieName}=${userAuthToken}`)
1342+
// eslint-disable-next-line node/handle-callback-err
1343+
.end((err, res) => {
1344+
expect(res).to.have.status(500);
1345+
expect(res.body).to.be.an("object");
1346+
expect(res.body.message).to.equal("An internal server error occurred");
1347+
sinon.restore();
1348+
return done();
1349+
});
1350+
});
1351+
});
12211352
});

0 commit comments

Comments
 (0)