Skip to content

Commit 55d3537

Browse files
Merge pull request #1031 from shubhamsigdar1/fix/userstatus
add data userstatus and numberOfHours to firestore after signup
2 parents b863ad3 + 28f7553 commit 55d3537

File tree

8 files changed

+45
-6
lines changed

8 files changed

+45
-6
lines changed

constants/userStatus.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const userState = {
22
ACTIVE: "ACTIVE",
33
IDLE: "IDLE",
44
OOO: "OOO",
5+
ONBOARDING: "ONBOARDING",
56
};
67

78
module.exports = { userState };

controllers/users.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ const addUserIntro = async (req, res) => {
390390
await userQuery.addJoinData(data);
391391

392392
return res.status(201).json({
393-
message: "User data added successfully",
393+
message: "User join data and newstatus data added and updated successfully",
394394
});
395395
} catch (err) {
396396
logger.error("Could not save user data");

middlewares/validators/userStatus.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ const validateUserStatusData = async (todaysTime, req, res, next) => {
77
currentStatus: Joi.object().keys({
88
state: Joi.string()
99
.trim()
10-
.valid(userState.IDLE, userState.ACTIVE, userState.OOO)
11-
.error(new Error(`Invalid State. State must be either IDLE, ACTIVE or OOO`)),
10+
.valid(userState.IDLE, userState.ACTIVE, userState.OOO, userState.ONBOARDING)
11+
.error(new Error(`Invalid State. State must be either IDLE, ACTIVE, OOO, or ONBOARDING`)),
1212
updatedAt: Joi.number().required(),
1313
from: Joi.number()
1414
.min(todaysTime)

models/users.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ const walletConstants = require("../constants/wallets");
66

77
const firestore = require("../utils/firestore");
88
const { fetchWallet, createWallet } = require("../models/wallets");
9+
const { updateUserStatus } = require("../models/userStatus");
910
const { arraysHaveCommonItem } = require("../utils/array");
1011
const { ALLOWED_FILTER_PARAMS } = require("../constants/users");
12+
const { userState } = require("../constants/userStatus");
1113
const { BATCH_SIZE_IN_CLAUSE } = require("../constants/firebase");
1214
const userModel = firestore.collection("users");
1315
const joinModel = firestore.collection("applicants");
@@ -69,6 +71,10 @@ const addOrUpdate = async (userData, userId = null) => {
6971
const addJoinData = async (userData) => {
7072
try {
7173
await joinModel.add(userData);
74+
await updateUserStatus(userData.userId, {
75+
currentStatus: { state: userState.ONBOARDING },
76+
monthlyHours: { committed: 4 * userData.intro.numberOfHours },
77+
});
7278
} catch (err) {
7379
logger.error("Error in adding data", err);
7480
throw err;
@@ -288,7 +294,7 @@ const initializeUser = async (userId) => {
288294
if (!userWallet) {
289295
await createWallet(userId, walletConstants.INITIAL_WALLET);
290296
}
291-
297+
await updateUserStatus(userId, { currentStatus: { state: userState.ONBOARDING }, monthlyHours: { committed: 0 } });
292298
return true;
293299
};
294300

test/fixtures/user/join.js

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/fixtures/userStatus/userStatus.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ const userStatusDataForNewUser = {
1212
},
1313
};
1414

15+
const userStatusDataAfterSignup = {
16+
currentStatus: { state: "ONBOARDING" },
17+
monthlyHours: { committed: 0 },
18+
};
19+
20+
const userStatusDataAfterFillingJoinSection = {
21+
currentStatus: { state: "ONBOARDING" },
22+
monthlyHours: { committed: 40 },
23+
};
24+
1525
const oooStatusDataForShortDuration = {
1626
currentStatus: {
1727
message: "",
@@ -53,6 +63,8 @@ const generateUserStatusData = (state, updatedAt, from, until = "", message = ""
5363

5464
module.exports = {
5565
userStatusDataForNewUser,
66+
userStatusDataAfterSignup,
67+
userStatusDataAfterFillingJoinSection,
5668
userStatusDataForOooState,
5769
oooStatusDataForShortDuration,
5870
generateUserStatusData,

test/integration/userStatus.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ describe("UserStatus", function () {
398398
expect(res).to.have.status(400);
399399
expect(res.body).to.be.an("object");
400400
expect(res.body.error).to.equal(`Bad Request`);
401-
expect(res.body.message).to.equal(`Invalid State. State must be either IDLE, ACTIVE or OOO`);
401+
expect(res.body.message).to.equal(`Invalid State. State must be either IDLE, ACTIVE, OOO, or ONBOARDING`);
402402
return done();
403403
});
404404
});

test/integration/users.test.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const chai = require("chai");
22
const { expect } = chai;
33
const chaiHttp = require("chai-http");
44

5+
const firestore = require("../../utils/firestore");
56
const app = require("../../server");
67
const authService = require("../../services/authService");
78
const addUser = require("../utils/addUser");
@@ -15,7 +16,13 @@ const searchParamValues = require("../fixtures/user/search")();
1516

1617
const config = require("config");
1718
const joinData = require("../fixtures/user/join");
19+
const {
20+
userStatusDataAfterSignup,
21+
userStatusDataAfterFillingJoinSection,
22+
} = require("../fixtures/userStatus/userStatus");
1823
const { addJoinData, addOrUpdate } = require("../../models/users");
24+
const userStatusModel = require("../../models/userStatus");
25+
1926
const cookieName = config.get("userToken.cookieName");
2027
chai.use(chaiHttp);
2128

@@ -688,6 +695,12 @@ describe("Users", function () {
688695
});
689696

690697
describe("PUT /users/self/intro", function () {
698+
let userStatusData;
699+
beforeEach(async function () {
700+
await userStatusModel.updateUserStatus(userId, userStatusDataAfterSignup);
701+
const updateStatus = await userStatusModel.updateUserStatus(userId, userStatusDataAfterFillingJoinSection);
702+
userStatusData = (await firestore.collection("usersStatus").doc(updateStatus.id).get()).data();
703+
});
691704
it("should return 409 if the data already present", function (done) {
692705
addJoinData(joinData(userId)[3]);
693706
chai
@@ -718,7 +731,11 @@ describe("Users", function () {
718731
}
719732
expect(res).to.have.status(201);
720733
expect(res.body).to.be.a("object");
721-
expect(res.body.message).to.equal("User data added successfully");
734+
expect(res.body.message).to.equal("User join data and newstatus data added and updated successfully");
735+
expect(userStatusData).to.have.own.property("currentStatus");
736+
expect(userStatusData).to.have.own.property("monthlyHours");
737+
expect(userStatusData.currentStatus.state).to.equal("ONBOARDING");
738+
expect(userStatusData.monthlyHours.committed).to.equal(40);
722739
return done();
723740
});
724741
});

0 commit comments

Comments
 (0)