ReferencesControllerTests.coffee 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  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 close the response', (done) ->
  116. @call () =>
  117. @res.send.called.should.equal true
  118. done()
  119. describe 'index', ->
  120. describe 'with docIds as an array and shouldBroadcast as false', ->
  121. beforeEach ->
  122. @ReferencesHandler.index.callsArgWith(2, null, @fakeResponseData)
  123. @call = (callback) =>
  124. @controller.index @req, @res
  125. callback()
  126. it 'should call ReferencesHandler.index', (done) ->
  127. @call () =>
  128. @ReferencesHandler.index.callCount.should.equal 1
  129. @ReferencesHandler.index.calledWith(@projectId, @docIds).should.equal true
  130. done()
  131. it 'should return data', (done) ->
  132. @call () =>
  133. @res.json.callCount.should.equal 1
  134. @res.json.calledWith(@fakeResponseData).should.equal true
  135. done()
  136. it 'should not produce an error', (done) ->
  137. @call () =>
  138. @res.sendStatus.callCount.should.equal 0
  139. @res.sendStatus.calledWith(500).should.equal false
  140. @res.sendStatus.calledWith(400).should.equal false
  141. done()
  142. it 'should not call EditorRealTimController.emitToRoom', (done) ->
  143. @call () =>
  144. @EditorRealTimeController.emitToRoom.callCount.should.equal 0
  145. done()
  146. describe 'when ReferencesHandler.index produces an error', ->
  147. beforeEach ->
  148. @ReferencesHandler.index.callsArgWith(2, new Error('woops'), null)
  149. it 'should produce an error response', (done) ->
  150. @call () =>
  151. @res.sendStatus.callCount.should.equal 1
  152. @res.sendStatus.calledWith(500).should.equal true
  153. done()
  154. describe 'when shouldBroadcast is true', ->
  155. beforeEach ->
  156. @ReferencesHandler.index.callsArgWith(2, null, @fakeResponseData)
  157. @req.body.shouldBroadcast = true
  158. it 'should call EditorRealTimeController.emitToRoom', (done) ->
  159. @call () =>
  160. @EditorRealTimeController.emitToRoom.callCount.should.equal 1
  161. done()
  162. it 'should not produce an error', (done) ->
  163. @call () =>
  164. @res.sendStatus.callCount.should.equal 0
  165. @res.sendStatus.calledWith(500).should.equal false
  166. @res.sendStatus.calledWith(400).should.equal false
  167. done()
  168. it 'should still return data', (done) ->
  169. @call () =>
  170. @res.json.callCount.should.equal 1
  171. @res.json.calledWith(@fakeResponseData).should.equal true
  172. done()
  173. describe 'with missing docIds', ->
  174. beforeEach ->
  175. delete @req.body.docIds
  176. it 'should produce an error response', (done) ->
  177. @call () =>
  178. @res.sendStatus.callCount.should.equal 1
  179. @res.sendStatus.calledWith(400).should.equal true
  180. done()
  181. it 'should not call ReferencesHandler.index', (done) ->
  182. @call () =>
  183. @ReferencesHandler.index.callCount.should.equal 0
  184. done()
  185. describe 'with invalid docIds', ->
  186. beforeEach ->
  187. @req.body.docIds = 42
  188. it 'should produce an error response', (done) ->
  189. @call () =>
  190. @res.sendStatus.callCount.should.equal 1
  191. @res.sendStatus.calledWith(400).should.equal true
  192. done()
  193. it 'should not call ReferencesHandler.index', (done) ->
  194. @call () =>
  195. @ReferencesHandler.index.callCount.should.equal 0
  196. done()