overleaf/services/web/test/unit/coffee/Notifications/NotificationsHandlerTests.coffee
2017-11-27 17:10:22 +00:00

103 lines
3.4 KiB
CoffeeScript

SandboxedModule = require('sandboxed-module')
assert = require('chai').assert
require('chai').should()
sinon = require('sinon')
modulePath = require('path').join __dirname, '../../../../app/js/Features/Notifications/NotificationsHandler.js'
_ = require('underscore')
describe 'NotificationsHandler', ->
user_id = "123nd3ijdks"
notification_id = "123njdskj9jlk"
notificationUrl = "notification.sharelatex.testing"
beforeEach ->
@request = sinon.stub().callsArgWith(1)
@handler = SandboxedModule.require modulePath, requires:
"settings-sharelatex": apis:{notifications:{url:notificationUrl}}
"request":@request
'logger-sharelatex':
log:->
err:->
describe "getUserNotifications", ->
it 'should get unread notifications', (done)->
stubbedNotifications = [{_id: notification_id, user_id: user_id}]
@request.callsArgWith(1, null, {statusCode:200}, stubbedNotifications)
@handler.getUserNotifications user_id, (err, unreadNotifications)=>
stubbedNotifications.should.deep.equal unreadNotifications
getOpts =
uri: "#{notificationUrl}/user/#{user_id}"
json:true
timeout:1000
method: "GET"
@request.calledWith(getOpts).should.equal true
done()
it 'should return empty arrays if there are no notifications', ->
@request.callsArgWith(1, null, {statusCode:200}, null)
@handler.getUserNotifications user_id, (err, unreadNotifications)=>
unreadNotifications.length.should.equal 0
describe "markAsRead", ->
beforeEach ->
@key = "some key here"
it 'should send a delete request when a delete has been received to mark a notification', (done)->
@handler.markAsReadWithKey user_id, @key, =>
opts =
uri: "#{notificationUrl}/user/#{user_id}"
json:
key:@key
timeout:1000
method: "DELETE"
@request.calledWith(opts).should.equal true
done()
describe "createNotification", ->
beforeEach ->
@key = "some key here"
@messageOpts = {value:12344}
@templateKey = "renderThisHtml"
@expiry = null
it "should post the message over", (done)->
@handler.createNotification user_id, @key, @templateKey, @messageOpts, @expiry, =>
args = @request.args[0][0]
args.uri.should.equal "#{notificationUrl}/user/#{user_id}"
args.timeout.should.equal 1000
expectedJson = {key:@key, templateKey:@templateKey, messageOpts:@messageOpts, forceCreate:true}
assert.deepEqual(args.json, expectedJson)
done()
describe 'when expiry date is supplied', ->
beforeEach ->
@key = "some key here"
@messageOpts = {value:12344}
@templateKey = "renderThisHtml"
@expiry = new Date()
it 'should post the message over with expiry field', (done) ->
@handler.createNotification user_id, @key, @templateKey, @messageOpts, @expiry, =>
args = @request.args[0][0]
args.uri.should.equal "#{notificationUrl}/user/#{user_id}"
args.timeout.should.equal 1000
expectedJson = {key:@key, templateKey:@templateKey, messageOpts:@messageOpts, expires: @expiry, forceCreate:true}
assert.deepEqual(args.json, expectedJson)
done()
describe "markAsReadByKeyOnly", ->
beforeEach ->
@key = "some key here"
it 'should send a delete request when a delete has been received to mark a notification', (done)->
@handler.markAsReadByKeyOnly @key, =>
opts =
uri: "#{notificationUrl}/key/#{@key}"
timeout:1000
method: "DELETE"
@request.calledWith(opts).should.equal true
done()