Skip to content

Commit 825e818

Browse files
Merge pull request #976 from Real-Dev-Squad/feat/set-up-test-filters-user-management
Test cases for the user filter endpoint based on status and skill tag
2 parents 4aaa98b + c053ead commit 825e818

File tree

2 files changed

+306
-0
lines changed

2 files changed

+306
-0
lines changed
Lines changed: 296 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,296 @@
1+
const chai = require("chai");
2+
const { expect } = chai;
3+
const chaiHttp = require("chai-http");
4+
5+
const app = require("../../server");
6+
const authService = require("../../services/authService");
7+
const addUser = require("../utils/addUser");
8+
const cleanDb = require("../utils/cleanDb");
9+
// Import fixtures
10+
const userData = require("../fixtures/user/user")();
11+
const { generateUserStatusData } = require("../fixtures/userStatus/userStatus");
12+
13+
const config = require("config");
14+
const { updateUserStatus } = require("../../models/userStatus");
15+
const { addTag } = require("../../models/tags");
16+
const { addLevel } = require("../../models/levels");
17+
const { addTagsToItem } = require("../../models/items");
18+
const { assertUserIds } = require("../utils/user");
19+
20+
const cookieName = config.get("userToken.cookieName");
21+
22+
chai.use(chaiHttp);
23+
24+
describe("Filter Users", function () {
25+
let jwt;
26+
let userId = "";
27+
let oooUser;
28+
let idleUser;
29+
let activeUser;
30+
let tagIdFE;
31+
let tagIdBE;
32+
let levelId1;
33+
let levelId2;
34+
35+
before(async function () {
36+
const updatedAtDate = Date.now();
37+
const untilDate = updatedAtDate + 16 * 24 * 60 * 60 * 1000;
38+
userId = await addUser();
39+
jwt = authService.generateAuthToken({ userId });
40+
oooUser = await addUser(userData[0]);
41+
await updateUserStatus(
42+
oooUser,
43+
generateUserStatusData("OOO", updatedAtDate, updatedAtDate, untilDate, "Bad Health")
44+
);
45+
idleUser = await addUser(userData[1]);
46+
await updateUserStatus(idleUser, generateUserStatusData("IDLE", updatedAtDate, updatedAtDate, untilDate, "CSS"));
47+
activeUser = await addUser(userData[8]);
48+
await updateUserStatus(activeUser, generateUserStatusData("ACTIVE", updatedAtDate, updatedAtDate));
49+
50+
// creating tag and levels
51+
const { id: id1 } = await addTag({
52+
name: "Vue JS",
53+
type: "SKILL",
54+
reason: "Web Dev FE",
55+
});
56+
tagIdFE = id1;
57+
const { id: id2 } = await addTag({
58+
name: "Node JS",
59+
type: "SKILL",
60+
reason: "Web Dev BE",
61+
});
62+
tagIdBE = id2;
63+
const { id: id3 } = await addLevel({
64+
name: "level 1",
65+
value: 1,
66+
});
67+
levelId1 = id3;
68+
const { id: id4 } = await addLevel({
69+
name: "level 2",
70+
value: 2,
71+
});
72+
levelId2 = id4;
73+
74+
// creating items
75+
await addTagsToItem({
76+
itemId: oooUser,
77+
itemType: "USER",
78+
tagPayload: [
79+
{
80+
tagId: tagIdFE,
81+
levelId: levelId1,
82+
},
83+
{
84+
tagId: tagIdFE,
85+
levelId: levelId2,
86+
},
87+
],
88+
});
89+
await addTagsToItem({
90+
itemId: idleUser,
91+
itemType: "USER",
92+
tagPayload: [
93+
{
94+
tagId: tagIdBE,
95+
levelId: levelId1,
96+
},
97+
{
98+
tagId: tagIdBE,
99+
levelId: levelId2,
100+
},
101+
],
102+
});
103+
await addTagsToItem({
104+
itemId: activeUser,
105+
itemType: "USER",
106+
tagPayload: [
107+
{
108+
tagId: tagIdFE,
109+
levelId: levelId1,
110+
},
111+
{
112+
tagId: tagIdBE,
113+
levelId: levelId1,
114+
},
115+
],
116+
});
117+
});
118+
119+
after(async function () {
120+
await cleanDb();
121+
});
122+
123+
// eslint-disable-next-line mocha/no-skipped-tests
124+
describe.skip("GET /users/search", function () {
125+
it("Should search users based on state", function (done) {
126+
chai
127+
.request(app)
128+
.get("/users/search")
129+
.query({ state: "OOO" })
130+
.set("cookie", `${cookieName}=${jwt}`)
131+
.end((err, res) => {
132+
if (err) {
133+
return done(err);
134+
}
135+
expect(res).to.have.status(200);
136+
expect(res.body).to.be.a("object");
137+
expect(res.body.count).to.be.a("number");
138+
expect(res.body.message).to.equal("Users found successfully!");
139+
expect(res.body.users).to.be.a("array");
140+
expect(res.body.users.length).to.equal(1);
141+
expect(res.body.users[0]).to.deep.include({
142+
id: oooUser,
143+
});
144+
return done();
145+
});
146+
});
147+
148+
it("Should search users based on Tag", function (done) {
149+
chai
150+
.request(app)
151+
.get("/users/search")
152+
.query({ tagId: tagIdFE })
153+
.set("cookie", `${cookieName}=${jwt}`)
154+
.end((err, res) => {
155+
if (err) {
156+
return done(err);
157+
}
158+
expect(res).to.have.status(200);
159+
expect(res.body).to.be.a("object");
160+
expect(res.body.count).to.be.a("number");
161+
expect(res.body.message).to.equal("Users found successfully!");
162+
expect(res.body.users).to.be.a("array");
163+
expect(res.body.users.length).to.equal(2);
164+
assertUserIds(res.body.users, [activeUser, oooUser]);
165+
return done();
166+
});
167+
});
168+
169+
it("Should search users based on multiple Tags", function (done) {
170+
chai
171+
.request(app)
172+
.get("/users/search")
173+
.query({ tagId: [tagIdFE, tagIdBE] })
174+
.set("cookie", `${cookieName}=${jwt}`)
175+
.end((err, res) => {
176+
if (err) {
177+
return done(err);
178+
}
179+
expect(res).to.have.status(200);
180+
expect(res.body).to.be.a("object");
181+
expect(res.body.count).to.be.a("number");
182+
expect(res.body.message).to.equal("Users found successfully!");
183+
expect(res.body.users).to.be.a("array");
184+
expect(res.body.users.length).to.equal(3);
185+
assertUserIds(res.body.users, [activeUser, oooUser, idleUser]);
186+
return done();
187+
});
188+
});
189+
190+
it("Should search users based on multiple states", function (done) {
191+
chai
192+
.request(app)
193+
.get("/users/search")
194+
.query({ state: ["OOO", "IDLE"] })
195+
.set("cookie", `${cookieName}=${jwt}`)
196+
.end((err, res) => {
197+
if (err) {
198+
return done(err);
199+
}
200+
expect(res).to.have.status(200);
201+
expect(res.body).to.be.a("object");
202+
expect(res.body.count).to.be.a("number");
203+
expect(res.body.message).to.equal("Users found successfully!");
204+
expect(res.body.users).to.be.a("array");
205+
expect(res.body.users.length).to.equal(2);
206+
assertUserIds(res.body.users, [activeUser, oooUser, idleUser]);
207+
return done();
208+
});
209+
});
210+
211+
it("Should search users based on single tag and single state", function (done) {
212+
chai
213+
.request(app)
214+
.get("/users/search")
215+
.query({ state: "OOO", tagId: tagIdFE })
216+
.set("cookie", `${cookieName}=${jwt}`)
217+
.end((err, res) => {
218+
if (err) {
219+
return done(err);
220+
}
221+
expect(res).to.have.status(200);
222+
expect(res.body).to.be.a("object");
223+
expect(res.body.count).to.be.a("number");
224+
expect(res.body.message).to.equal("Users found successfully!");
225+
expect(res.body.users).to.be.a("array");
226+
expect(res.body.users.length).to.equal(1);
227+
assertUserIds(res.body.users, [oooUser]);
228+
return done();
229+
});
230+
});
231+
232+
it("Should search users based on single tag and multiple state", function (done) {
233+
chai
234+
.request(app)
235+
.get("/users/search")
236+
.query({ state: ["OOO", "ACTIVE"], tagId: tagIdFE })
237+
.set("cookie", `${cookieName}=${jwt}`)
238+
.end((err, res) => {
239+
if (err) {
240+
return done(err);
241+
}
242+
expect(res).to.have.status(200);
243+
expect(res.body).to.be.a("object");
244+
expect(res.body.count).to.be.a("number");
245+
expect(res.body.message).to.equal("Users found successfully!");
246+
expect(res.body.users).to.be.a("array");
247+
expect(res.body.users.length).to.equal(2);
248+
assertUserIds(res.body.users, [activeUser, oooUser]);
249+
return done();
250+
});
251+
});
252+
253+
it("Should search users based on multiple tag and single state", function (done) {
254+
chai
255+
.request(app)
256+
.get("/users/search")
257+
.query({ state: "OOO", tagId: [tagIdFE, tagIdBE] })
258+
.set("cookie", `${cookieName}=${jwt}`)
259+
.end((err, res) => {
260+
if (err) {
261+
return done(err);
262+
}
263+
expect(res).to.have.status(200);
264+
expect(res.body).to.be.a("object");
265+
expect(res.body.count).to.be.a("number");
266+
expect(res.body.message).to.equal("Users found successfully!");
267+
expect(res.body.users).to.be.a("array");
268+
expect(res.body.users.length).to.equal(1);
269+
assertUserIds(res.body.users, [oooUser]);
270+
271+
return done();
272+
});
273+
});
274+
275+
it("Should search users based on multiple tag and multiple states", function (done) {
276+
chai
277+
.request(app)
278+
.get("/users/search")
279+
.query({ state: ["OOO", "ACTIVE"], tagId: [tagIdFE, tagIdBE] })
280+
.set("cookie", `${cookieName}=${jwt}`)
281+
.end((err, res) => {
282+
if (err) {
283+
return done(err);
284+
}
285+
expect(res).to.have.status(200);
286+
expect(res.body).to.be.a("object");
287+
expect(res.body.count).to.be.a("number");
288+
expect(res.body.message).to.equal("Users found successfully!");
289+
expect(res.body.users).to.be.a("array");
290+
expect(res.body.users.length).to.equal(2);
291+
assertUserIds(res.body.users, [activeUser, oooUser]);
292+
return done();
293+
});
294+
});
295+
});
296+
});

test/utils/user.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const chai = require("chai");
2+
const { expect } = chai;
3+
4+
function assertUserIds(users, ids) {
5+
ids.forEach((id) => {
6+
/* eslint-disable no-unused-expressions */
7+
expect(users.some((user) => user.id === id)).to.be.true;
8+
});
9+
}
10+
module.exports = { assertUserIds };

0 commit comments

Comments
 (0)