TpdsUpdateHandlerTests.coffee 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. SandboxedModule = require('sandboxed-module')
  2. sinon = require('sinon')
  3. require('chai').should()
  4. modulePath = require('path').join __dirname, '../../../../app/js/Features/ThirdPartyDataStore/TpdsUpdateHandler.js'
  5. describe 'third party data store reciver :', ->
  6. beforeEach ->
  7. @requestQueuer = {}
  8. @versioningApiHandler = {takeSnapshot:(_, message, sl_req_id, cb)->cb()}
  9. @updateMerger =
  10. deleteUpdate: (user_id, path, sl_req_id, cb)->cb()
  11. mergeUpdate:(user_id, path, update, sl_req_id, cb)->cb()
  12. @editorController = {}
  13. @project_id = "dsjajilknaksdn"
  14. @project = {_id:@project_id, name:"projectNameHere"}
  15. @projectLocator = findUsersProjectByName:sinon.stub().callsArgWith(2, null, @project)
  16. @projectCreationHandler =
  17. createBlankProject : sinon.stub().callsArgWith(2, null, @project)
  18. @projectDeleter = {markAsDeletedByExternalSource:sinon.stub().callsArgWith(1)}
  19. @rootDocManager = setRootDocAutomatically:sinon.stub()
  20. @handler = SandboxedModule.require modulePath, requires:
  21. '../Versioning/VersioningApiHandler':@versioningApiHandler
  22. './UpdateMerger': @updateMerger
  23. './Editor/EditorController': @editorController
  24. '../Project/ProjectLocator': @projectLocator
  25. '../Project/ProjectCreationHandler':@projectCreationHandler
  26. '../Project/ProjectDeleter': @projectDeleter
  27. "../Project/ProjectRootDocManager" : @rootDocManager
  28. 'logger-sharelatex': log:->
  29. @user_id = "dsad29jlkjas"
  30. describe 'getting an update', ->
  31. it 'should call versioning api to take snapshot for backup reasons', (done)->
  32. update = {}
  33. @versioningApiHandler.takeSnapshot = sinon.stub().callsArg(3)
  34. @handler.newUpdate @user_id, @project.name, "",update, "", =>
  35. @versioningApiHandler.takeSnapshot.calledWith(@project_id).should.equal true
  36. @projectCreationHandler.createBlankProject.called.should.equal false
  37. done()
  38. it 'should send the update to the update merger', (done)->
  39. path = "/path/here"
  40. update = {}
  41. @updateMerger.mergeUpdate = sinon.stub()
  42. @updateMerger.mergeUpdate.withArgs(@project_id, path, update).callsArg(4)
  43. @handler.newUpdate @user_id, @project.name, path, update, "", =>
  44. @projectCreationHandler.createBlankProject.called.should.equal false
  45. done()
  46. it 'should create a new project if one does not already exit', (done)->
  47. @projectLocator.findUsersProjectByName = sinon.stub().callsArgWith(2)
  48. path = "/"
  49. @handler.newUpdate @user_id, @project.name, path, {}, "", =>
  50. @projectCreationHandler.createBlankProject.calledWith(@user_id, @project.name).should.equal true
  51. done()
  52. it 'should set the root doc automatically if a new project is created', (done)->
  53. @projectLocator.findUsersProjectByName = sinon.stub().callsArgWith(2)
  54. @handler._rootDocTimeoutLength = 0
  55. path = "/"
  56. @handler.newUpdate @user_id, @project.name, path, {}, "", =>
  57. setTimeout (=>
  58. @rootDocManager.setRootDocAutomatically.calledWith(@project._id).should.equal true
  59. done()
  60. ), 1
  61. describe 'getting a delete :', ->
  62. it 'should call versioning api to take snapshot for backup reasons', (done)->
  63. update = {}
  64. @versioningApiHandler.takeSnapshot = sinon.stub()
  65. @versioningApiHandler.takeSnapshot.callsArg(3)
  66. @handler.deleteUpdate @user_id,@project.name, "", "", =>
  67. @projectDeleter.markAsDeletedByExternalSource.calledWith(@project._id).should.equal false
  68. @versioningApiHandler.takeSnapshot.calledWith(@project_id).should.equal true
  69. done()
  70. it 'should call deleteEntity in the collaberation manager', (done)->
  71. path = "/delete/this"
  72. update = {}
  73. @updateMerger.deleteUpdate = sinon.stub().callsArg(3)
  74. @handler.deleteUpdate @user_id, @project.name,path, "sl_req_id", =>
  75. @projectDeleter.markAsDeletedByExternalSource.calledWith(@project._id).should.equal false
  76. @updateMerger.deleteUpdate.calledWith(@project_id, path).should.equal true
  77. done()
  78. it 'should mark the project as deleted by external source if path is a single slash', (done)->
  79. path = "/"
  80. @handler.deleteUpdate @user_id, @project.name, path, "sl_req_id", =>
  81. @projectDeleter.markAsDeletedByExternalSource.calledWith(@project._id).should.equal true
  82. done()