Skip to content

Commit 799d9e8

Browse files
Added validation for updating user roles in the userModel database (#1297)
* added roles validator * changes validator key spell * write test for roles validator
1 parent 57e0171 commit 799d9e8

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed

middlewares/validators/user.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ const updateUser = async (req, res, next) => {
3939
.valid(...Object.values(USER_STATUS))
4040
.optional(),
4141
discordId: joi.string().optional(),
42+
roles: joi.object().keys({
43+
archived: joi.boolean().required(),
44+
in_discord: joi.boolean().required(),
45+
developer: joi.boolean().optional(),
46+
designer: joi.boolean().optional(),
47+
maven: joi.boolean().optional(),
48+
productmanager: joi.boolean().optional(),
49+
}),
4250
});
4351

4452
try {

test/integration/users.test.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,29 @@ describe("Users", function () {
119119
});
120120
});
121121

122+
it("Should update the user roles", function (done) {
123+
chai
124+
.request(app)
125+
.patch("/users/self")
126+
.set("cookie", `${cookieName}=${jwt}`)
127+
.send({
128+
roles: {
129+
archived: false,
130+
in_discord: false,
131+
developer: true,
132+
},
133+
})
134+
.end((err, res) => {
135+
if (err) {
136+
return done(err);
137+
}
138+
139+
expect(res).to.have.status(204);
140+
141+
return done();
142+
});
143+
});
144+
122145
it("Should return 400 for invalid status value", function (done) {
123146
chai
124147
.request(app)
@@ -144,6 +167,51 @@ describe("Users", function () {
144167
});
145168
});
146169

170+
it("Should return 400 if required roles is missing", function (done) {
171+
chai
172+
.request(app)
173+
.patch("/users/self")
174+
.set("cookie", `${cookieName}=${jwt}`)
175+
.send({
176+
roles: {
177+
in_discord: false,
178+
developer: true,
179+
},
180+
})
181+
.end((err, res) => {
182+
if (err) {
183+
return done(err);
184+
}
185+
186+
expect(res).to.have.status(400);
187+
188+
return done();
189+
});
190+
});
191+
192+
it("Should return 400 if invalid roles", function (done) {
193+
chai
194+
.request(app)
195+
.patch("/users/self")
196+
.set("cookie", `${cookieName}=${jwt}`)
197+
.send({
198+
roles: {
199+
archived: "false",
200+
in_discord: false,
201+
developer: true,
202+
},
203+
})
204+
.end((err, res) => {
205+
if (err) {
206+
return done(err);
207+
}
208+
209+
expect(res).to.have.status(400);
210+
211+
return done();
212+
});
213+
});
214+
147215
it("Should return 400 for invalid username", function (done) {
148216
chai
149217
.request(app)

test/unit/middlewares/user-validator.test.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,44 @@ describe("Middleware | Validators | User", function () {
4949
expect(next.calledOnce).to.be.equal(true);
5050
});
5151

52+
it("lets roles update request pass to next", async function () {
53+
const req = {
54+
body: {
55+
roles: {
56+
archived: false,
57+
in_discord: false,
58+
developer: true,
59+
},
60+
},
61+
};
62+
63+
const res = {};
64+
const next = sinon.spy();
65+
await updateUser(req, res, next);
66+
expect(next.calledOnce).to.be.equal(true);
67+
});
68+
69+
it("Stops the propagation of the next if required roles missing", async function () {
70+
const req = {
71+
body: {
72+
roles: {
73+
in_discord: false,
74+
developer: true,
75+
},
76+
},
77+
};
78+
const res = {
79+
boom: {
80+
badRequest: () => {},
81+
},
82+
};
83+
const nextSpy = sinon.spy();
84+
await updateUser(req, res, nextSpy).catch((err) => {
85+
expect(err).to.be.an.instanceOf(Error);
86+
});
87+
expect(nextSpy.calledOnce).to.be.equal(false);
88+
});
89+
5290
it("Stops the propagation of the next if twitter_id is invalid", async function () {
5391
const req = {
5492
body: {

0 commit comments

Comments
 (0)