Skip to content

Commit 0df8007

Browse files
vikasosmiumAchintya-Chatterjeerishirishhh
authored
Added New PUT Route for User Intro (#2293)
* added one put api for user intro * route checking fix * deprecate message comment * fixed test cases * added one userauthorization middleware and test cases fixes * added userAuthorization middleware * Revert "added one userauthorization middleware and test cases fixes" This reverts commit 7dcd885. * Revert "Revert "added one userauthorization middleware and test cases fixes"" This reverts commit 238cd17. * fixed test case msg --------- Co-authored-by: Achintya Chatterjee <[email protected]> Co-authored-by: Rishi <[email protected]>
1 parent f1ea79e commit 0df8007

File tree

2 files changed

+113
-1
lines changed

2 files changed

+113
-1
lines changed

routes/users.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ const { authorizeAndAuthenticate } = require("../middlewares/authorizeUsersAndSe
1212
const ROLES = require("../constants/roles");
1313
const { Services } = require("../constants/bot");
1414
const authenticateProfile = require("../middlewares/authenticateProfile");
15+
const { devFlagMiddleware } = require("../middlewares/devFlag");
16+
const { userAuthorization } = require("../middlewares/userAuthorization");
1517

1618
router.post("/", authorizeAndAuthenticate([ROLES.SUPERUSER], [Services.CRON_JOB_HANDLER]), users.markUnverified);
1719
router.post("/update-in-discord", authenticate, authorizeRoles([SUPERUSER]), users.setInDiscordScript);
@@ -35,7 +37,15 @@ router.patch(
3537
);
3638
router.get("/:username", users.getUser);
3739
router.get("/:userId/intro", authenticate, authorizeRoles([SUPERUSER]), users.getUserIntro);
38-
router.put("/self/intro", authenticate, userValidator.validateJoinData, users.addUserIntro);
40+
router.put("/self/intro", authenticate, userValidator.validateJoinData, users.addUserIntro); // This route is being deprecated soon, please use alternate available route `/users/:userId/intro`.
41+
router.put(
42+
"/:userId/intro",
43+
devFlagMiddleware,
44+
authenticate,
45+
userValidator.validateJoinData,
46+
userAuthorization,
47+
users.addUserIntro
48+
);
3949
router.get("/:id/skills", users.getUserSkills);
4050
router.get("/:id/badges", getUserBadges);
4151
router.patch(

test/integration/users.test.js

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1579,6 +1579,108 @@ describe("Users", function () {
15791579
});
15801580
});
15811581

1582+
describe("PUT /users/:userId/intro", function () {
1583+
let userStatusData;
1584+
1585+
beforeEach(async function () {
1586+
await userStatusModel.updateUserStatus(userId, userStatusDataAfterSignup);
1587+
const updateStatus = await userStatusModel.updateUserStatus(userId, userStatusDataAfterFillingJoinSection);
1588+
userStatusData = (await firestore.collection("usersStatus").doc(updateStatus.id).get()).data();
1589+
});
1590+
1591+
it("should return 409 if the data already present", function (done) {
1592+
addJoinData(joinData(userId)[3]);
1593+
chai
1594+
.request(app)
1595+
.put(`/users/${userId}/intro?dev=true`)
1596+
.set("Cookie", `${cookieName}=${jwt}`)
1597+
.send(joinData(userId)[3])
1598+
.end((err, res) => {
1599+
if (err) {
1600+
return done(err);
1601+
}
1602+
expect(res).to.have.status(409);
1603+
expect(res.body).to.be.a("object");
1604+
expect(res.body.message).to.equal("User data is already present!");
1605+
return done();
1606+
});
1607+
});
1608+
1609+
it("Should store the info in db", function (done) {
1610+
chai
1611+
.request(app)
1612+
.put(`/users/${userId}/intro?dev=true`)
1613+
.set("Cookie", `${cookieName}=${jwt}`)
1614+
.send(joinData()[2])
1615+
.end((err, res) => {
1616+
if (err) {
1617+
return done(err);
1618+
}
1619+
expect(res).to.have.status(201);
1620+
expect(res.body).to.be.a("object");
1621+
expect(res.body.message).to.equal("User join data and newstatus data added and updated successfully");
1622+
expect(userStatusData).to.have.own.property("currentStatus");
1623+
expect(userStatusData).to.have.own.property("monthlyHours");
1624+
expect(userStatusData.currentStatus.state).to.equal("ONBOARDING");
1625+
expect(userStatusData.monthlyHours.committed).to.equal(40);
1626+
return done();
1627+
});
1628+
});
1629+
1630+
it("Should return 401 for Unauthenticated User Request", function (done) {
1631+
chai
1632+
.request(app)
1633+
.put(`/users/${userId}/intro?dev=true`)
1634+
.set("Cookie", `${cookieName}=""`)
1635+
.send(joinData()[2])
1636+
.end((err, res) => {
1637+
if (err) {
1638+
return done(err);
1639+
}
1640+
expect(res).to.have.status(401);
1641+
expect(res.body).to.be.a("object");
1642+
expect(res.body.message).to.equal("Unauthenticated User");
1643+
return done();
1644+
});
1645+
});
1646+
1647+
it("Should return 400 for invalid Data", function (done) {
1648+
chai
1649+
.request(app)
1650+
.put(`/users/${userId}/intro?dev=true`)
1651+
.set("Cookie", `${cookieName}=${jwt}`)
1652+
.send(joinData()[1])
1653+
.end((err, res) => {
1654+
if (err) {
1655+
return done(err);
1656+
}
1657+
expect(res).to.have.status(400);
1658+
expect(res.body).to.be.a("object");
1659+
expect(res.body.message).to.be.equal('"firstName" is required');
1660+
return done();
1661+
});
1662+
});
1663+
1664+
it("Should return 403 for Forbidden access", function (done) {
1665+
const userId = "anotherUser123";
1666+
addJoinData(joinData(userId)[3]);
1667+
1668+
chai
1669+
.request(app)
1670+
.put(`/users/${userId}/intro?dev=true`)
1671+
.set("cookie", `${cookieName}=${jwt}`)
1672+
.send(joinData(userId)[3])
1673+
.end((err, res) => {
1674+
if (err) return done(err);
1675+
1676+
expect(res).to.have.status(403);
1677+
expect(res.body).to.be.an("object");
1678+
expect(res.body.message).to.equal("Unauthorized access");
1679+
return done();
1680+
});
1681+
});
1682+
});
1683+
15821684
describe("PATCH /users/rejectDiff", function () {
15831685
let profileDiffsId;
15841686

0 commit comments

Comments
 (0)