From 6184fb5d2482f356b960eafbcb9194deeae22a79 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 15 Mar 2016 20:37:30 -0500 Subject: [PATCH] Added development controller, middleware, and initial tests --- .../POST-development_addHourglass.test.js | 35 ++++++++++++ .../POST-development_addTenGems.test.js | 35 ++++++++++++ website/src/controllers/api-v3/development.js | 53 +++++++++++++++++++ .../src/middlewares/api-v3/developmentMode.js | 12 +++++ 4 files changed, 135 insertions(+) create mode 100644 test/api/v3/integration/development/POST-development_addHourglass.test.js create mode 100644 test/api/v3/integration/development/POST-development_addTenGems.test.js create mode 100644 website/src/controllers/api-v3/development.js create mode 100644 website/src/middlewares/api-v3/developmentMode.js diff --git a/test/api/v3/integration/development/POST-development_addHourglass.test.js b/test/api/v3/integration/development/POST-development_addHourglass.test.js new file mode 100644 index 0000000000..6ef111c130 --- /dev/null +++ b/test/api/v3/integration/development/POST-development_addHourglass.test.js @@ -0,0 +1,35 @@ +import nconf from 'nconf'; +import { + generateUser, +} from '../../../../helpers/api-v3-integration.helper'; + +describe('POST /development/addHourglass', () => { + let userToGetHourGlass; + + before(async () => { + userToGetHourGlass = await generateUser(); + }); + + it('adds Hourglass to the current user', async () => { + await userToGetHourGlass.post('/development/addHourglass'); + + let userWithHourGlass = await userToGetHourGlass.get('/user'); + + expect(userWithHourGlass.purchased.plan.consecutive.trinkets).to.equal(1); + }); + + it('returns error when not in production mode', async () => { + nconf.set('IS_PROD', true); + + await expect(userToGetHourGlass.post('/development/addHourglass')) + .eventually.be.rejected.and.to.deep.equal({ + code: 404, + error: 'NotFound', + message: 'Not found.', + }); + }); + + after(() => { + nconf.set('IS_PROD', false); + }); +}); diff --git a/test/api/v3/integration/development/POST-development_addTenGems.test.js b/test/api/v3/integration/development/POST-development_addTenGems.test.js new file mode 100644 index 0000000000..82594c4d07 --- /dev/null +++ b/test/api/v3/integration/development/POST-development_addTenGems.test.js @@ -0,0 +1,35 @@ +import nconf from 'nconf'; +import { + generateUser, +} from '../../../../helpers/api-v3-integration.helper'; + +describe('POST /development/addTenGems', () => { + let userToGainTenGems; + + before(async () => { + userToGainTenGems = await generateUser(); + }); + + it('adds ten gems to the current user', async () => { + await userToGainTenGems.post('/development/addTenGems'); + + let userWithTenGems = await userToGainTenGems.get('/user'); + + expect(userWithTenGems.balance).to.equal(2.5); + }); + + it('returns error when not in production mode', async () => { + nconf.set('IS_PROD', true); + + await expect(userToGainTenGems.post('/development/addTenGems')) + .eventually.be.rejected.and.to.deep.equal({ + code: 404, + error: 'NotFound', + message: 'Not found.', + }); + }); + + after(() => { + nconf.set('IS_PROD', false); + }); +}); diff --git a/website/src/controllers/api-v3/development.js b/website/src/controllers/api-v3/development.js new file mode 100644 index 0000000000..321fe6ebf3 --- /dev/null +++ b/website/src/controllers/api-v3/development.js @@ -0,0 +1,53 @@ +import { authWithHeaders } from '../../middlewares/api-v3/auth'; +import cron from '../../middlewares/api-v3/cron'; +import checkForDevelopmentMode from '../../middlewares/api-v3/developmentMode'; + +let api = {}; + +/** + * @api {post} /development/addTenGems Add ten gems to the current user + * @apiVersion 3.0.0 + * @apiName AddTenGems + * @apiGroup Development + * + * @apiSuccess {} An empty Object + */ +api.addTenGems = { + method: 'POST', + url: '/development/addTenGems', + middlewares: [checkForDevelopmentMode, authWithHeaders(), cron], + async handler (req, res) { + let user = res.locals.user; + + user.balance += 2.5; + + await user.save(); + + res.respond(200, {}); + }, +}; + +/** + * @api {post} /development/addHourglass Add Hourglass to the current user + * @apiVersion 3.0.0 + * @apiName AddHourglass + * @apiGroup Development + * + * @apiSuccess {} An empty Object + */ +api.addHourglass = { + method: 'POST', + url: '/development/addHourglass', + middlewares: [checkForDevelopmentMode, authWithHeaders(), cron], + async handler (req, res) { + let user = res.locals.user; + + user.purchased.plan.consecutive.trinkets += 1; + + await user.save(); + + res.respond(200, {}); + }, +}; + +module.exports = api; diff --git a/website/src/middlewares/api-v3/developmentMode.js b/website/src/middlewares/api-v3/developmentMode.js new file mode 100644 index 0000000000..5c068df0ab --- /dev/null +++ b/website/src/middlewares/api-v3/developmentMode.js @@ -0,0 +1,12 @@ +import nconf from 'nconf'; +import { + NotFound, +} from '../../libs/api-v3/errors'; + +module.exports = function checkForDevelopmentMode (req, res, next) { + if (nconf.get('IS_PROD')) { + next(new NotFound()); + } else { + next(); + } +};