From f04e28abfe91948d41e4a7fc1ecb7723113f35ac Mon Sep 17 00:00:00 2001 From: mallek Date: Wed, 7 Feb 2018 23:19:48 -0700 Subject: [PATCH] Add test seed data, refactor tests to work with new jwt token --- config/test.config.js | 1 + controllers/saved-pins-controller.js | 4 +- tests/apiRoutes.js | 4 +- tests/savedPins.js | 52 ++++++++++++++------------ tests/seed/seed.js | 55 ++++++++++++++++++++++++++++ tests/server.test.js | 3 +- 6 files changed, 90 insertions(+), 29 deletions(-) create mode 100644 tests/seed/seed.js diff --git a/config/test.config.js b/config/test.config.js index de8a194..1473d48 100644 --- a/config/test.config.js +++ b/config/test.config.js @@ -6,4 +6,5 @@ module.exports = { PORT: process.env.PORT || 8081, DB_URL: SECRETS.mongodb_test.db_url, GOOGLE_API_KEY: SECRETS.google_maps.api_key, + JWT_KEY: SECRETS.jwt.key, }; diff --git a/controllers/saved-pins-controller.js b/controllers/saved-pins-controller.js index d97cd60..d5d026d 100644 --- a/controllers/saved-pins-controller.js +++ b/controllers/saved-pins-controller.js @@ -35,7 +35,7 @@ exports.getSavedPinsById = (appReq, appRes) => { SavedPins.findById(params.id).then((pin) => { // expect db id to be unique but just in case verifiy user._id - if (!pin || appReq.userId !== pin.user) { + if (!pin || appReq.userId !== pin.user.toString()) { return appRes.status(404).send(); } return appRes.send({ pin }); @@ -78,7 +78,7 @@ exports.postSavedPins = (appReq, appRes) => { * @apiError 500 {server error} */ exports.deleteSavedPins = (appReq, appRes) => { - SavedPins.remove({}).then(() => { + SavedPins.remove({ user: appReq.userId }).then(() => { appRes.status(200).send(); }).catch((e) => { appRes.status(500).send(e); diff --git a/tests/apiRoutes.js b/tests/apiRoutes.js index 2654084..8f3ba5f 100644 --- a/tests/apiRoutes.js +++ b/tests/apiRoutes.js @@ -4,11 +4,11 @@ const request = require('supertest'); const app = require('../app'); describe('API Routes', () => { - describe('GET /users/current', () => { + describe('GET /users/user', () => { it('does not send a user if not logged in', async () => { try { const res = await request(app) - .get('/users/current') + .get('/users/user') .expect(401); expect(res).to.be.an('object'); diff --git a/tests/savedPins.js b/tests/savedPins.js index df165b9..1a2535a 100644 --- a/tests/savedPins.js +++ b/tests/savedPins.js @@ -4,28 +4,22 @@ const { ObjectID } = require('mongodb'); const app = require('../app'); const SavedPins = require('../models/saved-pins'); +const { + pins, populatePins, users, populateUsers, +} = require('./seed/seed'); -const pin = new SavedPins({ - _id: new ObjectID(), - lat: 1, - lng: 2, - place_id: 'testing', -}); - -beforeEach((done) => { - SavedPins.remove({}).then(() => - SavedPins.insertMany(pin)).then(() => - done()); -}); +beforeEach(populateUsers); +beforeEach(populatePins); describe('POST /search/savedpins', () => { it('should create new saved pin', (done) => { request(app) .post('/search/savedpins') - .send(pin) + .set('x-access-token', users[0].tokens[0].token) + .send(pins[0]) .expect(200) .expect((res) => { - expect(res.body.pin.lat).to.equal(pin.lat); + expect(res.body.pin.lat).to.equal(pins[0].lat); }) .end((err, res) => { if (err) { @@ -33,8 +27,9 @@ describe('POST /search/savedpins', () => { } SavedPins.find().then((savedPins) => { - expect(savedPins.length).to.equal(2); - expect(savedPins[0].lat).to.equal(pin.lat); + expect(savedPins.length).to.equal(pins.length + 1); + expect(savedPins[0].lat).to.equal(pins[0].lat); + expect(savedPins[0].user._id).to.equal(pins[0].user._id); done(); }).catch(e => done(e)); }); @@ -43,6 +38,7 @@ describe('POST /search/savedpins', () => { it('should not create savedPin with invalid body data', (done) => { request(app) .post('/search/savedpins') + .set('x-access-token', users[0].tokens[0].token) .send({}) .expect(500) .end((err, res) => { @@ -51,7 +47,7 @@ describe('POST /search/savedpins', () => { } SavedPins.find().then((savedPins) => { - expect(savedPins.length).to.equal(1); + expect(savedPins.length).to.equal(pins.length); done(); }).catch(e => done(e)); }); @@ -61,10 +57,12 @@ describe('POST /search/savedpins', () => { describe('GET /search/savedpins', () => { it('should return savedpins doc', (done) => { request(app) - .get(`/search/savedpins/${pin._id.toHexString()}`) + .get('/search/savedpins/') + .set('x-access-token', users[0].tokens[0].token) .expect(200) .expect((res) => { - expect(res.body.pin.lat).to.equal(pin.lat); + expect(res.body.savedPins[0].lat).to.equal(pins[0].lat); + expect(res.body.savedPins.length).to.equal(1); }) .end(done); }); @@ -73,10 +71,11 @@ describe('GET /search/savedpins', () => { describe('GET /search/savedpins/:id', () => { it('should return savedpins doc', (done) => { request(app) - .get(`/search/savedpins/${pin._id.toHexString()}`) + .get(`/search/savedpins/${pins[0]._id.toHexString()}`) + .set('x-access-token', users[0].tokens[0].token) .expect(200) .expect((res) => { - expect(res.body.pin.lat).to.equal(pin.lat); + expect(res.body.pin.lat).to.equal(pins[0].lat); }) .end(done); }); @@ -86,6 +85,7 @@ describe('GET /search/savedpins/:id', () => { request(app) .get(`/search/savedpins/${hexId}`) + .set('x-access-token', users[0].tokens[0].token) .expect(404) .end(done); }); @@ -93,6 +93,7 @@ describe('GET /search/savedpins/:id', () => { it('should return 404 for non-object ids', (done) => { request(app) .get('/search/savedpins/123abc') + .set('x-access-token', users[0].tokens[0].token) .expect(404) .end(done); }); @@ -102,6 +103,7 @@ describe('DELETE /search/savedpins', () => { it('should remove all searchpins', (done) => { request(app) .delete('/search/savedpins') + .set('x-access-token', users[0].tokens[0].token) .expect(200) .end((err, res) => { if (err) { @@ -109,7 +111,7 @@ describe('DELETE /search/savedpins', () => { } SavedPins.find().then((allPins) => { - expect(allPins.length).to.equal(0); + expect(allPins.length).to.equal(pins.length - 1); done(); }); }); @@ -117,12 +119,12 @@ describe('DELETE /search/savedpins', () => { }); describe('DELETE /search/savedpins/:id', () => { - it('should remove a single searchpins', (done) => { - const hexId = pin._id.toHexString(); + const hexId = pins[0]._id.toHexString(); request(app) .delete(`/search/savedpins/${hexId}`) + .set('x-access-token', users[0].tokens[0].token) .expect(200) .expect((res) => { expect(res.body.pin._id).to.equal(hexId); @@ -144,6 +146,7 @@ describe('DELETE /search/savedpins/:id', () => { request(app) .delete(`/search/savedpins/${hexId}`) + .set('x-access-token', users[0].tokens[0].token) .expect(404) .end(done); }); @@ -151,6 +154,7 @@ describe('DELETE /search/savedpins/:id', () => { it('should return 404 if object id is invalid', (done) => { request(app) .delete('/search/savedpins/123abc') + .set('x-access-token', users[0].tokens[0].token) .expect(404) .end(done); }); diff --git a/tests/seed/seed.js b/tests/seed/seed.js new file mode 100644 index 0000000..8c13ad1 --- /dev/null +++ b/tests/seed/seed.js @@ -0,0 +1,55 @@ +const { ObjectID } = require('mongodb'); +const jwt = require('jsonwebtoken'); +const { JWT_KEY } = require('../../config'); + +const User = require('../../models/users'); +const SavedPins = require('../../models/saved-pins'); + +const userOneId = new ObjectID(); +const userTwoId = new ObjectID(); +const users = [{ + _id: userOneId, + name: 'mallek', + email: 'mallek@example.com', + password: 'userOnePass', + tokens: [{ + access: 'auth', + token: jwt.sign({ id: userOneId }, JWT_KEY).toString(), + }], +}, { + _id: userTwoId, + name: 'user', + email: 'user@example.com', + password: 'userTwoPass', +}]; + +const pins = [{ + _id: new ObjectID(), + lat: 1, + lng: 2, + place_id: 'testing pin1', + user: userOneId, +}, { + _id: new ObjectID(), + lat: 20, + lng: 30, + place_id: 'testing again', + user: userTwoId, +}]; + +const populatePins = (done) => { + SavedPins.remove({}).then(() => SavedPins.insertMany(pins)).then(() => done()); +}; + +const populateUsers = (done) => { + User.remove({}).then(() => { + const userOne = new User(users[0]).save(); + const userTwo = new User(users[1]).save(); + + return Promise.all([userOne, userTwo]); + }).then(() => done()); +}; + +module.exports = { + pins, populatePins, users, populateUsers, +}; diff --git a/tests/server.test.js b/tests/server.test.js index 0c067f2..85a66c0 100644 --- a/tests/server.test.js +++ b/tests/server.test.js @@ -1,4 +1,4 @@ -it('test runner should work', () => { +it('test runner should work', (done) => { const foo = 'bar'; const beverages = { tea: ['chai', 'matcha', 'oolong'] }; @@ -6,4 +6,5 @@ it('test runner should work', () => { expect(foo).to.equal('bar'); expect(foo).to.have.lengthOf(3); expect(beverages).to.have.property('tea').with.lengthOf(3); + done(); });