From 73354b985aea7971bbca7223f3ee466f8f961075 Mon Sep 17 00:00:00 2001 From: Ayelegun Kayode Michael Date: Fri, 20 Apr 2018 02:08:32 +0100 Subject: [PATCH] bug/fix modify event - fix bug in modify event controller --- server/controllers/event.js | 74 ++++++++++++++++++++++++++++++++----- server/tests/event.test.js | 5 ++- 2 files changed, 69 insertions(+), 10 deletions(-) diff --git a/server/controllers/event.js b/server/controllers/event.js index b0e1be0..ec5c671 100644 --- a/server/controllers/event.js +++ b/server/controllers/event.js @@ -148,15 +148,71 @@ class Events { message: 'You do not have the privilege to modify this resource' }); } - return event.update({ - name: request.body.name || event.name, - image: request.body.image || event.image, - date: request.body.date || event.date, - duration: request.body.duration || event.duration - }).then((updatedEvent) => { - return response.status(201).json({ - message: 'Event modified successfully.', - eventDetails: updatedEvent + const duration = timeDifference( + request.body.startTime, + request.body.endTime + ); + const eventDuration = + `${duration.hours}hour(s), ${duration.minutes}minutes`; + const convertStartTime = new Date(request.body.startTime) + .toLocaleTimeString('en-US', { hour12: false }); + const convertEndTime = new Date(request.body.endTime) + .toLocaleTimeString('en-US', { hour12: false }); + + Center.findOne({ + where: { + name: request.body.venue + } + }).then((foundCenter) => { + if (!foundCenter) { + return response.status(400).json({ + message: 'Center not found' + }); + } + + Event.findAll({ + where: { + date: request.body.date, + venue: foundCenter.dataValues.id + } + }).then((foundEvent) => { + for (let index = 0; index < foundEvent.length; index += 1) { + const event = foundEvent[index]; + if ((convertStartTime >= event.startTime + && convertStartTime <= event.endTime) || + (convertEndTime <= event.endTime + && convertEndTime >= event.startTime)) { + return response.status(409).json({ + message: + `Sorry, you cannot book an event at this + time because there will be an event + holding between ${event.dataValues.startTime} and ${event.dataValues.endTime}.` + }); + } + } + return event.update({ + name: request.body.name || event.name, + image: request.body.image || event.image, + date: request.body.date || event.date, + duration: eventDuration || event.duration, + startTime: request.body.startTime || event.startTime, + endTime: request.body.endTime || event.endTime, + venue: foundCenter.dataValues.id || event.venue + }).then((updatedEvent) => { + return response.status(201).json({ + message: 'Event modified successfully.', + eventDetails: { + name: updatedEvent.name, + image: updatedEvent.image, + date: updatedEvent.date, + duration: updatedEvent.duration, + startTime: updatedEvent.startTime, + endTime: updatedEvent.endTime, + venue: foundCenter.dataValues.name, + organizer: updatedEvent.organizer + } + }); + }); }); }); }).catch((err) => { diff --git a/server/tests/event.test.js b/server/tests/event.test.js index 26da1b2..c817404 100644 --- a/server/tests/event.test.js +++ b/server/tests/event.test.js @@ -184,11 +184,14 @@ describe('Tests for Events API', () => { } ); it('should edit an event successfully', (done) => { + const testEvent = { ...eventSeed }; + testEvent.startTime = '2018-04-19 13:00:00 +01:00'; + testEvent.endTime = '2018-04-19 15:00:00 +01:00'; request.put(`/api/v1/event/4?token=${secondDummyUser.token}`) .set('Connection', 'keep alive') .set('Content-Type', 'application/json') .type('form') - .send(eventSeed) + .send(testEvent) .end((error, response) => { expect(response.status).to.equal(201); expect(response.body).to.be.an('object');