Skip to content

Commit 3bc300d

Browse files
Merge branch 'develop' into feat/missed-progress-updates
2 parents e4f3d30 + 80f5784 commit 3bc300d

File tree

4 files changed

+42
-18
lines changed

4 files changed

+42
-18
lines changed

models/discordactions.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ const updateUsersNicknameStatus = async (lastNicknameUpdate) => {
479479

480480
const today = new Date().getTime();
481481

482-
const nicknameUpdatePromises = [];
482+
let successfulUpdates = 0;
483483
const nicknameUpdateBatches = [];
484484
const totalUsersStatus = usersStatusDocs.length;
485485

@@ -514,14 +514,19 @@ const updateUsersNicknameStatus = async (lastNicknameUpdate) => {
514514
}
515515
});
516516

517-
const settledPromises = await Promise.all(promises);
518-
nicknameUpdatePromises.push(...settledPromises);
517+
const settledPromises = await Promise.allSettled(promises);
518+
519+
settledPromises.forEach((result) => {
520+
if (result.status === "fulfilled" && !!result.value) {
521+
successfulUpdates++;
522+
} else {
523+
logger.error(`Error while updating nickname: ${result.reason}`);
524+
}
525+
});
519526

520527
await new Promise((resolve) => setTimeout(resolve, 5000));
521528
}
522529

523-
const successfulUpdates = nicknameUpdatePromises.length;
524-
525530
const res = {
526531
totalUsersStatus,
527532
successfulNicknameUpdates: successfulUpdates,

test/integration/discordactions.test.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ const { updateUserStatus } = require("../../models/userStatus");
4040
const { generateUserStatusData } = require("../fixtures/userStatus/userStatus");
4141
const { getDiscordMembers } = require("../fixtures/discordResponse/discord-response");
4242
const { getOnboarding31DPlusMembers } = require("../fixtures/discordResponse/discord-response");
43-
43+
const discordRolesModel = require("../../models/discordactions");
4444
chai.use(chaiHttp);
4545
const { userStatusDataForOooState } = require("../fixtures/userStatus/userStatus");
4646
const { generateCronJobToken } = require("../utils/generateBotToken");
@@ -392,7 +392,12 @@ describe("Discord actions", function () {
392392
describe("POST /discord-actions/nickname/status", function () {
393393
let jwtToken;
394394
beforeEach(async function () {
395-
const { id } = await userModel.add({ ...userData[0] });
395+
const userData2 = { ...userData[1] };
396+
delete userData2.discordId;
397+
const [{ id }, { id: userId2 }] = await Promise.all([
398+
userModel.add({ ...userData[0] }),
399+
userModel.add(userData2),
400+
]);
396401
const statusData = {
397402
...userStatusDataForOooState,
398403
futureStatus: {
@@ -402,7 +407,17 @@ describe("Discord actions", function () {
402407
},
403408
userId: id,
404409
};
405-
await userStatusModel.add(statusData);
410+
const statusData2 = {
411+
...userStatusDataForOooState,
412+
futureStatus: {
413+
state: "ACTIVE",
414+
updatedAt: 1668211200000,
415+
from: 1668709800000,
416+
},
417+
userId: userId2,
418+
};
419+
await Promise.all([userStatusModel.add(statusData), userStatusModel.add(statusData2)]);
420+
406421
jwtToken = generateCronJobToken({ name: CRON_JOB_HANDLER });
407422
});
408423

@@ -435,19 +450,19 @@ describe("Discord actions", function () {
435450
expect(res.body).to.deep.equal({
436451
message: "Updated discord users nickname based on status",
437452
data: {
438-
totalUsersStatus: 1,
453+
totalUsersStatus: 2,
439454
successfulNicknameUpdates: 1,
440-
unsuccessfulNicknameUpdates: 0,
455+
unsuccessfulNicknameUpdates: 1,
441456
},
442457
});
443458
return done();
444459
});
445460
}).timeout(10000);
446461

447462
it("should return object with 0 successful updates when user nickname changes", function (done) {
448-
const response = "Error occurred while updating user's nickname";
449-
fetchStub.returns(Promise.reject(response));
463+
sinon.stub(discordRolesModel, "updateUsersNicknameStatus").throws(new Error());
450464

465+
sinon.stub();
451466
chai
452467
.request(app)
453468
.post("/discord-actions/nickname/status")
@@ -464,7 +479,7 @@ describe("Discord actions", function () {
464479
expect(res.body.message).to.equal("An internal server error occurred");
465480
return done();
466481
});
467-
});
482+
}).timeout(10000);
468483
});
469484
describe("POST /discord-actions/discord-roles", function () {
470485
before(async function () {

test/unit/models/discordactions.test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,6 @@ describe("discordactions", function () {
461461
beforeEach(async function () {
462462
fetchStub = sinon.stub(global, "fetch");
463463
dataAccessLayerStub = sinon.stub(dataAccessLayer, "retrieveUsers");
464-
465464
addedUers.forEach(({ username, discordId, id }) => {
466465
dataAccessLayerStub.withArgs(sinon.match({ id })).resolves({
467466
user: {

utils/users.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const userModel = firestore.collection("users");
44
const { months, discordNicknameLength } = require("../constants/users");
55
const dataAccessLayer = require("../services/dataAccessLayer");
66
const discordService = require("../services/discordService");
7-
7+
const ROLES = require("../constants/roles");
88
const addUserToDBForTest = async (userData) => {
99
await userModel.add(userData);
1010
};
@@ -271,10 +271,15 @@ const generateOOONickname = (username = "", from, until) => {
271271
*/
272272
const updateNickname = async (userId, status = {}) => {
273273
try {
274-
const { user: { discordId, username } = {} } = await dataAccessLayer.retrieveUsers({ id: userId });
275-
if (!discordId || !username) {
276-
throw new Error("Username or discordId unavailable");
274+
const {
275+
user: { discordId, username, roles = {} },
276+
discordJoinedAt = {},
277+
} = await dataAccessLayer.retrieveUsers({ id: userId });
278+
279+
if (!discordId || !username || !discordJoinedAt || roles[ROLES.ARCHIVED]) {
280+
throw new Error("User details unavailable");
277281
}
282+
278283
try {
279284
const nickname = generateOOONickname(username, status.from, status.until);
280285

0 commit comments

Comments
 (0)