Skip to content

Commit 6f9bb32

Browse files
Andela DeveloperAndela Developer
Andela Developer
authored and
Andela Developer
committed
feature(testing routes): routes
- add document routes for getting a user document - add route for deleting user document [Finishes #149632847]
1 parent 2284755 commit 6f9bb32

18 files changed

+654
-11
lines changed

.sequelizerc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const path = require('path');
22

33
module.exports = {
4-
"config": path.resolve('./server/config', 'config.json'),
4+
"config": path.resolve('./server/config', 'config.js'),
55
"models-path": path.resolve('./server/models'),
66
"seeders-path": path.resolve('./server/seeders'),
77
"migrations-path": path.resolve('./server/migrations')

dist/gulpfile.babel.js

+11
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ var _gulp = require('gulp');
44

55
var _gulp2 = _interopRequireDefault(_gulp);
66

7+
var _gulpMocha = require('gulp-mocha');
8+
9+
var _gulpMocha2 = _interopRequireDefault(_gulpMocha);
10+
711
var _gulpLoadPlugins = require('gulp-load-plugins');
812

913
var _gulpLoadPlugins2 = _interopRequireDefault(_gulpLoadPlugins);
@@ -26,6 +30,12 @@ _gulp2.default.task('babel', function () {
2630
return _gulp2.default.src(paths.js, { base: '.' }).pipe(plugins.babel()).pipe(_gulp2.default.dest('dist'));
2731
});
2832

33+
_gulp2.default.task('mochaTest', function () {
34+
_gulp2.default.src(['dist/server/test/**/*.js']).pipe((0, _gulpMocha2.default)({
35+
reporter: 'spec'
36+
}));
37+
});
38+
2939
// Start server with restart on file change events
3040
_gulp2.default.task('nodemon', ['babel'], function () {
3141
return plugins.nodemon({
@@ -36,4 +46,5 @@ _gulp2.default.task('nodemon', ['babel'], function () {
3646
});
3747
});
3848

49+
_gulp2.default.task('test', ['mochaTest']);
3950
_gulp2.default.task('default', ['nodemon']);

dist/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
88

99
var port = process.env.PORT || 3000;
1010

11-
_express2.default.listen(port, function () {
11+
module.exports = _express2.default.listen(port, function () {
1212
console.log('API Server started and listening on port 3000');
1313
});

dist/server/controllers/roles.js

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
'use strict';
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
var models = require('../models');
7+
8+
var Role = models.Role;
9+
10+
/**
11+
* Creates a new Role.
12+
* @param {object} req - role to be created
13+
* @param {object} res - new created role
14+
* @returns {object} - newly created role
15+
*/
16+
function createRole(req, res) {
17+
req.check('title', 'Title is required').notEmpty();
18+
19+
var errors = req.validationErrors();
20+
if (errors) {
21+
res.status(400).json({ errors: errors });
22+
} else {
23+
Role.findAll({
24+
where: { title: req.body.title }
25+
}).then(function (err, existingRole) {
26+
if (!existingRole) {
27+
Role.create({
28+
title: req.body.title
29+
}).then(function (role) {
30+
res.status(201).send({
31+
message: 'Role successfully created',
32+
role: role
33+
});
34+
}).catch(function (error) {
35+
res.json(error.errors);
36+
});
37+
}
38+
}).catch(function (error) {
39+
return res.json(error);
40+
});
41+
}
42+
}
43+
44+
/**
45+
* Get all roles.
46+
* @param {void} req - no request body attached
47+
* @param {array} res - an array of roles and their id
48+
* @returns {array} array of roles
49+
*/
50+
function getRoles(req, res) {
51+
return Role.findAll().then(function (role) {
52+
return res.status(200).json(role);
53+
}).catch(function (error) {
54+
return res.json(error);
55+
});
56+
}
57+
58+
/**
59+
* Find roles by Id.
60+
* @param {number} req - requested role
61+
* @param {object} res - role found by id
62+
* @returns {object} - role found by id
63+
*/
64+
function findRole(req, res) {
65+
return Role.findById(req.params.id).then(function (role) {
66+
if (!role) {
67+
return res.status(404).json({
68+
message: 'Role not found'
69+
});
70+
}
71+
res.status(200).json(role);
72+
}).catch(function (error) {
73+
return res.status(400).json(error);
74+
});
75+
}
76+
77+
/**
78+
* Update role.
79+
* @param {number} req - requested role by id
80+
* @param {object} res - updated role
81+
* @returns {object} - updated role status
82+
*/
83+
function updateRole(req, res) {
84+
if (req.decoded.roleId !== 1) {
85+
return res.status(401).json({ message: 'You are not authorized to access the role' });
86+
}
87+
return Role.findById(req.params.id).then(function (role) {
88+
if (!role) {
89+
return res.status(404).json({
90+
message: 'Role not found'
91+
});
92+
}
93+
return role.update({
94+
title: req.body.title || role.title
95+
}).then(function () {
96+
return res.status(200).json({
97+
message: 'Role updated successfully',
98+
role: role
99+
});
100+
}).catch(function (error) {
101+
return res.status(400).json(error);
102+
});
103+
}).catch(function (error) {
104+
return res.status(400).json(error);
105+
});
106+
}
107+
108+
/**
109+
* Delete roles by Id.
110+
* @param {number} req - role to be deleted by id
111+
* @param {object} res - deleted role
112+
* @returns {object} - message
113+
*/
114+
function deleteRole(req, res) {
115+
if (req.decoded.roleId !== 1) {
116+
return res.status(401).json({ message: 'You are not authorized to access the role' });
117+
}
118+
return Role.findById(req.params.id).then(function (role) {
119+
if (!role) {
120+
res.status(404).json({
121+
message: 'Role not found'
122+
});
123+
}
124+
return role.destroy().then(function () {
125+
return res.status(204).json({
126+
message: 'Role deleted successfully'
127+
});
128+
}).catch(function (error) {
129+
return res.status(400).send(error);
130+
});
131+
}).catch(function (error) {
132+
return res.json(error);
133+
});
134+
}
135+
136+
exports.default = { createRole: createRole, getRoles: getRoles, findRole: findRole, updateRole: updateRole, deleteRole: deleteRole };

dist/server/routes/roles.js

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
'use strict';
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
7+
var _express = require('express');
8+
9+
var _express2 = _interopRequireDefault(_express);
10+
11+
var _roles = require('../controllers/roles');
12+
13+
var _roles2 = _interopRequireDefault(_roles);
14+
15+
var _auth = require('../middlewares/auth');
16+
17+
var _auth2 = _interopRequireDefault(_auth);
18+
19+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20+
21+
var router = _express2.default.Router();
22+
23+
router.route('/')
24+
/** GET /api/roles - Get list of roles */
25+
.get(_auth2.default.verifyToken, _auth2.default.adminAccess, _roles2.default.getRoles)
26+
27+
/** POST /api/roles - Create roles */
28+
.post(_auth2.default.verifyToken, _auth2.default.adminAccess, _roles2.default.createRole);
29+
30+
router.route('/:id')
31+
/** GET /api/users/roles - Find roles */
32+
.get(_auth2.default.verifyToken, _auth2.default.adminAccess, _roles2.default.findRole)
33+
34+
/** PUT /api/users/id - update roles */
35+
.put(_auth2.default.verifyToken, _auth2.default.adminAccess, _roles2.default.updateRole)
36+
37+
/** DELETE /api/users/id - delete roles */
38+
.delete(_auth2.default.verifyToken, _auth2.default.adminAccess, _roles2.default.deleteRole);
39+
40+
exports.default = router;

dist/server/test/index.spec.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
'use strict';
2+
3+
process.env.NODE_ENV = 'test';
4+
var chai = require('chai');
5+
var chaiHttp = require('chai-http');
6+
var server = require('../../index');
7+
8+
var should = chai.should();
9+
10+
chai.use(chaiHttp);

gulpfile.babel.js

+9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import gulp from 'gulp';
2+
import mocha from 'gulp-mocha';
23

34
import loadPlugins from 'gulp-load-plugins';
45
import path from 'path';
@@ -17,6 +18,13 @@ gulp.task('babel', () =>
1718
.pipe(gulp.dest('dist'))
1819
);
1920

21+
gulp.task('mochaTest', () => {
22+
gulp.src(['dist/server/test/**/*.js'])
23+
.pipe(mocha({
24+
reporter: 'spec',
25+
}));
26+
});
27+
2028
// Start server with restart on file change events
2129
gulp.task('nodemon', ['babel'], () =>
2230
plugins.nodemon({
@@ -27,4 +35,5 @@ gulp.task('nodemon', ['babel'], () =>
2735
})
2836
);
2937

38+
gulp.task('test', ['mochaTest']);
3039
gulp.task('default', ['nodemon']);

index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ import app from './server/config/express';
22

33
const port = process.env.PORT || 3000;
44

5-
app.listen(port, () => {
5+
module.exports = app.listen(port, () => {
66
console.log('API Server started and listening on port 3000');
77
});

package.json

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
"name": "document-manager",
33
"version": "1.0.0",
44
"description": "",
5-
"main": "server/index.js",
5+
"main": "index.js",
66
"scripts": {
77
"start": "node node_modules/gulp/bin/gulp",
8-
"test": "echo \"Error: no test specified\" && exit 1",
8+
"test": "node node_modules/gulp/bin/gulp test",
99
"postinstall": "node node_modules/gulp/bin/gulp production"
1010
},
1111
"repository": {
@@ -35,7 +35,9 @@
3535
"gulp-babel": "^6.1.2",
3636
"gulp-load-plugins": "^1.5.0",
3737
"gulp-nodemon": "^2.2.1",
38+
"gulp-mocha": "^4.3.1",
3839
"jsonwebtoken": "^7.4.1",
40+
"mocha": "^3.4.2",
3941
"morgan": "^1.8.2",
4042
"pg": "^6.4.0",
4143
"pg-hstore": "^2.3.2",
@@ -45,12 +47,16 @@
4547
"devDependencies": {
4648
"babel-core": "^6.25.0",
4749
"babel-preset-es2015": "^6.24.1",
50+
"chai": "^4.1.0",
51+
"chai-http": "^3.0.0",
4852
"eslint": "^3.19.0",
4953
"eslint-config-airbnb": "^15.0.2",
5054
"eslint-plugin-import": "^2.7.0",
5155
"gulp": "^3.9.1",
5256
"gulp-babel": "^6.1.2",
5357
"gulp-load-plugins": "^1.5.0",
54-
"gulp-nodemon": "^2.2.1"
58+
"gulp-mocha": "^4.3.1",
59+
"gulp-nodemon": "^2.2.1",
60+
"mocha": "^3.4.2"
5561
}
5662
}

0 commit comments

Comments
 (0)