diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..6d505ad --- /dev/null +++ b/.eslintrc @@ -0,0 +1,41 @@ +{ +"rules": { +"no-console": 0, +"indent": [ +2, +2 +], +"quotes": [ +2, +"single" +], +"linebreak-style": [ +2, +"unix" +], +"semi": [ +2, +"always" +] +}, +"env": { +"es6": true, +"node": true, +"browser": true, +"mocha": true +}, +"globals": { +"describe": false, +"it": false, +"beforeEach": false, +"afterEach": false, +"before": false, +"after": false +}, +"ecmaFeatures": { +"modules": true, +"experimentalObjectRestSpread": true, +"impliedStrict": true +}, +"extends": "eslint:recommended" +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a833cdc --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +data +db diff --git a/README.md b/README.md index e850619..8b13789 100644 --- a/README.md +++ b/README.md @@ -1,20 +1 @@ -#REST API -##To Submit this Assignment - * fork this repository - * write all of your code in a folder containing your name - * push to your repository - * submit a pull request to this repository - * submit a link to your PR in canvas - -##Description -Create a single resource (like /penguins or /seals) REST API with Express. - -Write a full set of CRUD routes for your resource. You can persist it however you like for the sake of testing, we'll be connecting it to Mongo later in the week. - - -##Rubric -CRUD Routes: 4pts -Use of Express: 2pts -Tests: 2pts -Project Organization: 2pts diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..915d247 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,26 @@ +const gulp = require('gulp'); +const eslint = require('gulp-eslint'); +const mocha = require('gulp-mocha'); + +gulp.task('lint', () => { + gulp.src(['./*.js', './test/*.js']) + .pipe(eslint({ + env: {} + })) + .pipe(eslint.format()); +}); + +gulp.task('mocha', () => { + return gulp.src('./test/*.js', { + read: false + }) + .pipe(mocha({ + reporter: 'nyan' + })); +}); + +gulp.task('watch', () => { + gulp.watch(['./*.js', './test/*.js' ], ['mocha', 'lint']); +}); + +gulp.task('default', ['mocha', 'lint', 'watch']); diff --git a/lib/basic_http.js b/lib/basic_http.js new file mode 100644 index 0000000..dc924d4 --- /dev/null +++ b/lib/basic_http.js @@ -0,0 +1,21 @@ +'use strict'; + +module.exports = function (req, res, next) { + let basicAuth = req.headers.authorization; + let authString = basicAuth.split(' ').pop(); + let authBuff = new Buffer(authString, 'base64'); + let asciiAuth = authBuff.toString(); + let authArray = asciiAuth.split(':'); + authBuff.fill(0); + + req.auth = { + username: authArray[0], + password: authArray[1] + }; + + if(!req.auth.username || !req.auth.password) { + return next(new Error ('Username or Password missing')); + } + + next(); +}; diff --git a/lib/error_handling.js b/lib/error_handling.js new file mode 100644 index 0000000..b15db97 --- /dev/null +++ b/lib/error_handling.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function(err, req, res) { + res.status(500).json({message: err.message}); +}; diff --git a/lib/jwt_auth.js b/lib/jwt_auth.js new file mode 100644 index 0000000..b821b24 --- /dev/null +++ b/lib/jwt_auth.js @@ -0,0 +1,25 @@ +'use strict'; + +const jwt = require('jsonwebtoken'); +const User = require('../model/user'); +const secret = process.env.SECRET || 'changeme'; + +module.exports = function (req, res, next) { + let token = req.body.token || req.headers.token; + let tokenErr = new Error('Authorization Failure'); + let decodedToken; + + if (!token) return next(tokenErr); + + try { + decodedToken = jwt.verify(token, secret); + } catch(e) { + return next(tokenErr); + } + + User.findOne({_id:decodedToken._id}, (err, user) => { + if (!user || err) return next(tokenErr); + req.user = user; + next(); + }); +}; diff --git a/model/barca_Player.js b/model/barca_Player.js new file mode 100644 index 0000000..b44d552 --- /dev/null +++ b/model/barca_Player.js @@ -0,0 +1,12 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const BarcaPlayer = new mongoose.Schema({ + name: String, + position: String, + number: Number, + goals: Number +}); + +module.exports = mongoose.model('barca', BarcaPlayer); diff --git a/model/man_United_Player.js b/model/man_United_Player.js new file mode 100644 index 0000000..4850abb --- /dev/null +++ b/model/man_United_Player.js @@ -0,0 +1,12 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const ManUnitedPlayer = new mongoose.Schema({ + name: String, + position: String, + number: Number, + goals: Number +}); + +module.exports = mongoose.model('manUnitedPlayer', ManUnitedPlayer); diff --git a/model/user.js b/model/user.js new file mode 100644 index 0000000..992a041 --- /dev/null +++ b/model/user.js @@ -0,0 +1,25 @@ +'use strict'; + +const mongoose = require('mongoose'); +const bcrypt = require('bcrypt'); +const secret = process.env.SECRET || 'changeme'; +const jwt = require('jsonwebtoken'); + +const User = new mongoose.Schema({ + username: {type: String, required: true}, + password: {type: String, required: true} +}); + +User.methods.hashPassword = function() { + return bcrypt.hashSync(this.password, 8); +}; + +User.methods.comparePassword = function(password) { + return bcrypt.compareSync(password, this.password); +}; + +User.methods.generateToken = function() { + return jwt.sign({_id: this._id}, secret); +}; + +module.exports = mongoose.model('user', User); diff --git a/npm-debug.log b/npm-debug.log new file mode 100644 index 0000000..5e0f2d4 --- /dev/null +++ b/npm-debug.log @@ -0,0 +1,43 @@ +0 info it worked if it ends with ok +1 verbose cli [ '/Users/drewferris/.node/bin/node', +1 verbose cli '/Users/drewferris/.node/bin/npm', +1 verbose cli 'run', +1 verbose cli 'lint' ] +2 info using npm@2.15.1 +3 info using node@v4.4.3 +4 verbose run-script [ 'prelint', 'lint', 'postlint' ] +5 info prelint man-united@1.0.0 +6 info lint man-united@1.0.0 +7 verbose unsafe-perm in lifecycle true +8 info man-united@1.0.0 Failed to exec lint script +9 verbose stack Error: man-united@1.0.0 lint: `./node_modules/eslint/bin/eslint.js *` +9 verbose stack Exit status 1 +9 verbose stack at EventEmitter. (/Users/drewferris/.node/lib/node_modules/npm/lib/utils/lifecycle.js:217:16) +9 verbose stack at emitTwo (events.js:87:13) +9 verbose stack at EventEmitter.emit (events.js:172:7) +9 verbose stack at ChildProcess. (/Users/drewferris/.node/lib/node_modules/npm/lib/utils/spawn.js:24:14) +9 verbose stack at emitTwo (events.js:87:13) +9 verbose stack at ChildProcess.emit (events.js:172:7) +9 verbose stack at maybeClose (internal/child_process.js:827:16) +9 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5) +10 verbose pkgid man-united@1.0.0 +11 verbose cwd /Users/drewferris/401/my_assignmnents/drew_rest_api +12 error Darwin 14.5.0 +13 error argv "/Users/drewferris/.node/bin/node" "/Users/drewferris/.node/bin/npm" "run" "lint" +14 error node v4.4.3 +15 error npm v2.15.1 +16 error code ELIFECYCLE +17 error man-united@1.0.0 lint: `./node_modules/eslint/bin/eslint.js *` +17 error Exit status 1 +18 error Failed at the man-united@1.0.0 lint script './node_modules/eslint/bin/eslint.js *'. +18 error This is most likely a problem with the man-united package, +18 error not with npm itself. +18 error Tell the author that this fails on your system: +18 error ./node_modules/eslint/bin/eslint.js * +18 error You can get information on how to open an issue for this project with: +18 error npm bugs man-united +18 error Or if that isn't available, you can get their info via: +18 error +18 error npm owner ls man-united +18 error There is likely additional logging output above. +19 verbose exit [ 1, true ] diff --git a/package.json b/package.json new file mode 100644 index 0000000..020872a --- /dev/null +++ b/package.json @@ -0,0 +1,45 @@ +{ + "name": "man-united", + "version": "1.0.0", + "description": "Class Projest- Router", + "main": "index.js", + "directories": { + "test": "mocha" + }, + "scripts": { + "test": "./node_modules/mocha/bin/mocha", + "start": "node server.js", + "lint": "./node_modules/eslint/bin/eslint.js *" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/drewferris/man-united-router.git" + }, + "keywords": [ + "router", + "server" + ], + "author": "Drew Ferris", + "license": "ISC", + "bugs": { + "url": "https://github.com/drewferris/man-united-router/issues" + }, + "homepage": "https://github.com/drewferris/man-united-router#readme", + "devDependencies": { + "chai": "^3.5.0", + "chai-http": "^2.0.1", + "gulp": "^3.9.1", + "gulp-eslint": "^2.0.0", + "gulp-mocha": "^2.2.0", + "gulp-watch": "^4.3.5", + "mocha": "^2.4.5", + "mongoose": "^4.4.19", + "morgan": "^1.7.0" + }, + "dependencies": { + "bcrypt": "^0.8.6", + "body-parser": "^1.15.1", + "express": "^4.13.4", + "jsonwebtoken": "^7.0.0" + } +} diff --git a/routes/auth_routes.js b/routes/auth_routes.js new file mode 100644 index 0000000..b51e53f --- /dev/null +++ b/routes/auth_routes.js @@ -0,0 +1,31 @@ +'use strict'; + +const express = require('express'); +const bodyParser = require('body-parser').json(); +const User = require('../model/user'); +const basicHTTP = require('../lib/basic_http'); + +const router = module.exports = exports = express.Router(); + +router.post('/signup', bodyParser, (req, res, next) => { + let newUser = new User(req.body); + let hashedPassword = newUser.hashPassword(); + newUser.password = hashedPassword; + req.body.password = null; + User.findOne({username: req.body.username}, (err, user) => { + if(err || user) return next(new Error('could not create user')); + newUser.save((err, user) => { + if (err) return next(new Error('could not create user')); + res.json({token: user.generateToken()}); + }); + }); +}); + +router.get('/login', basicHTTP, (req, res, next) => { + User.findOne({username: req.auth.username}, (err, user) => { + if(err || !user) return next(new Error('Could not login')); + if (!user.comparePassword(req.auth.password)) return next('Could not sign in'); + + res.json({token: user.generateToken()}); + }); +}); diff --git a/routes/barca_routes.js b/routes/barca_routes.js new file mode 100644 index 0000000..594a078 --- /dev/null +++ b/routes/barca_routes.js @@ -0,0 +1,41 @@ +'use strict'; + +const express = require('express'); +const bodyParser = require('body-parser').json(); +const BarcaPlayer = require('../model/barca_Player'); + +const router = module.exports = exports = express.Router(); + +router.get('/', (req, res) => { + BarcaPlayer.find({}, (err, data) => { + if(err) return res.json({ + message: err.message + }); + res.json(data); + }); +}); + +router.post('/', bodyParser, (req, res) => { + let newBarcaPlayer = new BarcaPlayer(req.body); + newBarcaPlayer.save((err, data) => { + if(err) return res.json({message: err.message}); + res.json(data); + }); +}); + +router.put('/', bodyParser, (req, res, next) => { + BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err) => { + if(err) return next(err); + let message = 'successfully updated'; + res.json({message}); + }); +}); + +router.delete('/:id', bodyParser, (req, res, next) => { + let _id = req.params.id; + BarcaPlayer.findOneAndRemove({_id}, null, (err) => { + if(err) return next(err); + let message = 'successfully deleted'; + res.json({message}); + }); +}); diff --git a/routes/compare_route.js b/routes/compare_route.js new file mode 100644 index 0000000..2102c7b --- /dev/null +++ b/routes/compare_route.js @@ -0,0 +1,36 @@ +'use strict'; + +const express = require('express'); +const BarcaPlayer = require('../model/barca_Player'); +const ManUnitedPlayer = require('../model/man_United_Player'); + +const router = module.exports = exports = express.Router(); + +router.get('/mostGoals', (req, res, next) => { + let teamGoalArray = []; + + ManUnitedPlayer.find({}, (err, player)=>{ + if (err) return next(err); + let totalManUGoalsScored = player.reduce((acc, player) => { + return acc += player.goals; + }, 0); + console.log(totalManUGoalsScored); + teamGoalArray.push(totalManUGoalsScored); + }); + BarcaPlayer.find({}, (err, player)=>{ + if (err) return next(err); + let totalBarcaGoalsScored = player.reduce((acc, player) => { + return acc += player.goals; + }, 0); + teamGoalArray.push(totalBarcaGoalsScored); + + if (teamGoalArray[1] > teamGoalArray[0]) { + res.json('Barcalona players scored ' + teamGoalArray[1] + ' goals, which is more than Man United Players.'); + } else if (teamGoalArray[1] < teamGoalArray[0]) { + res.json('Man United players scored ' + teamGoalArray[0] + ' goals, which is more than Barcalona Players.'); + } else { + res.json('They scored the same amount.'); + } + }); + +}); diff --git a/routes/man_united_routes.js b/routes/man_united_routes.js new file mode 100644 index 0000000..c66948f --- /dev/null +++ b/routes/man_united_routes.js @@ -0,0 +1,44 @@ +'use strict'; + +const express = require('express'); +const bodyParser = require('body-parser').json(); +const ManUnitedPlayer = require('../model/man_United_Player'); + +const router = module.exports = exports = express.Router(); + +router.get('/', (req, res) => { + ManUnitedPlayer.find({}, (err,data) => { + if(err) return res.json({ + message: err.message + }); + res.json(data); + }); +}); + +router.post('/', bodyParser, (req, res) => { + let newManUnitedPlayer = new ManUnitedPlayer(req.body); + newManUnitedPlayer.save((err, data) => { + if(err) return res.json({ + message: err.message + }); + res.json(data); + }); +}); + +router.put('/', bodyParser, (req, res, next) => { + let _id = req.body._id; + ManUnitedPlayer.findOneAndUpdate({_id}, req.body, (err) => { + if(err) return next(err); + let message = 'successfully updated'; + res.json({message}); + }); +}); + +router.delete('/:id', bodyParser, (req, res, next) => { + let _id = req.params.id; + ManUnitedPlayer.findOneAndRemove({_id}, null, (err) => { + if(err) return next(err); + let message = 'successfully deleted'; + res.json({message}); + }); +}); diff --git a/schema/barca_Player.js b/schema/barca_Player.js new file mode 100644 index 0000000..b44d552 --- /dev/null +++ b/schema/barca_Player.js @@ -0,0 +1,12 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const BarcaPlayer = new mongoose.Schema({ + name: String, + position: String, + number: Number, + goals: Number +}); + +module.exports = mongoose.model('barca', BarcaPlayer); diff --git a/schema/man_United_Player.js b/schema/man_United_Player.js new file mode 100644 index 0000000..4850abb --- /dev/null +++ b/schema/man_United_Player.js @@ -0,0 +1,12 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const ManUnitedPlayer = new mongoose.Schema({ + name: String, + position: String, + number: Number, + goals: Number +}); + +module.exports = mongoose.model('manUnitedPlayer', ManUnitedPlayer); diff --git a/schema/user.js b/schema/user.js new file mode 100644 index 0000000..bc90131 --- /dev/null +++ b/schema/user.js @@ -0,0 +1,19 @@ +'use strict'; + +const mongoose = require('mongoose'); +const bcrypt = require('bcrypt'); + +const User = new mongoose.Schema({ + username: {type: String, required: true}, + password: {type: String, required: true} +}); + +User.methods.hashPassword = function() { + return bcrypt.hashSync(this.password, 8); +}; + +User.methods.comparePassword = function(password) { + return bcrypt.compareSync(password, this.password); +}; + +module.exports = mongoose.model('user', User); diff --git a/server.js b/server.js new file mode 100644 index 0000000..02347b3 --- /dev/null +++ b/server.js @@ -0,0 +1,42 @@ +'use strict'; + +const express = require('express'); +const app = express(); +const mongoose = require('mongoose'); +const morgan = require('morgan'); +const errorHandler =require('./lib/error_handling'); +const bodyParser = require('body-parser').json(); +const jwtAuth = require('./lib/jwt_auth'); + +const dbPort = process.env.MONGOLAB_URI || 'mongodb://localhost/dev_db'; + +app.use(morgan('dev')); + +mongoose.connect(dbPort); + +const manUnitedRouter = require('./routes/man_united_routes'); +const barcaRouter = require('./routes/barca_routes'); +const compareRouter = require('./routes/compare_route'); +const authRouter = require('./routes/auth_routes'); + +app.use('/manUnited', manUnitedRouter); +app.use('/barca', barcaRouter); +app.use('/compare', compareRouter); +app.use('/auth', authRouter); + +app.get('/test', (req, res) => { + let message = 'don\t need a token'; + res.json({message}); +}); + +app.post('/test', bodyParser, jwtAuth, (req, res) => { + res.json({message: 'need a token', user: req.user}); +}); + +app.use((err, req, res) => { + res.status(500).json({message: err.message}); +}); + +app.use(errorHandler); + +app.listen(6969, () => console.log('up on 6969 baby, server way up')); diff --git a/test/auth_route_test.js b/test/auth_route_test.js new file mode 100644 index 0000000..970182d --- /dev/null +++ b/test/auth_route_test.js @@ -0,0 +1,69 @@ + +'use strict'; + +const chai = require('chai'); +const chaiHTTP = require('chai-http'); +const User = require('../model/user'); +const mongoose = require('mongoose'); +chai.use(chaiHTTP); +const jwt = require('jsonwebtoken'); + +const expect = chai.expect; +const request = chai.request; + +const secret = process.env.SECRET || 'changeme'; +const dbPort = process.env.MONGOLAB_URI; +process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; +require('../server'); + +describe('Authorization router tests', () => { + + let testUser; + beforeEach((done) => { + let newUser = new User({ + username: 'testuser', + password: '$2a$08$tExN9A1AEkj.V9ea5IMdPOyU6haLngPQgnsmpdIUce14Vk.3cSTqe' + }); + newUser.save((err, user) => { + testUser = user; + done(); + }); + }); + + after((done) => { + process.env.MONGOLAB_URI = dbPort; + mongoose.connection.db.dropDatabase(() => { + done(); + }); + }); + + + it('Should login a user', (done) => { + request('localhost:6969') + .get('/auth/login') + .auth('testuser', 'test') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.token).to.eql(jwt.sign({ + _id: testUser._id + }, secret)); + done(); + }); + }); + + it('Should sign up a new user', (done) => { + request('localhost:6969') + .post('/auth/signup') + .set('Content-Type', 'application/json') + .send({username: 'testy', password: 'test'}) + .end((err, res) => {User.find({username: 'testy'}, (err, user) => { + if (err) return err; + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.token).to.eql(jwt.sign({_id: user[0]._id}, secret)); + done(); + }); + }); + }); +}); diff --git a/test/rest_api_test.js b/test/rest_api_test.js new file mode 100644 index 0000000..aed75e3 --- /dev/null +++ b/test/rest_api_test.js @@ -0,0 +1,155 @@ +'use strict'; + +const chai = require('chai'); +const chaiHTTP = require('chai-http'); +const ManUnitedPlayer = require('../model/man_United_Player'); +const BarcaPlayer = require('../model/barca_Player'); +const mongoose = require('mongoose'); +chai.use(chaiHTTP); + +const expect = chai.expect; +const request = chai.request; +const dbPort = process.env.MONGOLAB_URI; +process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; +require('../server'); + +describe('Router tests', () => { + + after((done) => { + process.env.MONGOLAB_URI = dbPort; + mongoose.connection.db.dropDatabase(() => { + done(); + }); + }); + describe('Man United Tests', () => { + it('should get a list of Man United players', (done) => { + request('localhost:6969') + .get('/manUnited') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(Array.isArray(res.body)).to.eql(true); + done(); + }); + }); + it('Should create a Man United player', (done) => { + request('localhost:6969') + .post('/manUnited') + .send({name: 'test player', goals: 40}) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.name).to.eql('test player'); + done(); + }); + }); + + describe('Man United tests that need data', () => { + let testManUPlayer; + beforeEach((done) => { + let newManUPlayer = new ManUnitedPlayer({name: 'test', goals:20}); + newManUPlayer.save((err, player) => { + testManUPlayer = player; + done(); + }); + }); + + it('Should update a Man U player', (done) => { + testManUPlayer.name = 'updated'; + request('localhost:6969') + .put('/manUnited') + .send(testManUPlayer) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('successfully updated'); + done(); + }); + }); + + it('Should delete a Man U player', (done) => { + request('localhost:6969') + .delete('/manUnited/' + testManUPlayer.id) + .end((err,res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('successfully deleted'); + done(); + }); + }); + }); + }); + + describe('Barca Tests', () => { + it('should get a list of Barca players', (done) => { + request('localhost:6969') + .get('/barca') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(Array.isArray(res.body)).to.eql(true); + done(); + }); + }); + it('Should create a Barca player', (done) => { + request('localhost:6969') + .post('/barca') + .send({name: 'test player', goals: 100}) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.name).to. eql('test player'); + done(); + }); + }); + + describe('Barca tests that need data', () => { + let testBarcaPlayer; + beforeEach((done) => { + let newBarcaPlayer = new BarcaPlayer({name: 'test', goals: 100}); + newBarcaPlayer.save((err, player) => { + testBarcaPlayer = player; + done(); + }); + }); + + it('Should update a Barca player', (done) => { + testBarcaPlayer.name = 'updated'; + request('localhost:6969') + .put('/barca') + .send(testBarcaPlayer) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('successfully updated'); + done(); + }); + }); + + it('Should delete a Barca player', (done) => { + request('localhost:6969') + .delete('/barca/' + testBarcaPlayer.id) + .end((err,res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('successfully deleted'); + done(); + }); + }); + }); + }); + + describe('Compare tests', () => { + + it('Should compare total goals of each team', (done) => { + request('localhost:6969') + .get('/compare/mostGoals') + .end((err,res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body).to.eql('Barcalona players scored 200 goals, which is more than Man United Players.'); + done(); + }); + }); + }); +}); diff --git a/test/token_tests.js b/test/token_tests.js new file mode 100644 index 0000000..8c26f48 --- /dev/null +++ b/test/token_tests.js @@ -0,0 +1,32 @@ +'use strict'; + +const chai = require('chai'); +const chaiHTTP = require('chai-http'); +const mongoose = require('mongoose'); +chai.use(chaiHTTP); + +const expect = chai.expect; +const request = chai.request; +const dbPort = process.env.MONGOLAB_URI; +process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; +require('../server'); + +describe('Token tests', () => { + + after((done) => { + process.env.MONGOLAB_URI = dbPort; + mongoose.connection.db.dropDatabase(() => { + done(); + }); + }); + it('Should do a get test route', (done) => { + request('localhost:6969') + .get('/test') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('don\t need a token'); + done(); + }); + }); +});