From 51b80d571ba94fb898d79c2a0dc9428e49158f3e Mon Sep 17 00:00:00 2001 From: Ayelegun Kayode Michael Date: Fri, 20 Apr 2018 01:25:03 +0100 Subject: [PATCH] feature/get-user-events - write controller for getting user events - write tests for fetching user's events --- README.md | 2 ++ server/controllers/user.js | 32 +++++++++++++++++++++++++++++++- server/routes/index.js | 5 +++++ server/tests/user.test.js | 26 +++++++++++++++++++++++++- 4 files changed, 63 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9f4be07..74962ba 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,12 @@ * Users can create events * Users can modify events they own * Users can delete events they own +* Users can get all the events they own * Users can get all events in the application * Users can get all the centers in the application * Users can search the application for centers using center name or location * Users can fetch a single center to view all upcoming events +* Users get email notification whenever their events gets canceled. ### Contributing Receiving no contributions at this time. diff --git a/server/controllers/user.js b/server/controllers/user.js index 6956e13..d00dd04 100644 --- a/server/controllers/user.js +++ b/server/controllers/user.js @@ -5,7 +5,7 @@ import validateSignup from '../validators/validateSignup'; import validateSignin from '../validators/validateSignin'; import serverError from '../errorHandler/serverError'; -const { User } = db; +const { User, Center, Event } = db; /** * Controller class for handling user actions @@ -164,6 +164,36 @@ class Users { }); }); } + + /** + * Get user events + * + * @param {object} request - The request object + * @param {object} response - The response object + * + * @returns {object} The user events + */ + static getUserEvents(request, response) { + Event.findAll({ + where: { + organizer: request.userDetails.id + } + }).then((userEvents) => { + if (userEvents.length == 0) { + return response.status(200).json({ + message: 'You currently have no events created.' + }); + } + return response.status(200).json({ + message: `You currently have ${userEvents.length} event(s).`, + eventDetails: userEvents + }); + }).catch(() => { + return response.status(500).json({ + message: serverError + }); + }); + } } export default Users; diff --git a/server/routes/index.js b/server/routes/index.js index 274832b..4065f10 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -45,4 +45,9 @@ module.exports = (app) => { '/api/v1/user/profile', sessionControl.isLoggedIn, sessionControl.isUser, userController.editPassword ); + app.get( + '/api/v1/user/events', + sessionControl.isLoggedIn, sessionControl.isUser, + userController.getUserEvents + ); }; diff --git a/server/tests/user.test.js b/server/tests/user.test.js index 00eaf16..790ae52 100644 --- a/server/tests/user.test.js +++ b/server/tests/user.test.js @@ -1,7 +1,7 @@ import supertest from 'supertest'; import { expect } from 'chai'; import app from '../app'; -import dummyUser, { nonExistentUser } from './seed/userseed'; +import dummyUser, { nonExistentUser, adminUser } from './seed/userseed'; const request = supertest(app); const signupAPI = '/api/v1/users/signup'; @@ -244,6 +244,30 @@ describe('Integration tests for Authentication', () => { }); }); }); + describe('Get user events test', () => { + it('should return an empty array of a user has no events', (done) => { + request.get(`/api/v1/user/events?token=${dummyUser.token}`) + .set('Connection', 'keep alive') + .set('Content-Type', 'application/json') + .type('form') + .end((error, response) => { + expect(response.status).to.equal(200); + done(); + }); + }); + it('should return the events of a user', (done) => { + request.get(`/api/v1/user/events?token=${adminUser.token}`) + .set('Connection', 'keep alive') + .set('Content-Type', 'application/json') + .type('form') + .end((error, response) => { + expect(response.status).to.equal(200); + expect(response.body.message).to + .equal('You currently have 3 event(s).'); + done(); + }); + }); + }); describe('User profile test', () => { it('should return an error if the user is not found', (done) => { request.put(`/api/v1/user/profile?token=${nonExistentUser.token}`)