Skip to content

Commit 6dc2075

Browse files
committed
add case for unit test "Users with Project manager roles CANNOT do actions if they are NOT member"
1 parent 1720640 commit 6dc2075

File tree

6 files changed

+184
-110
lines changed

6 files changed

+184
-110
lines changed

src/routes/phaseProducts/create.spec.js

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,6 @@ describe('Phase Products', () => {
7171
isPrimary: true,
7272
createdBy: 1,
7373
updatedBy: 1,
74-
}, {
75-
id: 3,
76-
userId: testUtil.userIds.manager,
77-
projectId,
78-
role: 'manager',
79-
isPrimary: false,
80-
createdBy: 1,
81-
updatedBy: 1,
8274
}]).then(() => {
8375
models.ProjectPhase.create({
8476
name: 'test project phase',
@@ -185,7 +177,7 @@ describe('Phase Products', () => {
185177
request(server)
186178
.post(`/v4/projects/99999/phases/${phaseId}/products`)
187179
.set({
188-
Authorization: `Bearer ${testUtil.jwts.admin}`,
180+
Authorization: `Bearer ${testUtil.jwts.connectAdmin}`,
189181
})
190182
.send({ param: body })
191183
.expect('Content-Type', /json/)
@@ -196,7 +188,7 @@ describe('Phase Products', () => {
196188
request(server)
197189
.post(`/v4/projects/${projectId}/phases/99999/products`)
198190
.set({
199-
Authorization: `Bearer ${testUtil.jwts.manager}`,
191+
Authorization: `Bearer ${testUtil.jwts.connectAdmin}`,
200192
})
201193
.send({ param: body })
202194
.expect('Content-Type', /json/)
@@ -241,22 +233,43 @@ describe('Phase Products', () => {
241233
});
242234

243235
it('should return 201 if requested by manager which is a member', (done) => {
236+
models.ProjectMember.create({
237+
id: 3,
238+
userId: testUtil.userIds.manager,
239+
projectId,
240+
role: 'manager',
241+
isPrimary: false,
242+
createdBy: 1,
243+
updatedBy: 1,
244+
}).then(() => {
245+
request(server)
246+
.post(`/v4/projects/${projectId}/phases/${phaseId}/products`)
247+
.set({
248+
Authorization: `Bearer ${testUtil.jwts.manager}`,
249+
})
250+
.send({ param: body })
251+
.expect('Content-Type', /json/)
252+
.expect(201)
253+
.end(done);
254+
});
255+
});
256+
257+
it('should return 403 if requested by manager which is not a member', (done) => {
244258
request(server)
245259
.post(`/v4/projects/${projectId}/phases/${phaseId}/products`)
246260
.set({
247261
Authorization: `Bearer ${testUtil.jwts.manager}`,
248262
})
249263
.send({ param: body })
250264
.expect('Content-Type', /json/)
251-
.expect(201)
265+
.expect(403)
252266
.end(done);
253267
});
254268

255269
it('should return 403 if requested by non-member copilot', (done) => {
256270
models.ProjectMember.destroy({
257271
where: { userId: testUtil.userIds.copilot, projectId },
258-
})
259-
.then(() => {
272+
}).then(() => {
260273
request(server)
261274
.post(`/v4/projects/${projectId}/phases/${phaseId}/products`)
262275
.set({

src/routes/phaseProducts/delete.spec.js

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,6 @@ describe('Phase Products', () => {
9999
isPrimary: true,
100100
createdBy: 1,
101101
updatedBy: 1,
102-
}, {
103-
id: 3,
104-
userId: testUtil.userIds.manager,
105-
projectId,
106-
role: 'manager',
107-
isPrimary: false,
108-
createdBy: 1,
109-
updatedBy: 1,
110102
}]).then(() => {
111103
models.ProjectPhase.create({
112104
name: 'test project phase',
@@ -164,7 +156,7 @@ describe('Phase Products', () => {
164156
request(server)
165157
.delete(`/v4/projects/999/phases/${phaseId}/products/${productId}`)
166158
.set({
167-
Authorization: `Bearer ${testUtil.jwts.admin}`,
159+
Authorization: `Bearer ${testUtil.jwts.connectAdmin}`,
168160
})
169161
.expect('Content-Type', /json/)
170162
.expect(404, done);
@@ -174,7 +166,7 @@ describe('Phase Products', () => {
174166
request(server)
175167
.delete(`/v4/projects/${projectId}/phases/99999/products/${productId}`)
176168
.set({
177-
Authorization: `Bearer ${testUtil.jwts.manager}`,
169+
Authorization: `Bearer ${testUtil.jwts.connectAdmin}`,
178170
})
179171
.expect('Content-Type', /json/)
180172
.expect(404, done);
@@ -184,7 +176,7 @@ describe('Phase Products', () => {
184176
request(server)
185177
.delete(`/v4/projects/${projectId}/phases/${phaseId}/products/99999`)
186178
.set({
187-
Authorization: `Bearer ${testUtil.jwts.manager}`,
179+
Authorization: `Bearer ${testUtil.jwts.connectAdmin}`,
188180
})
189181
.expect('Content-Type', /json/)
190182
.expect(404, done);
@@ -211,20 +203,39 @@ describe('Phase Products', () => {
211203
});
212204

213205
it('should return 204 if requested by manager which is a member', (done) => {
206+
models.ProjectMember.create({
207+
id: 3,
208+
userId: testUtil.userIds.manager,
209+
projectId,
210+
role: 'manager',
211+
isPrimary: false,
212+
createdBy: 1,
213+
updatedBy: 1,
214+
}).then(() => {
215+
request(server)
216+
.delete(`/v4/projects/${projectId}/phases/${phaseId}/products/${productId}`)
217+
.set({
218+
Authorization: `Bearer ${testUtil.jwts.manager}`,
219+
})
220+
.expect(204)
221+
.end(done);
222+
});
223+
});
224+
225+
it('should return 403 if requested by manager which is not a member', (done) => {
214226
request(server)
215227
.delete(`/v4/projects/${projectId}/phases/${phaseId}/products/${productId}`)
216228
.set({
217229
Authorization: `Bearer ${testUtil.jwts.manager}`,
218230
})
219-
.expect(204)
231+
.expect(403)
220232
.end(done);
221233
});
222234

223235
it('should return 403 if requested by non-member copilot', (done) => {
224236
models.ProjectMember.destroy({
225237
where: { userId: testUtil.userIds.copilot, projectId },
226-
})
227-
.then(() => {
238+
}).then(() => {
228239
request(server)
229240
.delete(`/v4/projects/${projectId}/phases/${phaseId}/products/${productId}`)
230241
.set({

src/routes/phaseProducts/update.spec.js

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,6 @@ describe('Phase Products', () => {
8585
isPrimary: true,
8686
createdBy: 1,
8787
updatedBy: 1,
88-
}, {
89-
id: 3,
90-
userId: testUtil.userIds.manager,
91-
projectId,
92-
role: 'manager',
93-
isPrimary: false,
94-
createdBy: 1,
95-
updatedBy: 1,
9688
}]).then(() => {
9789
models.ProjectPhase.create({
9890
name: 'test project phase',
@@ -152,7 +144,7 @@ describe('Phase Products', () => {
152144
request(server)
153145
.patch(`/v4/projects/999/phases/${phaseId}/products/${productId}`)
154146
.set({
155-
Authorization: `Bearer ${testUtil.jwts.admin}`,
147+
Authorization: `Bearer ${testUtil.jwts.connectAdmin}`,
156148
})
157149
.send({ param: updateBody })
158150
.expect('Content-Type', /json/)
@@ -163,7 +155,7 @@ describe('Phase Products', () => {
163155
request(server)
164156
.patch(`/v4/projects/${projectId}/phases/99999/products/${productId}`)
165157
.set({
166-
Authorization: `Bearer ${testUtil.jwts.manager}`,
158+
Authorization: `Bearer ${testUtil.jwts.copilot}`,
167159
})
168160
.send({ param: updateBody })
169161
.expect('Content-Type', /json/)
@@ -174,7 +166,7 @@ describe('Phase Products', () => {
174166
request(server)
175167
.patch(`/v4/projects/${projectId}/phases/${phaseId}/products/99999`)
176168
.set({
177-
Authorization: `Bearer ${testUtil.jwts.manager}`,
169+
Authorization: `Bearer ${testUtil.jwts.copilot}`,
178170
})
179171
.send({ param: updateBody })
180172
.expect('Content-Type', /json/)
@@ -185,7 +177,7 @@ describe('Phase Products', () => {
185177
request(server)
186178
.patch(`/v4/projects/${projectId}/phases/${phaseId}/products/99999`)
187179
.set({
188-
Authorization: `Bearer ${testUtil.jwts.manager}`,
180+
Authorization: `Bearer ${testUtil.jwts.copilot}`,
189181
})
190182
.send({
191183
param: {
@@ -235,22 +227,43 @@ describe('Phase Products', () => {
235227
});
236228

237229
it('should return 200 if requested by manager which is a member', (done) => {
230+
models.ProjectMember.create({
231+
id: 3,
232+
userId: testUtil.userIds.manager,
233+
projectId,
234+
role: 'manager',
235+
isPrimary: false,
236+
createdBy: 1,
237+
updatedBy: 1,
238+
}).then(() => {
239+
request(server)
240+
.patch(`/v4/projects/${projectId}/phases/${phaseId}/products/${productId}`)
241+
.set({
242+
Authorization: `Bearer ${testUtil.jwts.manager}`,
243+
})
244+
.send({ param: updateBody })
245+
.expect('Content-Type', /json/)
246+
.expect(200)
247+
.end(done);
248+
});
249+
});
250+
251+
it('should return 403 if requested by manager which is not a member', (done) => {
238252
request(server)
239253
.patch(`/v4/projects/${projectId}/phases/${phaseId}/products/${productId}`)
240254
.set({
241255
Authorization: `Bearer ${testUtil.jwts.manager}`,
242256
})
243257
.send({ param: updateBody })
244258
.expect('Content-Type', /json/)
245-
.expect(200)
259+
.expect(403)
246260
.end(done);
247261
});
248262

249263
it('should return 403 if requested by non-member copilot', (done) => {
250264
models.ProjectMember.destroy({
251265
where: { userId: testUtil.userIds.copilot, projectId },
252-
})
253-
.then(() => {
266+
}).then(() => {
254267
request(server)
255268
.patch(`/v4/projects/${projectId}/phases/${phaseId}/products/${productId}`)
256269
.set({

src/routes/phases/create.spec.js

Lines changed: 56 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -57,49 +57,39 @@ describe('Project Phases', () => {
5757
beforeEach((done) => {
5858
// mocks
5959
testUtil.clearDb()
60-
.then(() => {
61-
models.Project.create({
62-
type: 'generic',
63-
billingAccountId: 1,
64-
name: 'test1',
65-
description: 'test project1',
66-
status: 'draft',
67-
details: {},
60+
.then(() => models.Project.create({
61+
type: 'generic',
62+
billingAccountId: 1,
63+
name: 'test1',
64+
description: 'test project1',
65+
status: 'draft',
66+
details: {},
67+
createdBy: 1,
68+
updatedBy: 1,
69+
lastActivityAt: 1,
70+
lastActivityUserId: '1',
71+
}).then((p) => {
72+
projectId = p.id;
73+
projectName = p.name;
74+
// create members
75+
return models.ProjectMember.bulkCreate([{
76+
id: 1,
77+
userId: copilotUser.userId,
78+
projectId,
79+
role: 'copilot',
80+
isPrimary: false,
6881
createdBy: 1,
6982
updatedBy: 1,
70-
lastActivityAt: 1,
71-
lastActivityUserId: '1',
72-
}).then((p) => {
73-
projectId = p.id;
74-
projectName = p.name;
75-
// create members
76-
models.ProjectMember.bulkCreate([{
77-
id: 1,
78-
userId: copilotUser.userId,
79-
projectId,
80-
role: 'copilot',
81-
isPrimary: false,
82-
createdBy: 1,
83-
updatedBy: 1,
84-
}, {
85-
id: 2,
86-
userId: memberUser.userId,
87-
projectId,
88-
role: 'customer',
89-
isPrimary: true,
90-
createdBy: 1,
91-
updatedBy: 1,
92-
}, {
93-
id: 3,
94-
userId: testUtil.userIds.manager,
95-
projectId,
96-
role: 'manager',
97-
isPrimary: false,
98-
createdBy: 1,
99-
updatedBy: 1,
100-
}]);
101-
});
102-
})
83+
}, {
84+
id: 2,
85+
userId: memberUser.userId,
86+
projectId,
87+
role: 'customer',
88+
isPrimary: true,
89+
createdBy: 1,
90+
updatedBy: 1,
91+
}]);
92+
}))
10393
.then(() =>
10494
models.ProductTemplate.create({
10595
name: 'name 1',
@@ -136,7 +126,7 @@ describe('Project Phases', () => {
136126
.then(() => done());
137127
});
138128

139-
after((done) => {
129+
afterEach((done) => {
140130
testUtil.clearDb(done);
141131
});
142132

@@ -368,22 +358,43 @@ describe('Project Phases', () => {
368358
});
369359

370360
it('should return 201 if requested by manager which is a member', (done) => {
361+
models.ProjectMember.create({
362+
id: 3,
363+
userId: testUtil.userIds.manager,
364+
projectId,
365+
role: 'manager',
366+
isPrimary: false,
367+
createdBy: 1,
368+
updatedBy: 1,
369+
}).then(() => {
370+
request(server)
371+
.post(`/v4/projects/${projectId}/phases/`)
372+
.set({
373+
Authorization: `Bearer ${testUtil.jwts.manager}`,
374+
})
375+
.send({ param: body })
376+
.expect('Content-Type', /json/)
377+
.expect(201)
378+
.end(done);
379+
});
380+
});
381+
382+
it('should return 403 if requested by manager which is not a member', (done) => {
371383
request(server)
372384
.post(`/v4/projects/${projectId}/phases/`)
373385
.set({
374386
Authorization: `Bearer ${testUtil.jwts.manager}`,
375387
})
376388
.send({ param: body })
377389
.expect('Content-Type', /json/)
378-
.expect(201)
390+
.expect(403)
379391
.end(done);
380392
});
381393

382394
it('should return 403 if requested by non-member copilot', (done) => {
383395
models.ProjectMember.destroy({
384396
where: { userId: testUtil.userIds.copilot, projectId },
385-
})
386-
.then(() => {
397+
}).then(() => {
387398
request(server)
388399
.post(`/v4/projects/${projectId}/phases/`)
389400
.set({

0 commit comments

Comments
 (0)