ReferencesControllerTests.coffee 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. SandboxedModule = require('sandboxed-module')
  2. should = require('chai').should()
  3. sinon = require 'sinon'
  4. assert = require("chai").assert
  5. modulePath = "../../../../app/js/Features/References/ReferencesController"
  6. MockRequest = require "../helpers/MockRequest"
  7. MockResponse = require "../helpers/MockResponse"
  8. describe "ReferencesController", ->
  9. beforeEach ->
  10. @projectId = '2222'
  11. @controller = SandboxedModule.require modulePath, requires:
  12. 'logger-sharelatex': {
  13. log: ->
  14. err: ->
  15. },
  16. 'settings-sharelatex': @settings = {
  17. apis: {web: {url: 'http://some.url'}}
  18. },
  19. './ReferencesHandler': @ReferencesHandler = {
  20. index: sinon.stub()
  21. indexAll: sinon.stub()
  22. },
  23. '../Editor/EditorRealTimeController': @EditorRealTimeController = {
  24. emitToRoom: sinon.stub()
  25. }
  26. @req = new MockRequest()
  27. @req.params.Project_id = @projectId
  28. @req.body =
  29. docIds: @docIds = ['aaa', 'bbb']
  30. shouldBroadcast: false
  31. @res = new MockResponse()
  32. @res.json = sinon.stub()
  33. @res.send = sinon.stub()
  34. @res.sendStatus = sinon.stub()
  35. @fakeResponseData =
  36. projectId: @projectId,
  37. keys: ['one', 'two', 'three']
  38. describe 'indexAll', ->
  39. beforeEach ->
  40. @req.body = {shouldBroadcast: false}
  41. @ReferencesHandler.indexAll.callsArgWith(1, null, @fakeResponseData)
  42. @call = (callback) =>
  43. @controller.indexAll @req, @res
  44. callback()
  45. it 'should not produce an error', (done) ->
  46. @call () =>
  47. @res.sendStatus.callCount.should.equal 0
  48. @res.sendStatus.calledWith(500).should.equal false
  49. @res.sendStatus.calledWith(400).should.equal false
  50. done()
  51. it 'should return data', (done) ->
  52. @call () =>
  53. @res.json.callCount.should.equal 1
  54. @res.json.calledWith(@fakeResponseData).should.equal true
  55. done()
  56. it 'should call ReferencesHandler.indexAll', (done) ->
  57. @call () =>
  58. @ReferencesHandler.indexAll.callCount.should.equal 1
  59. @ReferencesHandler.indexAll.calledWith(@projectId).should.equal true
  60. done()
  61. describe 'when shouldBroadcast is true', ->
  62. beforeEach ->
  63. @ReferencesHandler.index.callsArgWith(2, null, @fakeResponseData)
  64. @req.body.shouldBroadcast = true
  65. it 'should call EditorRealTimeController.emitToRoom', (done) ->
  66. @call () =>
  67. @EditorRealTimeController.emitToRoom.callCount.should.equal 1
  68. done()
  69. it 'should not produce an error', (done) ->
  70. @call () =>
  71. @res.sendStatus.callCount.should.equal 0
  72. @res.sendStatus.calledWith(500).should.equal false
  73. @res.sendStatus.calledWith(400).should.equal false
  74. done()
  75. it 'should still return data', (done) ->
  76. @call () =>
  77. @res.json.callCount.should.equal 1
  78. @res.json.calledWith(@fakeResponseData).should.equal true
  79. done()
  80. describe 'when shouldBroadcast is false', ->
  81. beforeEach ->
  82. @ReferencesHandler.index.callsArgWith(2, null, @fakeResponseData)
  83. @req.body.shouldBroadcast = false
  84. it 'should not call EditorRealTimeController.emitToRoom', (done) ->
  85. @call () =>
  86. @EditorRealTimeController.emitToRoom.callCount.should.equal 0
  87. done()
  88. it 'should not produce an error', (done) ->
  89. @call () =>
  90. @res.sendStatus.callCount.should.equal 0
  91. @res.sendStatus.calledWith(500).should.equal false
  92. @res.sendStatus.calledWith(400).should.equal false
  93. done()
  94. it 'should still return data', (done) ->
  95. @call () =>
  96. @res.json.callCount.should.equal 1
  97. @res.json.calledWith(@fakeResponseData).should.equal true
  98. done()
  99. describe 'there is no dataaaaaaa', ->
  100. beforeEach ->
  101. @ReferencesHandler.indexAll.callsArgWith(1)
  102. @call = (callback) =>
  103. @controller.indexAll @req, @res
  104. callback()
  105. it 'should not call EditorRealTimeController.emitToRoom', (done) ->
  106. @call () =>
  107. @EditorRealTimeController.emitToRoom.callCount.should.equal 0
  108. done()
  109. it 'should not produce an error', (done) ->
  110. @call () =>
  111. @res.sendStatus.callCount.should.equal 0
  112. @res.sendStatus.calledWith(500).should.equal false
  113. @res.sendStatus.calledWith(400).should.equal false
  114. done()
  115. it 'should send a response with an empty keys list', (done) ->
  116. @call () =>
  117. @res.json.called.should.equal true
  118. @res.json.calledWith({projectId: @projectId, keys: []}).should.equal true
  119. done()
  120. describe 'index', ->
  121. describe 'with docIds as an array and shouldBroadcast as false', ->
  122. beforeEach ->
  123. @ReferencesHandler.index.callsArgWith(2, null, @fakeResponseData)
  124. @call = (callback) =>
  125. @controller.index @req, @res
  126. callback()
  127. it 'should call ReferencesHandler.index', (done) ->
  128. @call () =>
  129. @ReferencesHandler.index.callCount.should.equal 1
  130. @ReferencesHandler.index.calledWith(@projectId, @docIds).should.equal true
  131. done()
  132. it 'should return data', (done) ->
  133. @call () =>
  134. @res.json.callCount.should.equal 1
  135. @res.json.calledWith(@fakeResponseData).should.equal true
  136. done()
  137. it 'should not produce an error', (done) ->
  138. @call () =>
  139. @res.sendStatus.callCount.should.equal 0
  140. @res.sendStatus.calledWith(500).should.equal false
  141. @res.sendStatus.calledWith(400).should.equal false
  142. done()
  143. it 'should not call EditorRealTimController.emitToRoom', (done) ->
  144. @call () =>
  145. @EditorRealTimeController.emitToRoom.callCount.should.equal 0
  146. done()
  147. describe 'when ReferencesHandler.index produces an error', ->
  148. beforeEach ->
  149. @ReferencesHandler.index.callsArgWith(2, new Error('woops'), null)
  150. it 'should produce an error response', (done) ->
  151. @call () =>
  152. @res.sendStatus.callCount.should.equal 1
  153. @res.sendStatus.calledWith(500).should.equal true
  154. done()
  155. describe 'when shouldBroadcast is true', ->
  156. beforeEach ->
  157. @ReferencesHandler.index.callsArgWith(2, null, @fakeResponseData)
  158. @req.body.shouldBroadcast = true
  159. it 'should call EditorRealTimeController.emitToRoom', (done) ->
  160. @call () =>
  161. @EditorRealTimeController.emitToRoom.callCount.should.equal 1
  162. done()
  163. it 'should not produce an error', (done) ->
  164. @call () =>
  165. @res.sendStatus.callCount.should.equal 0
  166. @res.sendStatus.calledWith(500).should.equal false
  167. @res.sendStatus.calledWith(400).should.equal false
  168. done()
  169. it 'should still return data', (done) ->
  170. @call () =>
  171. @res.json.callCount.should.equal 1
  172. @res.json.calledWith(@fakeResponseData).should.equal true
  173. done()
  174. describe 'with missing docIds', ->
  175. beforeEach ->
  176. delete @req.body.docIds
  177. it 'should produce an error response', (done) ->
  178. @call () =>
  179. @res.sendStatus.callCount.should.equal 1
  180. @res.sendStatus.calledWith(400).should.equal true
  181. done()
  182. it 'should not call ReferencesHandler.index', (done) ->
  183. @call () =>
  184. @ReferencesHandler.index.callCount.should.equal 0
  185. done()
  186. describe 'with invalid docIds', ->
  187. beforeEach ->
  188. @req.body.docIds = 42
  189. it 'should produce an error response', (done) ->
  190. @call () =>
  191. @res.sendStatus.callCount.should.equal 1
  192. @res.sendStatus.calledWith(400).should.equal true
  193. done()
  194. it 'should not call ReferencesHandler.index', (done) ->
  195. @call () =>
  196. @ReferencesHandler.index.callCount.should.equal 0
  197. done()