Skip to content

Commit

Permalink
ft(get user requests): create a route for getting user requests
Browse files Browse the repository at this point in the history
validate the if the token is valid
validate if the requests exists
  • Loading branch information
hezzie committed Nov 26, 2019
1 parent fe8689d commit 762feee
Show file tree
Hide file tree
Showing 11 changed files with 279 additions and 16 deletions.
47 changes: 45 additions & 2 deletions src/controllers/TripController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Customize from '../helpers/Customize';
import { tripRequests, users } from '../database/models';
import { tripRequests, users, trips } from '../database/models';
import ControllerHelper from '../helpers/ControllerHelper';
import emailHelper from '../helpers/EmailHelper';

Expand Down Expand Up @@ -52,7 +52,7 @@ class TripController {
* @static
* @param {object} req request object
* @param {object} res response object
* @memberof UserController
* @memberof TripController
* @returns {object} data
*/
static async approveTrip(req, res) {
Expand All @@ -69,6 +69,49 @@ class TripController {
return Customize.errorMessage(req, res, err.message, 500);
}
}

/**
* An admin should be able to get all the requests.
* @static
* @param {object} req request object
* @param {object} res response object
* @memberof TripController
* @returns {object} data
*/
static async getAllRequests(req, res) {
try {
const requests = await trips.findAll({
include: [{
model: tripRequests,
}],
});
return Customize.successMessage(req, res, 'succesfully fetched all requests', requests, 200);
} catch (err) {
return Customize.errorMessage(req, res, err.message, 500);
}
}

/**
* A user should be able to get all the requests he/she has made over time
* @static
* @param {object} req request object
* @param {object} res response object
* @memberof TripController
* @returns {object} data
*/
static async getUserRequests(req, res) {
try {
const requests = await trips.findAll({
include: [{
model: tripRequests,
where: { userId: req.user.id }
}],
});
return Customize.successMessage(req, res, 'succesfully fetched all user\'s requests', requests, 200);
} catch (err) {
return Customize.errorMessage(req, res, err.message, 500);
}
}
}

export default TripController;
38 changes: 38 additions & 0 deletions src/middlewares/Exists.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import DataEngine from './DataEngine';
import Customize from '../helpers/Customize';
import { tripRequests } from '../database/models';

/**
Expand All @@ -25,6 +26,43 @@ class Exists {
'The trip is either approved rejected or it doesn\'t exist'
);
}

/**
* check is the request exist
* @static
* @param {object} req request object
* @param {object} res response object
* @param {object} next next
* @memberof Exists
* @returns {object} data
*/
static async isUsersRequestExist(req, res, next) {
const allRequests = await tripRequests.findAll(
{ where: { userId: req.user.id }, raw: true }
);

if (allRequests.length > 0) {
return next();
}
return Customize.errorMessage(req, res, 'No request availlable', 404);
}

/**
* check is the request exist
* @static
* @param {object} req request object
* @param {object} res response object
* @param {object} next next
* @memberof Exists
* @returns {object} data
*/
static async isAllRequestExist(req, res, next) {
const userRequests = await tripRequests.findAll({ raw: true });
if (userRequests.length > 0) {
return next();
}
return res.status(404).json({ msg: 'You dont have any requests yet' });
}
}


Expand Down
7 changes: 6 additions & 1 deletion src/middlewares/ValidateTrip.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,12 @@ export default class ValidateTrip {
const userCitiesArr = [];

const AllCitiesArr = allCities.map((singleCity) => singleCity.id);
itinerary.forEach((singleCity) => userCitiesArr.push(singleCity.originId, singleCity.destinationId));
itinerary.forEach(
(singleCity) => userCitiesArr.push(
singleCity.originId,
singleCity.destinationId
)
);

const cityExist = userCitiesArr.every((val) => AllCitiesArr.indexOf(val) !== -1);

Expand Down
5 changes: 2 additions & 3 deletions src/middlewares/isManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,8 @@ const isManager = async (req, res, next) => {
roleId: 6,
}
});

if (!manager) { Customize.errorMessage(req, res, 'Unknown line manager', 404); }
next();
if (manager) { return next(); }
return Customize.errorMessage(req, res, 'Unknown line manager', 404);
};

export default isManager;
3 changes: 1 addition & 2 deletions src/middlewares/isUserVerified.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { users } from '../database/models';

