Skip to content

Commit a99163c

Browse files
authored
Merge pull request #10 from topcoder-platform/PM-4211
PM-4211: add M2M project member write regression tests
2 parents 9d4e7c6 + f0af295 commit a99163c

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

test/project-member.e2e-spec.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,86 @@ describe('Project Member endpoints (e2e)', () => {
225225
expect(projectMemberServiceMock.deleteMember).toHaveBeenCalled();
226226
});
227227

228+
it('creates members for m2m token with project-member write scope', async () => {
229+
(jwtServiceMock.validateToken as jest.Mock).mockResolvedValueOnce({
230+
scopes: [Scope.PROJECT_MEMBERS_WRITE],
231+
isMachine: true,
232+
tokenPayload: {
233+
gty: 'client-credentials',
234+
scope: Scope.PROJECT_MEMBERS_WRITE,
235+
},
236+
});
237+
238+
await request(app.getHttpServer())
239+
.post('/v6/projects/1001/members')
240+
.set('Authorization', 'Bearer m2m-member-write')
241+
.send({ userId: '101125', role: 'observer' })
242+
.expect(201);
243+
244+
expect(projectMemberServiceMock.addMember).toHaveBeenCalledWith(
245+
'1001',
246+
expect.objectContaining({ userId: '101125', role: 'observer' }),
247+
expect.objectContaining({
248+
scopes: [Scope.PROJECT_MEMBERS_WRITE],
249+
isMachine: true,
250+
}),
251+
undefined,
252+
);
253+
});
254+
255+
it('updates members for m2m token with project-member write scope', async () => {
256+
(jwtServiceMock.validateToken as jest.Mock).mockResolvedValueOnce({
257+
scopes: [Scope.PROJECT_MEMBERS_WRITE],
258+
isMachine: true,
259+
tokenPayload: {
260+
gty: 'client-credentials',
261+
scope: Scope.PROJECT_MEMBERS_WRITE,
262+
},
263+
});
264+
265+
await request(app.getHttpServer())
266+
.patch('/v6/projects/1001/members/11')
267+
.set('Authorization', 'Bearer m2m-member-write')
268+
.send({ role: 'observer' })
269+
.expect(200);
270+
271+
expect(projectMemberServiceMock.updateMember).toHaveBeenCalledWith(
272+
'1001',
273+
'11',
274+
expect.objectContaining({ role: 'observer' }),
275+
expect.objectContaining({
276+
scopes: [Scope.PROJECT_MEMBERS_WRITE],
277+
isMachine: true,
278+
}),
279+
undefined,
280+
);
281+
});
282+
283+
it('deletes members for m2m token with project-member write scope', async () => {
284+
(jwtServiceMock.validateToken as jest.Mock).mockResolvedValueOnce({
285+
scopes: [Scope.PROJECT_MEMBERS_WRITE],
286+
isMachine: true,
287+
tokenPayload: {
288+
gty: 'client-credentials',
289+
scope: Scope.PROJECT_MEMBERS_WRITE,
290+
},
291+
});
292+
293+
await request(app.getHttpServer())
294+
.delete('/v6/projects/1001/members/11')
295+
.set('Authorization', 'Bearer m2m-member-write')
296+
.expect(204);
297+
298+
expect(projectMemberServiceMock.deleteMember).toHaveBeenCalledWith(
299+
'1001',
300+
'11',
301+
expect.objectContaining({
302+
scopes: [Scope.PROJECT_MEMBERS_WRITE],
303+
isMachine: true,
304+
}),
305+
);
306+
});
307+
228308
it('lists members for m2m token with project-member read scope', async () => {
229309
(jwtServiceMock.validateToken as jest.Mock).mockResolvedValueOnce({
230310
scopes: [Scope.PROJECT_MEMBERS_READ],

0 commit comments

Comments
 (0)