Skip to content

Commit 0464e89

Browse files
Fix Unit Tests
1 parent cbf5c88 commit 0464e89

File tree

3 files changed

+32
-40
lines changed

3 files changed

+32
-40
lines changed

app/src/controllers/invite.js

+25-31
Original file line numberDiff line numberDiff line change
@@ -171,41 +171,35 @@ const controller = {
171171

172172
// if permCodes in db is `null` then just assign READ
173173
const permCodes = !invite.permCodes ? [Permissions.READ] : invite.permCodes;
174-
175-
// Assign array of permCode to the bucket or object
176-
permCodes.forEach(async permCode => {
177-
if (invite.type === ResourceType.OBJECT) {
178-
// Check for object existence
179-
await objectService.read(invite.resource).catch(() => {
180-
inviteService.delete(token);
181-
throw new Problem(409, {
182-
detail: `Object '${invite.resource}' not found`,
183-
instance: req.originalUrl,
184-
objectId: invite.resource
185-
});
174+
if (invite.type === ResourceType.OBJECT) {
175+
// Check for object existence
176+
await objectService.read(invite.resource).catch(() => {
177+
inviteService.delete(token);
178+
throw new Problem(409, {
179+
detail: `Object '${invite.resource}' not found`,
180+
instance: req.originalUrl,
181+
objectId: invite.resource
186182
});
183+
});
187184

188-
// Grant invitation permission and cleanup
189-
await objectPermissionService.addPermissions(invite.resource, [
190-
{ userId: userId, permCode: permCode }
191-
], invite.createdBy);
192-
} else if (invite.type === ResourceType.BUCKET) {
193-
// Check for object existence
194-
await bucketService.read(invite.resource).catch(() => {
195-
inviteService.delete(token);
196-
throw new Problem(409, {
197-
detail: `Bucket '${invite.resource}' not found`,
198-
instance: req.originalUrl,
199-
bucketId: invite.resource
200-
});
185+
// Grant invitation permission and cleanup
186+
await objectPermissionService.addPermissions(invite.resource,
187+
permCodes.map(permCode => ({ userId, permCode })), invite.createdBy);
188+
} else if (invite.type === ResourceType.BUCKET) {
189+
// Check for object existence
190+
await bucketService.read(invite.resource).catch(() => {
191+
inviteService.delete(token);
192+
throw new Problem(409, {
193+
detail: `Bucket '${invite.resource}' not found`,
194+
instance: req.originalUrl,
195+
bucketId: invite.resource
201196
});
197+
});
202198

203-
// Grant invitation permission and cleanup
204-
await bucketPermissionService.addPermissions(invite.resource, [
205-
{ userId: userId, permCode: permCode }
206-
], invite.createdBy);
207-
}
208-
});
199+
// Grant invitation permission and cleanup
200+
await bucketPermissionService.addPermissions(invite.resource,
201+
permCodes.map(permCode => ({ userId, permCode })), invite.createdBy);
202+
}
209203

210204
// Cleanup invite on success
211205
inviteService.delete(token);

app/src/db/migrations/20240305000000_014-invitePermissions.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@ exports.up = function (knex) {
22
return Promise.resolve()
33
// Add permCodes to the table
44
.then(() => knex.schema.alterTable('invite', table => {
5-
// Choosing jsonb instead of array as for some reasons insert does not
6-
// seems to be accepting data in array format, something to do with knex and postgres
75
table.jsonb('permCodes');
86
}));
97
};
108

119
exports.down = function (knex) {
1210
return Promise.resolve()
13-
// permCodes column from Invite table
11+
// Drop permCodes column from Invite table
1412
.then(() => knex.schema.alterTable('invite', table => {
1513
table.dropColumn('permCodes');
1614
}));

app/tests/unit/controllers/invite.spec.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,6 @@ describe('useInvite', () => {
446446
params: { token: TOKEN }
447447
};
448448

449-
inviteReadSpy.mockResolvedValue({ email: email, resource: RESOURCE, type: ResourceType.OBJECT });
450449
objectReadSpy.mockRejectedValue({});
451450

452451
await controller.useInvite(req, res, next);
@@ -480,7 +479,7 @@ describe('useInvite', () => {
480479
expect(inviteDeleteSpy).toHaveBeenCalledWith(TOKEN);
481480
expect(inviteReadSpy).toHaveBeenCalledTimes(1);
482481
expect(inviteReadSpy).toHaveBeenCalledWith(TOKEN);
483-
expect(objectAddPermissionsSpy).toHaveBeenCalledTimes(0);
482+
expect(objectAddPermissionsSpy).toHaveBeenCalledTimes(1);
484483
expect(objectReadSpy).toHaveBeenCalledTimes(1);
485484
expect(objectReadSpy).toHaveBeenCalledWith(RESOURCE);
486485
expect(next).toHaveBeenCalledTimes(0);
@@ -495,7 +494,6 @@ describe('useInvite', () => {
495494
params: { token: TOKEN }
496495
};
497496

498-
inviteReadSpy.mockResolvedValue({ email: email, resource: RESOURCE, type: ResourceType.BUCKET });
499497
bucketReadSpy.mockRejectedValue({});
500498

501499
await controller.useInvite(req, res, next);
@@ -505,7 +503,9 @@ describe('useInvite', () => {
505503
expect(inviteDeleteSpy).toHaveBeenCalledTimes(0);
506504
expect(inviteReadSpy).toHaveBeenCalledTimes(1);
507505
expect(inviteReadSpy).toHaveBeenCalledWith(TOKEN);
508-
expect(bucketAddPermissionsSpy).toHaveBeenCalledTimes(0);
506+
expect(objectAddPermissionsSpy).toHaveBeenCalledTimes(0);
507+
expect(objectReadSpy).toHaveBeenCalledTimes(0);
508+
expect(next).toHaveBeenCalledTimes(1);
509509
});
510510

511511
it('should 200 when bucket grant successful', async () => {
@@ -523,13 +523,13 @@ describe('useInvite', () => {
523523

524524
await controller.useInvite(req, res, next);
525525

526-
expect(bucketAddPermissionsSpy).toHaveBeenCalledTimes(0);
526+
expect(bucketAddPermissionsSpy).toHaveBeenCalledTimes(1);
527527
expect(bucketReadSpy).toHaveBeenCalledTimes(1);
528528
expect(inviteDeleteSpy).toHaveBeenCalledTimes(1);
529529
expect(inviteDeleteSpy).toHaveBeenCalledWith(TOKEN);
530530
expect(inviteReadSpy).toHaveBeenCalledTimes(1);
531531
expect(inviteReadSpy).toHaveBeenCalledWith(TOKEN);
532-
expect(bucketAddPermissionsSpy).toHaveBeenCalledTimes(0);
532+
expect(bucketAddPermissionsSpy).toHaveBeenCalledTimes(1);
533533
expect(bucketReadSpy).toHaveBeenCalledTimes(1);
534534
expect(next).toHaveBeenCalledTimes(0);
535535
expect(res.json).toHaveBeenCalledWith({ resource: RESOURCE, type: ResourceType.BUCKET });

0 commit comments

Comments
 (0)