From dec960b1f55739bcc8a6a8139ede0cb320a5ac95 Mon Sep 17 00:00:00 2001 From: Kelly J Andrews Date: Mon, 3 Apr 2017 12:41:23 -0400 Subject: [PATCH] added deployment, fixed various api issues --- .gitignore | 2 ++ codeship-services.yml | 5 +++++ codeship-steps.yml | 4 ++++ package.json | 5 +++-- src/__tests__/server.spec.js | 42 ++++++++++++++++++------------------ src/index.js | 2 +- src/server.js | 4 ++-- src/todos/model.js | 2 +- src/todos/routes.js | 5 +++++ 9 files changed, 44 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index a60799d..ebc4137 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ DS_Store npm-debug.log build jest +*.env +codeship.aes diff --git a/codeship-services.yml b/codeship-services.yml index 6beb7a8..71dfeaf 100644 --- a/codeship-services.yml +++ b/codeship-services.yml @@ -11,3 +11,8 @@ services: environment: POSTGRES_USER: todoapp POSTGRES_DB: todos + deploy: + image: codeship/heroku-deployment + encrypted_env_file: deployment.env.encrypted + volumes: + - ./:/deploy diff --git a/codeship-steps.yml b/codeship-steps.yml index ad18300..a5ee87d 100644 --- a/codeship-steps.yml +++ b/codeship-steps.yml @@ -8,3 +8,7 @@ - name: tests service: web command: bin/ci "npm test -- --forceExit" + - name: deploy + tag: master + service: deploy + command: codeship_heroku deploy /deploy nodejs-express-todoapp diff --git a/package.json b/package.json index d9fa112..eae3e16 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,14 @@ "clean": "rm -rf build && mkdir build", "build-server": "babel src --out-dir build -s --ignore src/__tests__/**", "build": "npm run clean && npm run build-server", - "start": "npm run build && node ./build/index.js", + "prestart": "npm run build && npm run migrate", + "start": "node ./build/index.js", "lint": "eslint src", "test": "jest", "watch-tests": "esw src & jest --watchAll", "dev": "nodemon --watch ./src --ignore ./src/__tests__ -x \"npm start\"", "coverage": "jest --coverage", - "migrate": "node node_modules/db-migrate/bin/db-migrate up all" + "migrate": "node ./node_modules/db-migrate/bin/db-migrate up all" }, "keywords": [ "todo-backend", diff --git a/src/__tests__/server.spec.js b/src/__tests__/server.spec.js index 7ebfaf2..4e37865 100644 --- a/src/__tests__/server.spec.js +++ b/src/__tests__/server.spec.js @@ -7,7 +7,7 @@ describe('Todo-Backend API', () => { describe( 'the pre-requisites', () => { it( 'the api root responds to a GET (i.e. the server is up and accessible, CORS headers are set up)', (done) => { request(app) - .get('/') + .get('/todos') .expect(200) .end((err) => { expect(err).toBeNull(); @@ -16,7 +16,7 @@ describe('Todo-Backend API', () => { }); it( 'the api root responds to a POST with the todo which was posted to it', (done) => { request(app) - .post('/') + .post('/todos') .send(todo) .expect(201) .end((err, res) => { @@ -27,7 +27,7 @@ describe('Todo-Backend API', () => { }); it( 'the api root responds successfully to a DELETE', (done) => { request(app) - .delete('/') + .delete('/todos') .expect(204) .end((err) => { expect(err).toBeNull(); @@ -36,7 +36,7 @@ describe('Todo-Backend API', () => { }); it( 'after a DELETE the api root responds to a GET with a JSON representation of an empty array', (done) => { request(app) - .get('/') + .get('/todos') .expect(200) .end((err, res) => { expect(res.body).toEqual([]); @@ -49,7 +49,7 @@ describe('Todo-Backend API', () => { beforeEach((done) => { request(app) - .delete('/') + .delete('/todos') .end((err) => { expect(err).toBeNull(); done(); @@ -58,7 +58,7 @@ describe('Todo-Backend API', () => { it('adds a new todo to the list of todos at the root url', (done) => { request(app) - .post('/') + .post('/todos') .send(todo) .expect(201) .end((err, res) => { @@ -69,7 +69,7 @@ describe('Todo-Backend API', () => { }); it('sets up a new todo as initially not completed', (done) => { request(app) - .post('/') + .post('/todos') .send(todo) .expect(201) .end((err, res) => { @@ -82,7 +82,7 @@ describe('Todo-Backend API', () => { let currentTodo; const client = request(app); client - .post('/') + .post('/todos') .send(todo) .expect(201) .end((err, res) => { @@ -91,7 +91,7 @@ describe('Todo-Backend API', () => { expect(typeof res.body.url).toEqual('string'); currentTodo = res.body; client - .get(`/${currentTodo.id}`) + .get(`/todos/${currentTodo.id}`) .end((err, res) => { expect(err).toBeNull(); expect(res.body.id).toEqual(currentTodo.id); @@ -106,14 +106,14 @@ describe('Todo-Backend API', () => { let currentTodo; const client = request(app); client - .post('/') + .post('/todos') .send(todo) .expect(201) .end((err, res) => { expect(err).toBeNull(); currentTodo = res.body; client - .patch(`/${currentTodo.id}`) + .patch(`/todos/${currentTodo.id}`) .send({'title': 'different title now'}) .end((err, res) => { expect(err).toBeNull(); @@ -126,7 +126,7 @@ describe('Todo-Backend API', () => { let currentTodo; const client = request(app); client - .post('/') + .post('/todos') .send(todo) .expect(201) .end((err, res) => { @@ -134,7 +134,7 @@ describe('Todo-Backend API', () => { expect(res.body.completed).toEqual(false); currentTodo = res.body; client - .patch(`/${currentTodo.id}`) + .patch(`/todos/${currentTodo.id}`) .send({'completed': true}) .end((err, res) => { expect(err).toBeNull(); @@ -147,19 +147,19 @@ describe('Todo-Backend API', () => { let currentTodo; const client = request(app); client - .post('/') + .post('/todos') .send(todo) .expect(201) .end((err, res) => { expect(err).toBeNull(); currentTodo = res.body; client - .patch(`/${currentTodo.id}`) + .patch(`/todos/${currentTodo.id}`) .send({'title': 'new title', 'completed': true}) .end((err) => { expect(err).toBeNull(); client - .get(`/${currentTodo.id}`) + .get(`/todos/${currentTodo.id}`) .end((err,res) => { expect(err).toBeNull(); expect(res.body.completed).toEqual(true); @@ -173,14 +173,14 @@ describe('Todo-Backend API', () => { let currentTodo; const client = request(app); client - .post('/') + .post('/todos') .send(todo) .expect(201) .end((err, res) => { expect(err).toBeNull(); currentTodo = res.body; client - .delete(`/${currentTodo.id}`) + .delete(`/todos/${currentTodo.id}`) .expect(204) .end((err) => { expect(err).toBeNull(); @@ -195,19 +195,19 @@ describe('Todo-Backend API', () => { let currentTodo; const client = request(app); client - .post('/') + .post('/todos') .send(todo) .expect(201) .end((err, res) => { expect(err).toBeNull(); currentTodo = res.body; client - .patch(`/${currentTodo.id}`) + .patch(`/todos/${currentTodo.id}`) .send({'order': 123}) .end((err) => { expect(err).toBeNull(); client - .get(`/${currentTodo.id}`) + .get(`/todos/${currentTodo.id}`) .end((err,res) => { expect(err).toBeNull(); expect(res.body.order).toEqual(123); diff --git a/src/index.js b/src/index.js index 24894c2..9722fae 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,6 @@ import app from './server'; -const port = process.env.port || 3000; +const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`Your app is running on port ${port}`); // eslint-disable-line diff --git a/src/server.js b/src/server.js index 2b14492..32ab5dd 100644 --- a/src/server.js +++ b/src/server.js @@ -7,11 +7,11 @@ import routes from './todos/routes'; const app = express(); // app middleware -app.use(bodyParser.json({type: 'application/json'})); app.use(cors()); +app.use(bodyParser.json({type: 'application/json'})); app.disable('etag'); -app.use('/', routes()); +app.use('/todos', routes()); const errorHandler = new ErrorHandler(); diff --git a/src/todos/model.js b/src/todos/model.js index bf44c20..71fed19 100644 --- a/src/todos/model.js +++ b/src/todos/model.js @@ -28,7 +28,7 @@ function cleanUpTodoObject(todo, baseUrl) { if (value === null || value === undefined) delete todo[key]; } - todo.url = `${baseUrl}/${todo.id}`; + todo.url = `${baseUrl}/todos/${todo.id}`; return todo; } diff --git a/src/todos/routes.js b/src/todos/routes.js index b695f36..af553fb 100644 --- a/src/todos/routes.js +++ b/src/todos/routes.js @@ -34,6 +34,10 @@ export default function () { } async function createTodo(req, res, next) { + if (req.body.order) { + req.body.position = req.body.order; + delete req.body.order; + } const todo = await db.create(todoTable, req.body) .catch((err) => next(err)); res.locals.todo = todo[0]; @@ -57,6 +61,7 @@ export default function () { todo.position = todo.order; delete todo.order; } + const updatedTodo = await db.update(todoTable, req.params.id, todo) .catch((err) => next(err)); res.locals.todo = updatedTodo[0];