diff --git a/services/notifications/app/coffee/NotificationsController.coffee b/services/notifications/app/coffee/NotificationsController.coffee index 035cf6d3ec..2474ce2531 100644 --- a/services/notifications/app/coffee/NotificationsController.coffee +++ b/services/notifications/app/coffee/NotificationsController.coffee @@ -17,6 +17,6 @@ module.exports = res.send() removeNotification: (req, res)-> - logger.log user_id: req.params.user_id, notification_id: req.params.notification_id, "removing notification" + logger.log user_id: req.params.user_id, notification_id: req.params.notification_id, "mark notification as read" Notifications.removeNotification req.params.user_id, req.params.notification_id, (err, notifications)-> res.send() diff --git a/services/notifications/test/unit/coffee/NotificationsControllerTest.coffee b/services/notifications/test/unit/coffee/NotificationsControllerTest.coffee index d959e72380..55face92b6 100644 --- a/services/notifications/test/unit/coffee/NotificationsControllerTest.coffee +++ b/services/notifications/test/unit/coffee/NotificationsControllerTest.coffee @@ -6,6 +6,47 @@ SandboxedModule = require('sandboxed-module') assert = require('assert') user_id = "51dc93e6fb625a261300003b" -notification_key = '123434' +notification_id = "fb625a26f09d" describe 'Notifications controller', -> + beforeEach -> + self = @ + @notifications = {} + @controller = SandboxedModule.require modulePath, requires: + 'logger-sharelatex': log:-> + './Notifications':@notifications + + @stubbedNotification = [{key:"notification-key", messageOpts:"some info", templateKey:"template-key"}] + + describe "getUserNotifications", -> + it 'should ask the notifications for the users notifications', (done)-> + @notifications.getUserNotifications = sinon.stub().callsArgWith(1, null, @stubbedNotification) + req = + params: + user_id: user_id + @controller.getUserNotifications req, json:(result)=> + result.should.equal @stubbedNotification + @notifications.getUserNotifications.calledWith(user_id).should.equal true + done() + + describe "addNotification", -> + it "should tell the notifications to add the notification for the user", (done)-> + @notifications.addNotification = sinon.stub().callsArgWith(2) + req = + params: + user_id: user_id + body: @stubbedNotification + @controller.addNotification req, send:(result)=> + @notifications.addNotification.calledWith(user_id, @stubbedNotification).should.equal true + done() + + describe "removeNotification", -> + it "should tell the notifications to mark the notification as read", (done)-> + @notifications.removeNotification = sinon.stub().callsArgWith(2) + req = + params: + user_id: user_id + notification_id: notification_id + @controller.removeNotification req, send:(result)=> + @notifications.removeNotification.calledWith(user_id, notification_id).should.equal true + done() diff --git a/services/notifications/test/unit/coffee/NotificationsTests.coffee b/services/notifications/test/unit/coffee/NotificationsTests.coffee index 998b77599a..adb58f6a48 100644 --- a/services/notifications/test/unit/coffee/NotificationsTests.coffee +++ b/services/notifications/test/unit/coffee/NotificationsTests.coffee @@ -4,27 +4,71 @@ should = chai.should() modulePath = "../../../app/js/Notifications.js" SandboxedModule = require('sandboxed-module') assert = require('assert') +ObjectId = require("mongojs").ObjectId user_id = "51dc93e6fb625a261300003b" -notification_key = '123434' +notification_id = "fb625a26f09d" +notification_key = "notification-key" describe 'creating a user', -> beforeEach -> self = @ - @findOneStub = sinon.stub() @findStub = sinon.stub() - @saveStub = sinon.stub() + @insertStub = sinon.stub() + @countStub = sinon.stub() @updateStub = sinon.stub() @mongojs = => notifications: - update: self.mongojsUpdate + update: self.mongojsUpdate find: @findStub - findOne: @findOneStub - save: @saveStub + insert: @insertStub + count: @countStub update: @updateStub + @mongojs.ObjectId = ObjectId - @repository = SandboxedModule.require modulePath, requires: + @notifications = SandboxedModule.require modulePath, requires: 'logger-sharelatex': log:-> 'settings-sharelatex': {} 'mongojs':@mongojs + + @stubbedNotification = {user_id: user_id, key:"notification-key", messageOpts:"some info", templateKey:"template-key"} + @stubbedNotificationArray = [@stubbedNotification] + + describe 'getUserNotifications', -> + it "should find all notifications and return it", (done)-> + @findStub.callsArgWith(1, null, @stubbedNotificationArray) + @notifications.getUserNotifications user_id, (err, notifications)=> + notifications.should.equal @stubbedNotificationArray + @findStub.calledWith({"user_id" : user_id, "templateKey": {"$exists":true}}).should.equal true + done() + + describe 'addNotification', -> + it 'should insert the notification into the collection', (done)-> + @insertStub.callsArgWith(1, null) + @countStub.callsArgWith(1, null, 0) + + @notifications.addNotification user_id, @stubbedNotification, (err)=> + @insertStub.calledWith(@stubbedNotification).should.equal true + done() + + it 'should fail insert of existing notification key', (done)-> + @insertStub.callsArgWith(1, null) + @countStub.callsArgWith(1, null, 1) + + @notifications.addNotification user_id, @stubbedNotification, (err)=> + @insertStub.calledWith(@stubbedNotification).should.equal false + done() + + describe 'removeNotification', -> + it 'should mark the notification id as read', (done)-> + @updateStub.callsArgWith(2, null) + + @notifications.removeNotification user_id, notification_id, (err)=> + searchOps = + user_id:user_id + _id:ObjectId(notification_id) + updateOperation = + "$unset": {templateKey:true} + @updateStub.calledWith(searchOps, updateOperation).should.equal true + done()