diff --git a/server/admin.api.spec.js b/server/admin.api.spec.js index 001a2ec1d..20b09b699 100644 --- a/server/admin.api.spec.js +++ b/server/admin.api.spec.js @@ -12,17 +12,19 @@ describe('Tests for admin api', ()=>{ describe('Notifications', ()=>{ it('should return list of all notifications', async ()=>{ - const fakeNotifications = ['a', 'b']; + const testNotifications = ['a', 'b']; - jest.spyOn(NotificationModel, 'getAll') - .mockImplementationOnce(()=>fakeNotifications); + jest.spyOn(NotificationModel, 'find') + .mockImplementationOnce(() => { + return { exec: jest.fn().mockResolvedValue(testNotifications) }; + }); const response = await app .get('/admin/notification/all') .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(200); - expect(response.body).toEqual(fakeNotifications); + expect(response.body).toEqual(testNotifications); }); it('should add a new notification', async ()=>{ @@ -32,7 +34,7 @@ describe('Tests for admin api', ()=>{ startAt : new Date().toISOString(), stopAt : new Date().toISOString(), dismissKey : 'testKey' - }; + }; const savedNotification = { ...inputNotification, @@ -56,19 +58,43 @@ describe('Tests for admin api', ()=>{ expect(response.body).toEqual(savedNotification); }); + it('should fail adding a new notification without dismissKey', async () => { + const inputNotification = { + title : 'Test Notification', + text : 'This is a test notification', + startAt : new Date().toISOString(), + stopAt : new Date().toISOString() + }; + + //Change 'save' function to just return itself instead of actually interacting with the database + jest.spyOn(NotificationModel.prototype, 'save') + .mockImplementationOnce(function() { + return Promise.resolve(this); + }); + + const response = await app + .post('/admin/notification/add') + .set('Authorization', 'Basic ' + Buffer.from('admin:password3').toString('base64')) + .send(inputNotification); + + expect(response.status).toBe(500); + expect(response.body).toEqual({ message: 'Dismiss key is required!' }); + }); + it('should delete a notification based on its dismiss key', async ()=>{ const dismissKey = 'testKey'; - jest.spyOn(NotificationModel, 'deleteNotification') - .mockImplementationOnce(async (key)=>{ - expect(key).toBe(dismissKey); - return { message: 'Notification deleted successfully' }; + + jest.spyOn(NotificationModel, 'findOneAndDelete') + .mockImplementationOnce((key) => { + return { exec: jest.fn().mockResolvedValue(key) }; }); const response = await app .delete(`/admin/notification/delete/${dismissKey}`) .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); + expect(NotificationModel.findOneAndDelete).toHaveBeenCalledWith({'dismissKey': 'testKey'}); expect(response.status).toBe(200); - expect(response.body).toEqual({ message: 'Notification deleted successfully' }); + expect(response.body).toEqual({ dismissKey: 'testKey' }); }); }); });