Skip to content

Commit

Permalink
Merge 53eb324 into 7574790
Browse files Browse the repository at this point in the history
  • Loading branch information
gadishimwe committed Jan 13, 2020
2 parents 7574790 + 53eb324 commit 027f233
Show file tree
Hide file tree
Showing 12 changed files with 342 additions and 105 deletions.
13 changes: 13 additions & 0 deletions src/controllers/request.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,19 @@ class RequestController {
ResponseService.setSuccess(200, 'List request directed to you', requests);
return ResponseService.send(res);
}

/**
*
* @static
* @param {req} req
* @param {res} res
* @returns {response} @memberof RequestController
*/
static async updateRequestStatus(req, res) {
const [, [{ dataValues }]] = await RequestService.updateRequest({ id: req.params.requestId }, { status: `${req.body.status}` });
ResponseService.setSuccess(200, `Request has successfully ${dataValues.status}`, dataValues);
return ResponseService.send(res);
}
}

export default RequestController;
3 changes: 3 additions & 0 deletions src/routes/manager.route.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import express from 'express';
import RequestController from '../controllers/request.controller';
import authMiddleware from '../middlewares/auth.middleware';
import { validateChangingRequestStatus } from '../validations/request.validation';

const router = express.Router();

Expand All @@ -10,5 +11,7 @@ router.get(
authMiddleware.checkIfUserIsManager,
RequestController.findRequests
);
router.patch('/requests/:requestId', authMiddleware.checkUserLoggedIn, authMiddleware.checkIfUserIsManager, validateChangingRequestStatus, RequestController.updateRequestStatus);


export default router;
2 changes: 1 addition & 1 deletion src/routes/trip.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import CommentController from '../controllers/comment.controller';
import oneWayTripValidation from '../validations/one-way-trip.validation';
import authMiddleware from '../middlewares/auth.middleware';
import TripValidation from '../validations/trip.validation';
import requestValidation from '../validations/request.validation';
import { requestValidation } from '../validations/request.validation';
import multiCityTripValidation from '../validations/multi-city-trip.validation';
import UserValidation from '../validations/user.validation';

Expand Down
27 changes: 27 additions & 0 deletions src/services/request.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,33 @@ class RequestService {
order: [['status', 'ASC'], ['createdAt', 'DESC']]
});
}

/** find Request
* @static
* @param {object} property
* @memberof AccommodationService
* @returns {object} data
*/
static findRequestByProperty(property) {
return Request.findOne({
where: { ...property }
});
}

/**
*
*
* @static
* @param {item} requestId request column to be updated
* @param {value} requestInfo to be updated
* @returns {updated} @memberof RequestService
*/
static updateRequest(requestId, requestInfo) {
return Request.update(requestInfo, {
where: requestId,
returning: true
});
}
}


Expand Down
49 changes: 49 additions & 0 deletions src/swagger/request.swagger.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,52 @@
* description: No Token supplied
*
*/

/**
* @swagger
* definitions:
* Request:
* type: object
* properties:
* status:
* type: string
* required:
* - status
*/

/**
* @swagger
* /api/manager/requests/{requestId}:
* patch:
* tags:
* - Manager
* name: Request
* summary: A manager should be able to approve or reject requests of his direct report
* produces:
* - application/json
* consumes:
* - application/json
* parameters:
* - in: header
* name: Authorization
* required: true
* type: string
* - name: requestId
* in: path
* - name: status
* in: body
* schema:
* $ref: '#/definitions/Request'
* type: object
* responses:
* '200':
* description: Request approved or rejected successfully
* '400':
* description: invalid parameters.
* '401':
* description: No valid token supplied
* '403':
* description: Unauthorized
* '422':
* description: Rejecting rejected or approved request
*/
4 changes: 3 additions & 1 deletion src/tests/fixtures/comments.fixture.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export const noTripFound = {
};

const newTrip = {
id: faker.random.number({ min: 20, max: 50 }),
userId: loggedInUser.id,
tripType: 'one-way',
departure: faker.address.city(),
Expand All @@ -29,5 +30,6 @@ const newTrip = {

export const createTrip = async () => {
await Trip.destroy({ where: {} });
await Trip.create(newTrip);
const { dataValues } = await Trip.create(newTrip);
return dataValues;
};
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ import BcryptService from '../../services/bcrypt.service';
import JwtService from '../../services/jwt.service';
import models from '../../models';

const { Users, Request } = models;
const { Users } = models;

// create managers for management actions
export const loggedInManager1 = {
id: faker.random.number({ min: 200, max: 205 }),
id: faker.random.number(),
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
email: faker.internet.email(),
Expand All @@ -20,7 +21,7 @@ export const managerToken1 = JwtService.generateToken({
id: loggedInManager1.id
});
export const loggedInManager2 = {
id: faker.random.number({ min: 206, max: 210 }),
id: faker.random.number(),
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
email: faker.internet.email(),
Expand All @@ -33,9 +34,24 @@ export const loggedInManager2 = {
export const managerToken2 = JwtService.generateToken({
id: loggedInManager2.id
});
export const loggedInNonManager = {
id: faker.random.number(),
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
email: faker.internet.email(),
password: BcryptService.hashPassword(faker.internet.password()),
isVerified: true,
role: 'requester',
createdAt: new Date(),
updatedAt: new Date(),
};
export const nonManagerToken = JwtService.generateToken({
id: loggedInNonManager.id
});

export const createManagers = async () => {
await Request.destroy({ where: {} });
await Users.create({ ...loggedInManager1, token: managerToken1 });
const manager1 = await Users.create({ ...loggedInManager1, token: managerToken1 });
await Users.create({ ...loggedInManager2, token: managerToken2 });
await Users.create({ ...loggedInNonManager, token: nonManagerToken });
return manager1.dataValues;
};
23 changes: 13 additions & 10 deletions src/tests/fixtures/request.fixture.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
import faker from 'faker';
import RequestService from '../../services/request.service';
import models from '../../models';
import { loggedInManager1 } from './manager.fixture';
import { createManagers } from './managers.fixture';
import { cleanDb } from './users.fixture';


const { Request } = models;


const pendingRequest = {
id: faker.random.number({ min: 1, max: 5 }),
requesterId: faker.random.number(),
tripId: faker.random.number(),
status: 'pending',
lineManagerId: loggedInManager1.id
};
const createRequests = async () => {
await cleanDb();
const manager1 = await createManagers();
const pendingRequest = {
id: faker.random.number({ min: 1, max: 5 }),
requesterId: faker.random.number(),
tripId: faker.random.number(),
status: 'pending',
lineManagerId: manager1.id
};
await Request.destroy({ where: {} });
await RequestService.createRequest(pendingRequest);
const { dataValues } = await RequestService.createRequest(pendingRequest);
return dataValues;
};

export default createRequests;
Loading

0 comments on commit 027f233

Please sign in to comment.