All files / app/routes/api/group/group-id/leave leave-group-controller.ts

100% Statements 13/13
100% Branches 8/8
100% Functions 1/1
100% Lines 13/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29  1x 1x                 1x 8x 8x   8x 5x 4x 2x 2x 1x   1x     3x      
import {RequestHandler} from 'express';
import {BadRequestError, NotMemberOfGroupError, InternalError} from '@errors';
import {UserService} from '@models';
 
/**
 * Handles request, that currently logged in user wants to
 * leave the specified group.
 * @param req   - Request
 * @param res   - Response
 * @param next  - Next
 */
export const leaveGroupController: RequestHandler = async (req, res, next) => {
  const groupId = parseInt(req.params.groupId, 10);
  const user = req.user;
 
  if (!isNaN(groupId) && user !== undefined) {
    const removedMemberships = await UserService.leaveGroup(user, groupId);
    if (removedMemberships === 1) {
      res.status(204).send();
    } else if (removedMemberships === 0) {
      throw new NotMemberOfGroupError();
    } else {
      throw new InternalError();
    }
  } else {
    throw new BadRequestError();
  }
};