Skip to content

Commit

Permalink
feature(travel-request): implement create return travel request feature
Browse files Browse the repository at this point in the history
- write tests
- add validation middleware
- add create return travel request route and controller

[Finishes #167891582]
  • Loading branch information
max-wel committed Sep 3, 2019
1 parent 121f01d commit 34c7b1e
Show file tree
Hide file tree
Showing 6 changed files with 238 additions and 122 deletions.
6 changes: 3 additions & 3 deletions src/controllers/Trip.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,10 @@ class TripController {
*/
static async createTripRequest(req, res) {
try {
const { type } = req.query;
const { payload } = req.payload;
const { id: userId } = payload;
const {
from, departureDate, destination, reason
type, from, departureDate, returnDate, destination, reason
} = req.body;
const { to, accomodation } = destination;

Expand All @@ -61,6 +60,7 @@ class TripController {
startBranchId: from,
reason,
tripDate: departureDate,
returnDate: type === 'oneway' ? null : returnDate
});

// create stop
Expand All @@ -75,7 +75,7 @@ class TripController {
const response = new Response(
true,
201,
'One way travel request successfully created',
'Travel request successfully created',
{ trip: result }
);
return res.status(response.code).json(response);
Expand Down
4 changes: 2 additions & 2 deletions src/routes/trip.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ import { Router } from 'express';
import TripController from '../controllers/Trip';
import Token from '../helpers/Token';
import validator from '../middlewares/validator';
import { oneWaySchema } from '../validation/tripSchema';
import { tripRequestSchema } from '../validation/tripSchema';

const tripRoutes = Router();

tripRoutes.get('/user', Token.verifyToken, TripController.getUserTrips);
tripRoutes.post(
'/',
Token.verifyToken,
validator(oneWaySchema),
validator(tripRequestSchema),
TripController.createTripRequest
);

Expand Down
21 changes: 18 additions & 3 deletions src/validation/tripSchema.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ import models from '../database/models';
const { Branch, Accomodation } = models;
const dateRegex = /([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))/;

const oneWaySchema = [
const tripRequestSchema = [
check('type')
.not().isEmpty({ ignore_whitespace: true })
.withMessage('Trip type is required')
.trim()
.isIn(['oneway', 'return'])
.withMessage('Invalid query parameter'),
.withMessage('Invalid trip type'),
check('from')
.exists()
.withMessage('Starting point is required')
Expand All @@ -26,6 +29,18 @@ const oneWaySchema = [
.withMessage('Departure date is required')
.matches(dateRegex)
.withMessage('Invalid departure date format'),
check('returnDate')
.trim()
.custom((value, { req }) => {
const { type, departureDate } = req.body;
if (type === 'return' && !dateRegex.test(value)) {
throw new Error('Invalid return date format');
}
if (type === 'return' && new Date(value) <= new Date(departureDate)) {
throw new Error('Return date must be greater than departure date');
}
return true;
}),
check('reason')
.not().isEmpty({ ignore_whitespace: true })
.withMessage('Travel reason is required')
Expand Down Expand Up @@ -61,4 +76,4 @@ const oneWaySchema = [
}),
];

export { oneWaySchema };
export { tripRequestSchema };
22 changes: 8 additions & 14 deletions swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -413,27 +413,21 @@
"tags": [
"Travel Requests"
],
"summary": "One way travel request",
"description": "Creates one way travel request",
"parameters": [
{
"in": "query",
"name": "type",
"description": "Travel type",
"required": true,
"schema": {
"type": "string"
}
}
],
"summary": "Travel request",
"description": "Creates travel request",
"parameters": [],
"requestBody": {
"description": "One way travel request",
"description": "Travel request",
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"type": {
"type": "string",
"example": "oneway"
},
"from": {
"type": "string",
"format": "uuid"
Expand Down
56 changes: 55 additions & 1 deletion test/mockData/mockTrips.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const oneWayTravelRequests = [
{
type: 'oneway',
from: '3dd3b34a-7554-425e-a688-36afda199614',
departureDate: '2000-09-09',
reason: 'Just wanna travel',
Expand All @@ -10,6 +11,7 @@ const oneWayTravelRequests = [
}
},
{
type: 'invalid',
from: '3dd3b34a-7554-425e-a688-36afda1996ab',
departureDate: '2000-09-09',
reason: 'Just wanna travel',
Expand All @@ -20,6 +22,18 @@ const oneWayTravelRequests = [
}
},
{
type: 'oneway',
from: '3dd3b34a-7554-425e-a688-36afda1996ab',
departureDate: '2000-09-09',
reason: 'Just wanna travel',
destination:
{
to: '3dd3b34a-7554-455e-a688-36afda199624',
accomodation: '3dd3b34a-7554-425e-a688-36afda199619'
}
},
{
type: 'oneway',
from: '3dd3b34a-7554-425e-a688-36afda199614',
departureDate: '2000-09-09',
reason: 'Just wanna travel',
Expand All @@ -30,6 +44,7 @@ const oneWayTravelRequests = [
}
},
{
type: 'oneway',
from: '3dd3b34a-7554-425e-a688-36afda199614',
departureDate: '2000-09-09',
reason: 'Just wanna travel',
Expand All @@ -40,6 +55,7 @@ const oneWayTravelRequests = [
}
},
{
type: 'oneway',
from: '3dd3b34a-7554-425e-a688-36afda199614',
departureDate: '2000-09-09',
reason: 'Just wanna travel',
Expand All @@ -50,5 +66,43 @@ const oneWayTravelRequests = [
}
},
];
const returnTravelRequests = [
{
type: 'return',
from: '3dd3b34a-7554-425e-a688-36afda199614',
departureDate: '2000-09-09',
returnDate: '2000-09-10',
reason: 'Just wanna travel',
destination:
{
to: '3dd3b34a-7554-455e-a688-36afda199624',
accomodation: '3dd3b34a-7554-425e-a688-36afda199619'
}
},
{
type: 'return',
from: '3dd3b34a-7554-425e-a688-36afda199614',
departureDate: '2000-09-09',
returnDate: 'invalid',
reason: 'Just wanna travel',
destination:
{
to: '3dd3b34a-7554-455e-a688-36afda199624',
accomodation: '3dd3b34a-7554-425e-a688-36afda199619'
}
},
{
type: 'return',
from: '3dd3b34a-7554-425e-a688-36afda199614',
departureDate: '2000-09-09',
returnDate: '2000-09-09',
reason: 'Just wanna travel',
destination:
{
to: '3dd3b34a-7554-455e-a688-36afda199624',
accomodation: '3dd3b34a-7554-425e-a688-36afda199619'
}
},
];

export default { oneWayTravelRequests };
export default { oneWayTravelRequests, returnTravelRequests };
Loading

0 comments on commit 34c7b1e

Please sign in to comment.