ProjectDeleterTests.coffee 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. should = require('chai').should()
  2. modulePath = "../../../../app/js/Features/Project/ProjectDeleter"
  3. SandboxedModule = require('sandboxed-module')
  4. sinon = require('sinon')
  5. describe 'ProjectDeleter', ->
  6. beforeEach ->
  7. @project_id = "12312"
  8. @project =
  9. _id: @project_id
  10. rootFolder:[]
  11. collaberator_refs:["collab1", "collab2"]
  12. readOnly_refs:["readOnly1", "readOnly2"]
  13. owner_ref:"owner ref here"
  14. @Project =
  15. update: sinon.stub().callsArgWith(3)
  16. remove: sinon.stub().callsArgWith(1)
  17. findById: sinon.stub().callsArgWith(1, null, @project)
  18. applyToAllFilesRecursivly: sinon.stub()
  19. @documentUpdaterHandler =
  20. flushProjectToMongoAndDelete:sinon.stub().callsArgWith(1)
  21. @editorController = notifyUsersProjectHasBeenDeletedOrRenamed : sinon.stub().callsArgWith(1)
  22. @TagsHandler =
  23. removeProjectFromAllTags: sinon.stub().callsArgWith(2)
  24. @ProjectGetter =
  25. getProject:sinon.stub()
  26. @CollaboratorsHandler =
  27. removeUserFromAllProjets: sinon.stub().yields()
  28. @deleter = SandboxedModule.require modulePath, requires:
  29. "../Editor/EditorController": @editorController
  30. '../../models/Project':{Project:@Project}
  31. '../DocumentUpdater/DocumentUpdaterHandler': @documentUpdaterHandler
  32. "../Tags/TagsHandler":@TagsHandler
  33. "../FileStore/FileStoreHandler": @FileStoreHandler = {}
  34. "../Collaborators/CollaboratorsHandler": @CollaboratorsHandler
  35. "./ProjectGetter": @ProjectGetter
  36. 'logger-sharelatex':
  37. log:->
  38. describe "mark as deleted by external source", ->
  39. project_id = 1234
  40. it 'should update the project with the flag set to true', (done)->
  41. @deleter.markAsDeletedByExternalSource project_id, =>
  42. conditions = {_id:project_id}
  43. update = {deletedByExternalDataSource:true}
  44. @Project.update.calledWith(conditions, update).should.equal true
  45. done()
  46. it 'should tell the editor controler so users are notified', (done)->
  47. @deleter.markAsDeletedByExternalSource project_id, =>
  48. @editorController.notifyUsersProjectHasBeenDeletedOrRenamed.calledWith(project_id).should.equal true
  49. done()
  50. describe "unmarkAsDeletedByExternalSource", ->
  51. beforeEach ->
  52. @Project.update = sinon.stub().callsArg(3)
  53. @callback = sinon.stub()
  54. @project = {
  55. _id: @project_id
  56. }
  57. @deleter.unmarkAsDeletedByExternalSource @project_id, @callback
  58. it "should remove the flag from the project", ->
  59. @Project.update
  60. .calledWith({_id: @project_id}, {deletedByExternalDataSource:false})
  61. .should.equal true
  62. describe "deleteUsersProjects", ->
  63. it "should remove all the projects owned by the user_id", (done)->
  64. user_id = 1234
  65. @deleter.deleteUsersProjects user_id, =>
  66. @Project.remove.calledWith(owner_ref:user_id).should.equal true
  67. done()
  68. it "should remove all the projects the user is a collaborator of", (done)->
  69. user_id = 1234
  70. @deleter.deleteUsersProjects user_id, =>
  71. @CollaboratorsHandler.removeUserFromAllProjets.calledWith(user_id).should.equal true
  72. done()
  73. describe "deleteProject", ->
  74. beforeEach (done) ->
  75. @project_id = "mock-project-id-123"
  76. @deleter.archiveProject = sinon.stub().callsArg(1)
  77. @deleter.deleteProject @project_id, done
  78. it "should archive the project to clean it up", ->
  79. @deleter.archiveProject
  80. .calledWith(@project_id)
  81. .should.equal true
  82. it "should remove the project from Mongo", ->
  83. @Project.remove
  84. .calledWith(_id: @project_id)
  85. .should.equal true
  86. describe "archiveProject", ->
  87. beforeEach ->
  88. @CollaboratorsHandler.getMemberIds = sinon.stub()
  89. @CollaboratorsHandler.getMemberIds.withArgs(@project_id).yields(null, ["member-id-1", "member-id-2"])
  90. @ProjectGetter.getProject.callsArgWith(2, null, @project)
  91. @Project.update.callsArgWith(2)
  92. it "should flushProjectToMongoAndDelete in doc updater", (done)->
  93. @deleter.archiveProject @project_id, =>
  94. @documentUpdaterHandler.flushProjectToMongoAndDelete.calledWith(@project_id).should.equal true
  95. done()
  96. it "should remove the project", (done)->
  97. @deleter.archiveProject @project_id, =>
  98. @Project.update.calledWith({
  99. _id:@project_id
  100. }, {
  101. $set: { archived: true }
  102. }).should.equal true
  103. done()
  104. it "should removeProjectFromAllTags", (done)->
  105. @deleter.archiveProject @project_id, =>
  106. @TagsHandler.removeProjectFromAllTags.calledWith("member-id-1", @project_id).should.equal true
  107. @TagsHandler.removeProjectFromAllTags.calledWith("member-id-2", @project_id).should.equal true
  108. done()
  109. describe "restoreProject", ->
  110. beforeEach ->
  111. @Project.update.callsArgWith(2)
  112. it "should unset the archive attribute", (done)->
  113. @deleter.restoreProject @project_id, =>
  114. @Project.update.calledWith({
  115. _id: @project_id
  116. }, {
  117. $unset: { archived: true }
  118. }).should.equal true
  119. done()