ProjectDeleterTests.coffee 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. should = require('chai').should()
  2. modulePath = "../../../../app/js/Features/Project/ProjectDeleter"
  3. SandboxedModule = require('sandboxed-module')
  4. sinon = require('sinon')
  5. describe 'Project deleter', ->
  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. @deleter = SandboxedModule.require modulePath, requires:
  25. "../Editor/EditorController": @editorController
  26. '../../models/Project':{Project:@Project}
  27. '../DocumentUpdater/DocumentUpdaterHandler': @documentUpdaterHandler
  28. "../Tags/TagsHandler":@TagsHandler
  29. 'logger-sharelatex':
  30. log:->
  31. describe "mark as deleted by external source", ->
  32. project_id = 1234
  33. it 'should update the project with the flag set to true', (done)->
  34. @deleter.markAsDeletedByExternalSource project_id, =>
  35. conditions = {_id:project_id}
  36. update = {deletedByExternalDataSource:true}
  37. @Project.update.calledWith(conditions, update).should.equal true
  38. done()
  39. it 'should tell the editor controler so users are notified', (done)->
  40. @deleter.markAsDeletedByExternalSource project_id, =>
  41. @editorController.notifyUsersProjectHasBeenDeletedOrRenamed.calledWith(project_id).should.equal true
  42. done()
  43. describe "deleteUsersProjects", ->
  44. it "should remove all the projects owned by the user_id", (done)->
  45. user_id = 1234
  46. @deleter.deleteUsersProjects user_id, =>
  47. @Project.remove.calledWith(owner_ref:user_id).should.equal true
  48. done()
  49. describe "archiveProject", ->
  50. beforeEach ->
  51. @Project.update.callsArgWith(2)
  52. it "should flushProjectToMongoAndDelete in doc updater", (done)->
  53. @deleter.archiveProject @project_id, =>
  54. @documentUpdaterHandler.flushProjectToMongoAndDelete.calledWith(@project_id).should.equal true
  55. done()
  56. it "should remove the project", (done)->
  57. @deleter.archiveProject @project_id, =>
  58. @Project.update.calledWith({
  59. _id:@project_id
  60. }, {
  61. $set: { archived: true }
  62. }).should.equal true
  63. done()
  64. it "should removeProjectFromAllTags", (done)->
  65. @deleter.archiveProject @project_id, =>
  66. @TagsHandler.removeProjectFromAllTags.calledWith(@project.owner_ref, @project_id).should.equal true
  67. @TagsHandler.removeProjectFromAllTags.calledWith(@project.collaberator_refs[0], @project_id).should.equal true
  68. @TagsHandler.removeProjectFromAllTags.calledWith(@project.collaberator_refs[1], @project_id).should.equal true
  69. @TagsHandler.removeProjectFromAllTags.calledWith(@project.readOnly_refs[0], @project_id).should.equal true
  70. @TagsHandler.removeProjectFromAllTags.calledWith(@project.readOnly_refs[1], @project_id).should.equal true
  71. done()
  72. describe "restoreProject", ->
  73. beforeEach ->
  74. @Project.update.callsArgWith(2)
  75. it "should unset the archive attribute", (done)->
  76. @deleter.restoreProject @project_id, =>
  77. @Project.update.calledWith({
  78. _id: @project_id
  79. }, {
  80. $unset: { archived: true }
  81. }).should.equal true
  82. done()
  83. describe "findArchivedProjects", ->
  84. beforeEach ->
  85. @projects = ["mock-project"]
  86. @owner_id = "mock-owner-id"
  87. @callback = sinon.stub()
  88. @Project.find = sinon.stub().callsArgWith(2, null, @projects)
  89. @deleter.findArchivedProjects @owner_id, @fields = "name lastModified", @callback
  90. it "should find the archived projects for the owner", ->
  91. @Project.find
  92. .calledWith(owner_ref: @owner_id, archived: true, @fields)
  93. .should.equal true
  94. it "should return the projects", ->
  95. @callback.calledWith(null, @projects).should.equal true