diff --git a/api/src/controllers/group.ts b/api/src/controllers/group.ts index ca48360..3a6ff66 100644 --- a/api/src/controllers/group.ts +++ b/api/src/controllers/group.ts @@ -148,7 +148,11 @@ export class GroupController { public async deleteGroup(@Path() groupId: number) { const group = await Group.findOne({ groupId }) if (group) return await group.remove() - throw new Error('No Group deleted!') + throw { + code: 404, + status: 'Not Found', + message: 'Group not found.' + } } } @@ -162,6 +166,15 @@ const createGroup = async ({ description, isActive }: GroupPayload): Promise => { + // Checking if user is already in the database + const groupnameExist = await Group.findOne({ name }) + if (groupnameExist) + throw { + code: 409, + status: 'Conflict', + message: 'Group name already exists.' + } + const group = new Group({ name, description, @@ -187,7 +200,12 @@ const getGroup = async (findBy: GetGroupBy): Promise => { 'users', 'id username displayName -_id' )) as unknown as GroupDetailsResponse - if (!group) throw new Error('Group not found.') + if (!group) + throw { + code: 404, + status: 'Not Found', + message: 'Group not found.' + } return { groupId: group.groupId, @@ -216,16 +234,31 @@ const updateUsersListInGroup = async ( action: 'addUser' | 'removeUser' ): Promise => { const group = await Group.findOne({ groupId }) - if (!group) throw new Error('Group not found.') + if (!group) + throw { + code: 404, + status: 'Not Found', + message: 'Group not found.' + } const user = await User.findOne({ id: userId }) - if (!user) throw new Error('User not found.') + if (!user) + throw { + code: 404, + status: 'Not Found', + message: 'User not found.' + } const updatedGroup = (action === 'addUser' ? await group.addUser(user._id) : await group.removeUser(user._id)) as unknown as GroupDetailsResponse - if (!updatedGroup) throw new Error('Unable to update group') + if (!updatedGroup) + throw { + code: 400, + status: 'Bad Request', + message: 'Unable to update group.' + } if (action === 'addUser') user.addGroup(group._id) else user.removeGroup(group._id) diff --git a/api/src/routes/api/group.ts b/api/src/routes/api/group.ts index eaf4db5..930b817 100644 --- a/api/src/routes/api/group.ts +++ b/api/src/routes/api/group.ts @@ -18,7 +18,11 @@ groupRouter.post( const response = await controller.createGroup(body) res.send(response) } catch (err: any) { - res.status(403).send(err.toString()) + const statusCode = err.code + + delete err.code + + res.status(statusCode).send(err.message) } } ) @@ -29,7 +33,11 @@ groupRouter.get('/', authenticateAccessToken, async (req, res) => { const response = await controller.getAllGroups() res.send(response) } catch (err: any) { - res.status(403).send(err.toString()) + const statusCode = err.code + + delete err.code + + res.status(statusCode).send(err.message) } }) @@ -41,7 +49,11 @@ groupRouter.get('/:groupId', authenticateAccessToken, async (req, res) => { const response = await controller.getGroup(parseInt(groupId)) res.send(response) } catch (err: any) { - res.status(403).send(err.toString()) + const statusCode = err.code + + delete err.code + + res.status(statusCode).send(err.message) } }) @@ -59,7 +71,11 @@ groupRouter.get( const response = await controller.getGroupByGroupName(name) res.send(response) } catch (err: any) { - res.status(403).send(err.toString()) + const statusCode = err.code + + delete err.code + + res.status(statusCode).send(err.message) } } ) @@ -79,7 +95,11 @@ groupRouter.post( ) res.send(response) } catch (err: any) { - res.status(403).send(err.toString()) + const statusCode = err.code + + delete err.code + + res.status(statusCode).send(err.message) } } ) @@ -99,7 +119,11 @@ groupRouter.delete( ) res.send(response) } catch (err: any) { - res.status(403).send(err.toString()) + const statusCode = err.code + + delete err.code + + res.status(statusCode).send(err.message) } } ) @@ -116,7 +140,11 @@ groupRouter.delete( await controller.deleteGroup(parseInt(groupId)) res.status(200).send('Group Deleted!') } catch (err: any) { - res.status(403).send(err.toString()) + const statusCode = err.code + + delete err.code + + res.status(statusCode).send(err.message) } } ) diff --git a/api/src/routes/api/spec/group.spec.ts b/api/src/routes/api/spec/group.spec.ts index cfa6036..5be8538 100644 --- a/api/src/routes/api/spec/group.spec.ts +++ b/api/src/routes/api/spec/group.spec.ts @@ -70,6 +70,19 @@ describe('group', () => { expect(res.body.users).toEqual([]) }) + it('should respond with Conflict when group already exists with same name', async () => { + await groupController.createGroup(group) + + const res = await request(app) + .post('/SASjsApi/group') + .auth(adminAccessToken, { type: 'bearer' }) + .send(group) + .expect(409) + + expect(res.text).toEqual('Group name already exists.') + expect(res.body).toEqual({}) + }) + it('should respond with Unauthorized if access token is not present', async () => { const res = await request(app).post('/SASjsApi/group').send().expect(401) @@ -162,14 +175,14 @@ describe('group', () => { expect(res2.body.groups).toEqual([]) }) - it('should respond with Forbidden if groupId is incorrect', async () => { + it('should respond with Not Found if groupId is incorrect', async () => { const res = await request(app) .delete(`/SASjsApi/group/1234`) .auth(adminAccessToken, { type: 'bearer' }) .send() - .expect(403) + .expect(404) - expect(res.text).toEqual('Error: No Group deleted!') + expect(res.text).toEqual('Group not found.') expect(res.body).toEqual({}) }) @@ -253,14 +266,14 @@ describe('group', () => { expect(res.body).toEqual({}) }) - it('should respond with Forbidden if groupId is incorrect', async () => { + it('should respond with Not Found if groupId is incorrect', async () => { const res = await request(app) .get('/SASjsApi/group/1234') .auth(adminAccessToken, { type: 'bearer' }) .send() - .expect(403) + .expect(404) - expect(res.text).toEqual('Error: Group not found.') + expect(res.text).toEqual('Group not found.') expect(res.body).toEqual({}) }) @@ -312,14 +325,14 @@ describe('group', () => { expect(res.body).toEqual({}) }) - it('should respond with Forbidden if groupname is incorrect', async () => { + it('should respond with Not Found if groupname is incorrect', async () => { const res = await request(app) .get('/SASjsApi/group/by/groupname/randomCharacters') .auth(adminAccessToken, { type: 'bearer' }) .send() - .expect(403) + .expect(404) - expect(res.text).toEqual('Error: Group not found.') + expect(res.text).toEqual('Group not found.') expect(res.body).toEqual({}) }) }) @@ -487,26 +500,26 @@ describe('group', () => { expect(res.body).toEqual({}) }) - it('should respond with Forbidden if groupId is incorrect', async () => { + it('should respond with Not Found if groupId is incorrect', async () => { const res = await request(app) .post('/SASjsApi/group/123/123') .auth(adminAccessToken, { type: 'bearer' }) .send() - .expect(403) + .expect(404) - expect(res.text).toEqual('Error: Group not found.') + expect(res.text).toEqual('Group not found.') expect(res.body).toEqual({}) }) - it('should respond with Forbidden if userId is incorrect', async () => { + it('should respond with Not Found if userId is incorrect', async () => { const dbGroup = await groupController.createGroup(group) const res = await request(app) .post(`/SASjsApi/group/${dbGroup.groupId}/123`) .auth(adminAccessToken, { type: 'bearer' }) .send() - .expect(403) + .expect(404) - expect(res.text).toEqual('Error: User not found.') + expect(res.text).toEqual('User not found.') expect(res.body).toEqual({}) }) }) @@ -586,26 +599,26 @@ describe('group', () => { expect(res.body).toEqual({}) }) - it('should respond with Forbidden if groupId is incorrect', async () => { + it('should respond with Not Found if groupId is incorrect', async () => { const res = await request(app) .delete('/SASjsApi/group/123/123') .auth(adminAccessToken, { type: 'bearer' }) .send() - .expect(403) + .expect(404) - expect(res.text).toEqual('Error: Group not found.') + expect(res.text).toEqual('Group not found.') expect(res.body).toEqual({}) }) - it('should respond with Forbidden if userId is incorrect', async () => { + it('should respond with Not Found if userId is incorrect', async () => { const dbGroup = await groupController.createGroup(group) const res = await request(app) .delete(`/SASjsApi/group/${dbGroup.groupId}/123`) .auth(adminAccessToken, { type: 'bearer' }) .send() - .expect(403) + .expect(404) - expect(res.text).toEqual('Error: User not found.') + expect(res.text).toEqual('User not found.') expect(res.body).toEqual({}) }) })