const isUserVerified = async (req, res, next) => {
const { email } = req.user;
const { email } = req.user || req.body;
const isUserExist = await users.findOne({ where: { email, isVerified: true } });

if (!isUserExist) {
return res.status(401).json({ error: 'Your email is not verified, please verify your email first' });
}
Expand Down
3 changes: 2 additions & 1 deletion src/routes/api/authRoute.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import Middlewares from '../../middlewares/ForgotPasswordMiddlewares';
import AuthenticateToken from '../../helpers/AuthenticateToken';
import Conflict from '../../middlewares/Conflict';
import checkInputDataError from '../../middlewares/checkInputDataError';

import isUserVerified from '../../middlewares/isUserVerified';

const authRouter = express.Router();

Expand Down Expand Up @@ -82,6 +82,7 @@ authRouter
Validate.signinRules(),
checkInputDataError,
validateCredentials,
isUserVerified,
UserController.signin
);
/**
Expand Down
55 changes: 55 additions & 0 deletions src/routes/api/tripRoute.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import ValidateTrip from '../../middlewares/ValidateTrip';
import Validate from '../../middlewares/Validate';
import checkInputDataError from '../../middlewares/checkInputDataError';
import Exists from '../../middlewares/Exists';
import isUserVerified from '../../middlewares/isUserVerified';


const tripRouter = express.Router();
Expand Down Expand Up @@ -238,5 +239,59 @@ tripRouter.post('/twoWay',
* - 'returnDate'
*
*/
tripRouter.get(
'/all',
AuthenticateToken.verifyToken,
isUserVerified,
Exists.isAllRequestExist,
TripController.getAllRequests
);
/**
* @swagger
*
* /trips:
* get:
* summary: Available trip requests
* tags: [Trip]
* parameters:
* - name: token
* in: header
* description: enter token
* required: true
* schema:
* type: string
* responses:
* "200":
* description: Trip requests fetched successfuly
* "404":
* description: Trip requests are not found
*/

tripRouter.get(
'/',
AuthenticateToken.verifyToken,
isUserVerified,
Exists.isUsersRequestExist,
TripController.getUserRequests
);
/**
* @swagger
*
* /trips/:id:
* get:
* summary: Available trip requests
* tags: [Trip]
* parameters:
* - name: token
* in: header
* description: enter token
* required: true
* schema:
* type: string
* responses:
* "200":
* description: Trip requests fetched successfuly
* "404":
* description: Trip requests are not found
*/
export default tripRouter;
8 changes: 4 additions & 4 deletions src/tests/010-userTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ let token;
const { expect } = chai;

const {
usersSignin, unknownUserUpdate, invalidManager, userInvalidImage
unknownUserUpdate, invalidManager, userInvalidImage
} = mockData;
let unverifiedUserToken, verifiedUserToken, trueToken;

Expand All @@ -27,7 +27,7 @@ describe('Authentication test', () => {
});
});
it('Test verify email route', (done) => {
chai.request(app).get(`/api/v1/auth/verify-email/2/${token}`).end((err, res) => {
chai.request(app).get(`/api/v1/auth/verify-email/7/${token}`).end((err, res) => {
res.should.have.status(200);
res.body.should.be.an('object');
done();
Expand Down Expand Up @@ -191,8 +191,8 @@ describe('User profile page settings', () => {
});
before((done) => {
chai.request(app)
.post('/api/v1/auth/signin')
.send(usersSignin)
.post('/api/v1/auth/signup')
.send(mockData.usersUnverifiedSignup)
.end((err, res) => {
unverifiedUserToken = res.body.data;
done(err);
Expand Down
32 changes: 31 additions & 1 deletion src/tests/050-returnTripTests.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,36 @@ chai.use(chaiHttp);
const { expect } = chai;

let token;

describe('Get Unavallable requests', () => {
before((done) => {
chai.request(app)
.post('/api/v1/auth/signin')
.send(MockData.usersSignin)
.end((err, res) => {
token = res.body.data;
res.should.have.status(200);
done();
});
});
it('Should return a 404 not found error while fetching requests that do not exist', (done) => {
chai.request(app).get('/api/v1/trips/all')
.set('token', token)
.end((err, res) => {
res.should.have.status(404);
res.body.should.be.an('object');
done();
});
});
it('Should return a 404 not found error while fetching requests that do not exist', (done) => {
chai.request(app).get('/api/v1/trips/')
.set('token', token)
.end((err, res) => {
res.should.have.status(404);
res.body.should.be.an('object');
done();
});
});
});
describe('Return Trip Route Tests', () => {
before((done) => {
chai.request(app)
Expand All @@ -21,6 +50,7 @@ describe('Return Trip Route Tests', () => {
done();
});
});

it('it should create a new trip ', (done) => {
chai.request(app)
.post('/api/v1/trips/twoWay')
Expand Down
Loading

0 comments on commit 762feee

Please sign in to comment.