diff --git a/config/index.js b/config/index.js index ae93d8c..1295b2a 100644 --- a/config/index.js +++ b/config/index.js @@ -1,5 +1,7 @@ if (process.env.NODE_ENV === 'production') { module.exports = require('./prod.config.js'); +} else if (process.env.NODE_ENV === 'test') { + module.exports = require('./test.config.js'); } else { module.exports = require('./dev.config.js'); } diff --git a/config/test.config.js b/config/test.config.js new file mode 100644 index 0000000..3396a54 --- /dev/null +++ b/config/test.config.js @@ -0,0 +1,9 @@ +const SECRETS = require('./secrets.json'); // nodejs will auto read json + +module.exports = { + NODE_ENV: process.env.NODE_ENV || 'development', + HOST: process.env.HOST || 'http://localhost', + PORT: process.env.PORT || 8081, + DB_URL: `${SECRETS.mongodb_dev.db_url}test`, + GOOGLE_API_KEY: SECRETS.google_maps.api_key, +}; diff --git a/controllers/saved-pins-controller.js b/controllers/saved-pins-controller.js index 260a360..eb13f87 100644 --- a/controllers/saved-pins-controller.js +++ b/controllers/saved-pins-controller.js @@ -3,3 +3,26 @@ const SavedPins = require('../models/saved-pins'); /** * TODO - export functions to be used for completing requests in ../routes/search.js */ + +exports.getSavedPins = (appReq, appRes) => { + SavedPins.find().then((savedPins) => { + appRes.send({ savedPins }); + }, (e) => { + appRes.status(400).send(e); + }); +}; + +exports.postSavedPins = (appReq, appRes) => { + const savedPin = new SavedPins({ + lat: appReq.body.lat, + lng: appReq.body.lng, + place_id: appReq.body.place_id, + }); + + savedPin.save().then((pin) => { + appRes.send(pin); + }, (e) => { + appRes.status(400).send(e); + }); +}; + diff --git a/routes/search.js b/routes/search.js index 05bc488..3ae153d 100644 --- a/routes/search.js +++ b/routes/search.js @@ -17,4 +17,6 @@ router.get('/', (req, res) => { res.send('NOT IMPLEMENTED: Search View'); }); +router.get('/savedpins', savedPinsController.getSavedPins); +router.post('/savedpins', savedPinsController.postSavedPins); module.exports = router; diff --git a/tests/savedPins.js b/tests/savedPins.js new file mode 100644 index 0000000..e3e4c1d --- /dev/null +++ b/tests/savedPins.js @@ -0,0 +1,55 @@ +// api routes tests +const request = require('supertest'); + +const app = require('../app'); +const SavedPins = require('../models/saved-pins'); + +beforeEach((done) => { + SavedPins.remove({}).then(() => done()); +}); + +describe('Saved Pins Routes', () => { + it('should create new saved pin', (done) => { + const pin = new SavedPins({ + lat: 1, + lng: 2, + place_id: 'testing', + }); + + request(app) + .post('/search/savedpins') + .send(pin) + .expect(200) + .expect((res) => { + expect(res.body.lat).to.equal(pin.lat); + }) + .end((err, res) => { + if (err) { + return done(err); + } + + SavedPins.find().then((savedPins) => { + expect(savedPins.length).to.equal(1); + expect(savedPins[0].lat).to.equal(pin.lat); + done(); + }).catch(e => done(e)); + }); + }); + + it('should not create savedPin with invalid body data', (done) => { + request(app) + .post('/search/savedpins') + .send({}) + .expect(400) + .end((err, res) => { + if (err) { + return done(err); + } + + SavedPins.find().then((savedPins) => { + expect(savedPins.length).to.equal(0); + done(); + }).catch(e => done(e)); + }); + }); +});