TpdsUpdateHandlerTests.coffee 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 'TpdsUpdateHandler', ->
  6. beforeEach ->
  7. @requestQueuer = {}
  8. @updateMerger =
  9. deleteUpdate: (user_id, path, source, cb)->cb()
  10. mergeUpdate:(user_id, project_id, path, update, source, cb)->cb()
  11. @editorController = {}
  12. @project_id = "dsjajilknaksdn"
  13. @project = {_id:@project_id, name:"projectNameHere"}
  14. @projectLocator = findUsersProjectByName:sinon.stub().callsArgWith(2, null, @project)
  15. @projectCreationHandler =
  16. createBlankProject : sinon.stub().callsArgWith(2, null, @project)
  17. @projectDeleter = {markAsDeletedByExternalSource:sinon.stub().callsArgWith(1)}
  18. @rootDocManager = setRootDocAutomatically:sinon.stub()
  19. @FileTypeManager =
  20. shouldIgnore: sinon.stub().callsArgWith(1, null, false)
  21. @handler = SandboxedModule.require modulePath, requires:
  22. './UpdateMerger': @updateMerger
  23. './Editor/EditorController': @editorController
  24. '../Project/ProjectLocator': @projectLocator
  25. '../Project/ProjectCreationHandler':@projectCreationHandler
  26. '../Project/ProjectDeleter': @projectDeleter
  27. "../Project/ProjectRootDocManager" : @rootDocManager
  28. '../Uploads/FileTypeManager': @FileTypeManager
  29. 'logger-sharelatex': log:->
  30. @user_id = "dsad29jlkjas"
  31. @source = "dropbox"
  32. describe 'getting an update', ->
  33. it 'should send the update to the update merger', (done)->
  34. path = "/path/here"
  35. update = {}
  36. @updateMerger.mergeUpdate = sinon.stub()
  37. @updateMerger.mergeUpdate.withArgs(@user_id, @project_id, path, update, @source).callsArg(5)
  38. @handler.newUpdate @user_id, @project.name, path, update, @source, =>
  39. @projectCreationHandler.createBlankProject.called.should.equal false
  40. done()
  41. it 'should create a new project if one does not already exit', (done)->
  42. @projectLocator.findUsersProjectByName = sinon.stub().callsArgWith(2)
  43. path = "/"
  44. @handler.newUpdate @user_id, @project.name, path, {}, @source, =>
  45. @projectCreationHandler.createBlankProject.calledWith(@user_id, @project.name).should.equal true
  46. done()
  47. it 'should set the root doc automatically if a new project is created', (done)->
  48. @projectLocator.findUsersProjectByName = sinon.stub().callsArgWith(2)
  49. @handler._rootDocTimeoutLength = 0
  50. path = "/"
  51. @handler.newUpdate @user_id, @project.name, path, {}, @source, =>
  52. setTimeout (=>
  53. @rootDocManager.setRootDocAutomatically.calledWith(@project._id).should.equal true
  54. done()
  55. ), 1
  56. it 'should not update files that should be ignored', (done) ->
  57. @FileTypeManager.shouldIgnore = sinon.stub().callsArgWith(1, null, true)
  58. @projectLocator.findUsersProjectByName = sinon.stub().callsArgWith(2)
  59. path = "/.gitignore"
  60. @updateMerger.mergeUpdate = sinon.stub()
  61. @handler.newUpdate @user_id, @project.name, path, {}, @source, =>
  62. @updateMerger.mergeUpdate.called.should.equal false
  63. done()
  64. describe 'getting a delete :', ->
  65. it 'should call deleteEntity in the collaberation manager', (done)->
  66. path = "/delete/this"
  67. update = {}
  68. @updateMerger.deleteUpdate = sinon.stub().callsArg(3)
  69. @handler.deleteUpdate @user_id, @project.name, path, @source, =>
  70. @projectDeleter.markAsDeletedByExternalSource.calledWith(@project._id).should.equal false
  71. @updateMerger.deleteUpdate.calledWith(@project_id, path, @source).should.equal true
  72. done()
  73. it 'should mark the project as deleted by external source if path is a single slash', (done)->
  74. path = "/"
  75. @handler.deleteUpdate @user_id, @project.name, path, @source, =>
  76. @projectDeleter.markAsDeletedByExternalSource.calledWith(@project._id).should.equal true
  77. done()