Skip to content

Commit 6ef31fc

Browse files
Merge pull request #1065 from Real-Dev-Squad/bug/handling-no-users-found-case-in-case-of-filter
2 parents 24a1110 + cf30140 commit 6ef31fc

File tree

4 files changed

+22
-13
lines changed

4 files changed

+22
-13
lines changed

controllers/users.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -449,12 +449,12 @@ const filterUsers = async (req, res) => {
449449
if (!Object.keys(req.query).length) {
450450
return res.boom.badRequest("filter for item not provided");
451451
}
452-
const allUsers = await userQuery.getUsersBasedOnFilter(req.query);
452+
const users = await userQuery.getUsersBasedOnFilter(req.query);
453453

454454
return res.json({
455-
message: "Users found successfully!",
456-
users: allUsers,
457-
count: allUsers.length,
455+
message: users.length ? "Users found successfully!" : "No users found",
456+
users,
457+
count: users.length,
458458
});
459459
} catch (error) {
460460
logger.error(`Error while fetching all users: ${error}`);

middlewares/validators/user.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,14 +172,17 @@ async function validateUserQueryParams(req, res, next) {
172172
joi.array().items(joi.string().valid("IDLE", "OOO", "ACTIVE"))
173173
)
174174
.optional(),
175+
})
176+
.messages({
177+
"object.min": "Please provide at least one filter criteria",
175178
});
176179

177180
try {
178181
await schema.validateAsync(req.query);
179182
next();
180183
} catch (error) {
181184
logger.error(`Error validating query params : ${error}`);
182-
res.boom.badRequest(error.details[0].message);
185+
res.boom.badRequest(error);
183186
}
184187
}
185188

models/users.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -395,18 +395,24 @@ const getUsersBasedOnFilter = async (query) => {
395395
let finalItems = [];
396396

397397
if (doesTagQueryExist && doesStateQueryExist) {
398-
const stateItemIds = new Set(stateItems.map((item) => item.userId));
399-
finalItems = tagItems.filter((item) => stateItemIds.has(item.itemId)).map((item) => item.itemId);
398+
if (stateItems.length && tagItems.length) {
399+
const stateItemIds = new Set(stateItems.map((item) => item.userId));
400+
finalItems = tagItems.filter((item) => stateItemIds.has(item.itemId)).map((item) => item.itemId);
401+
}
400402
} else if (doesStateQueryExist) {
401403
finalItems = stateItems.map((item) => item.userId);
402404
} else if (doesTagQueryExist) {
403405
finalItems = tagItems.map((item) => item.itemId);
404406
}
405407

406-
finalItems = [...new Set(finalItems)];
407-
const userRefs = finalItems.map((itemId) => userModel.doc(itemId));
408-
const userDocs = (await firestore.getAll(...userRefs)).map((doc) => ({ id: doc.id, ...doc.data() }));
409-
return userDocs;
408+
if (finalItems.length) {
409+
finalItems = [...new Set(finalItems)];
410+
const userRefs = finalItems.map((itemId) => userModel.doc(itemId));
411+
const userDocs = (await firestore.getAll(...userRefs)).map((doc) => ({ id: doc.id, ...doc.data() }));
412+
const filteredUserDocs = userDocs.filter((doc) => !doc.roles?.archived);
413+
return filteredUserDocs;
414+
}
415+
return [];
410416
};
411417

412418
module.exports = {

test/integration/usersFilter.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ describe("Filter Users", function () {
121121
});
122122

123123
// eslint-disable-next-line mocha/no-skipped-tests
124-
describe.skip("GET /users/search", function () {
124+
describe("GET /users/search", function () {
125125
it("Should search users based on state", function (done) {
126126
chai
127127
.request(app)
@@ -203,7 +203,7 @@ describe("Filter Users", function () {
203203
expect(res.body.message).to.equal("Users found successfully!");
204204
expect(res.body.users).to.be.a("array");
205205
expect(res.body.users.length).to.equal(2);
206-
assertUserIds(res.body.users, [activeUser, oooUser, idleUser]);
206+
assertUserIds(res.body.users, [oooUser, idleUser]);
207207
return done();
208208
});
209209
});

0 commit comments

Comments
 (0)