فهرست منبع

adding tests for ip matching notifications

hugh-obrien 8 سال پیش
والد
کامیت
de83df2703

+ 40 - 0
services/web/test/unit/coffee/Notifications/NotificationsBuilderTests.coffee

@@ -0,0 +1,40 @@
+SandboxedModule = require('sandboxed-module')
+assert = require('chai').assert
+require('chai').should()
+sinon = require('sinon')
+modulePath = require('path').join __dirname, '../../../../app/js/Features/Notifications/NotificationsBuilder.js'
+
+describe 'NotificationsBuilder', ->
+	user_id = "123nd3ijdks"
+
+	beforeEach ->
+		@handler =
+			createNotification: sinon.stub().callsArgWith(5)
+
+		@settings =	 apis: { v1: { url: 'v1.url', user: '', pass: '' } }
+		@body = {university_id: 1, university_name: 'stanford', ad_copy: 'v1 ad content'}
+		response = {statusCode: 200}
+		@request = sinon.stub().returns(@stubResponse).callsArgWith(1, null, response, @body)
+		@controller = SandboxedModule.require modulePath, requires:
+			"./NotificationsHandler":@handler
+			"settings-sharelatex":@settings
+			'request': @request
+			"logger-sharelatex":
+				log:->
+				err:->
+
+	it 'should call v1 and create affiliation notifications', (done)->
+		ip = '192.168.0.1'
+		@controller.ipMatcherAffiliation(user_id, ip).create (callback)=>
+			@request.calledOnce.should.equal true
+			expectedOpts =
+				university_id: @body.university_id
+				university_name: @body.university_name
+				content: @body.ad_copy
+			@handler.createNotification.calledWith(
+				user_id,
+				 "ip-matched-affiliation-#{ip}",
+				 "notification_ip_matched_affiliation",
+				 expectedOpts
+			).should.equal true
+			done()

+ 15 - 0
services/web/test/unit/coffee/Notifications/NotificationsControllerTests.coffee

@@ -13,7 +13,14 @@ describe 'NotificationsController', ->
 		@handler =
 		@handler =
 			getUserNotifications: sinon.stub().callsArgWith(1)
 			getUserNotifications: sinon.stub().callsArgWith(1)
 			markAsRead: sinon.stub().callsArgWith(2)
 			markAsRead: sinon.stub().callsArgWith(2)
+		@builder =
+			ipMatcherAffiliation: sinon.stub().returns({create: sinon.stub()})
+		@settings =
+			apis: { v1: { url: 'v1.url', user: '', pass: '' } }
 		@req =
 		@req =
+			headers: {}
+			connection:
+				remoteAddress: "192.170.18.1"
 			params:
 			params:
 				notification_id:notification_id
 				notification_id:notification_id
 			session:
 			session:
@@ -25,6 +32,8 @@ describe 'NotificationsController', ->
 			getLoggedInUserId: sinon.stub().returns(@req.session.user._id)
 			getLoggedInUserId: sinon.stub().returns(@req.session.user._id)
 		@controller = SandboxedModule.require modulePath, requires:
 		@controller = SandboxedModule.require modulePath, requires:
 			"./NotificationsHandler":@handler
 			"./NotificationsHandler":@handler
+			"./NotificationsBuilder":@builder
+			"settings-sharelatex":@settings
 			"underscore":@underscore =
 			"underscore":@underscore =
 				map:(arr)-> return arr
 				map:(arr)-> return arr
 			'logger-sharelatex':
 			'logger-sharelatex':
@@ -44,3 +53,9 @@ describe 'NotificationsController', ->
 		@controller.markNotificationAsRead @req, send:=>
 		@controller.markNotificationAsRead @req, send:=>
 			@handler.markAsRead.calledWith(user_id, notification_id).should.equal true
 			@handler.markAsRead.calledWith(user_id, notification_id).should.equal true
 			done()
 			done()
+
+	it 'should call the builder with the user ip if v2', (done)->
+		@settings.overleaf = true
+		@controller.getAllUnreadNotifications @req, send:(body)=>
+			@builder.ipMatcherAffiliation.calledWith(user_id, @req.connection.remoteAddress).should.equal true
+			done()