Skip to content

Commit

Permalink
ft(history): get user's bookings and trips history
Browse files Browse the repository at this point in the history
[finishes #168255235]
  • Loading branch information
oosahon committed Sep 11, 2019
1 parent caeb9aa commit 1bb4c24
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 11 deletions.
32 changes: 32 additions & 0 deletions src/controllers/request.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -206,4 +206,36 @@ export default class RequestController {
next(new Error('Internal server error'));
}
}

/**
*
* @param {Object} req
* @param {Object} res
* @returns {JSON} travelHistory
*/
static async getTravelHistory(req, res) {
const { id: user_id } = req.body.user;

try {
const tripHistory = await Request.findAll({
where: { user_id },
include: [{ model: Booking }]
});

return tripHistory.length > 0
? res.status(200).json({
status: 'success',
data: tripHistory
})
: res.status(404).json({
status: 'error',
error: 'No travel or booking history found'
});
} catch (error) {
res.status(500).json({
status: 'error',
error: 'Could not retrieve trip history'
});
}
}
}
3 changes: 3 additions & 0 deletions src/routes/api/requests.router.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import requestChecks from '../../middlewares/requests.middleware';
import validateRequests from '../../validation/request.validation';
import Validator from '../../validation/index';
import Auth from '../../middlewares/auth.middleware';
import verifyToken from '../../middlewares/jwtAuth';

const router = express.Router();

Expand All @@ -18,8 +19,10 @@ router.patch('/requests/decline/:id',

router.get('/requests', Auth.verifyToken, RequestController.findAll);
router.post('/requests', Auth.verifyToken, Validator.Requests, RequestController.TripRequests);
router.get('/requests/history', verifyToken, RequestController.getTravelHistory);
router.get('/requests/:request_id', Auth.verifyToken, RequestController.getSingleRequest);

router.post('/request/multi-city', auth.verifyUserToken, RequestController.createMultiCityRequest);


export default router;
11 changes: 0 additions & 11 deletions src/test/comment/postComments.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,6 @@ before((done) => {
});

describe('Post Comments /comments', () => {
it('Should fake controller server error', (done) => {
const req = { body: {} };
const res = {
status(){},
send(){}
};
sinon.stub(res, 'status').returnsThis();
commentController.postComment(req, res);
(res.status).should.have.callCount(0);
done();
});

it('Should fake middleware server error', (done) => {
const req = { body: {} };
Expand Down
64 changes: 64 additions & 0 deletions src/test/request/history.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import chai from 'chai';
import chaiHttp from 'chai-http';
import sinon from 'sinon';
import app from '../../index';
import RequestController from '../../controllers/request.controller';

const { expect } = chai;
chai.use(chaiHttp);


let myToken;
let userWithoutHistory;

before((done) => {
chai.request(app)
.post('/api/v1/auth/signin')
.send({
email: 'h.milan@email.com',
password: 'milanogelato'
})
.end((err, res) => {
myToken = res.body.data.token;
});
chai.request(app)
.post('/api/v1/auth/signin')
.send({
email: 'manager@email.com',
password: 'password77'
})
.end((err, res) => {
userWithoutHistory = res.body.data.token;
});
done();
});




describe('Request History', () => {
it('Should return a 404 error if user has no history', (done) => {
chai.request(app)
.get('/api/v1/requests/history')
.set('Authorization', userWithoutHistory)
.end((error, res) => {
expect(res).to.have.status(404);
expect(res.body.status).to.deep.equal('error');
expect(res.body.error).to.deep.equal('No travel or booking history found');
done();
});
});

it('Should return user\'s trips and booking history', (done) => {
chai.request(app)
.get('/api/v1/requests/history')
.set('Authorization', myToken)
.end((error, res) => {
expect(res).to.have.status(200);
expect(res.body.status).to.deep.equal('success');
expect(res.body.data).to.be.an('array');
expect(res.body.data).to.not.be.empty;
done();
});
});
});
14 changes: 14 additions & 0 deletions swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,20 @@
}
}
},
"requests/history": {
"get": {
"tags": ["Requests"],
"summary": "Retrieves a user's trips and bookings history",
"security": [],
"produces": ["application/json"],
"responses": {
"200": { "description": "success"},
"401": { "description": "Unauthorized"},
"404": { "description": "Not found"},
"500": { "description": "Internal Server Error"}
}
}
},
"/requests/{request_id}": {
"get": {
"tags": [
Expand Down

0 comments on commit 1bb4c24

Please sign in to comment.