| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- should = require('chai').should()
- modulePath = "../../../../app/js/Features/Project/ProjectDeleter"
- SandboxedModule = require('sandboxed-module')
- sinon = require('sinon')
- describe 'ProjectDeleter', ->
- beforeEach ->
- @project_id = "12312"
- @project =
- _id: @project_id
- rootFolder:[]
- collaberator_refs:["collab1", "collab2"]
- readOnly_refs:["readOnly1", "readOnly2"]
- owner_ref:"owner ref here"
-
- @Project =
- update: sinon.stub().callsArgWith(3)
- remove: sinon.stub().callsArgWith(1)
- findById: sinon.stub().callsArgWith(1, null, @project)
- applyToAllFilesRecursivly: sinon.stub()
- @documentUpdaterHandler =
- flushProjectToMongoAndDelete:sinon.stub().callsArgWith(1)
- @editorController = notifyUsersProjectHasBeenDeletedOrRenamed : sinon.stub().callsArgWith(1)
- @TagsHandler =
- removeProjectFromAllTags: sinon.stub().callsArgWith(2)
- @ProjectGetter =
- getProject:sinon.stub()
- @CollaboratorsHandler =
- removeUserFromAllProjets: sinon.stub().yields()
- @deleter = SandboxedModule.require modulePath, requires:
- "../Editor/EditorController": @editorController
- '../../models/Project':{Project:@Project}
- '../DocumentUpdater/DocumentUpdaterHandler': @documentUpdaterHandler
- "../Tags/TagsHandler":@TagsHandler
- "../FileStore/FileStoreHandler": @FileStoreHandler = {}
- "../Collaborators/CollaboratorsHandler": @CollaboratorsHandler
- "./ProjectGetter": @ProjectGetter
- 'logger-sharelatex':
- log:->
- describe "mark as deleted by external source", ->
- project_id = 1234
- it 'should update the project with the flag set to true', (done)->
- @deleter.markAsDeletedByExternalSource project_id, =>
- conditions = {_id:project_id}
- update = {deletedByExternalDataSource:true}
- @Project.update.calledWith(conditions, update).should.equal true
- done()
- it 'should tell the editor controler so users are notified', (done)->
- @deleter.markAsDeletedByExternalSource project_id, =>
- @editorController.notifyUsersProjectHasBeenDeletedOrRenamed.calledWith(project_id).should.equal true
- done()
-
- describe "unmarkAsDeletedByExternalSource", ->
- beforeEach ->
- @Project.update = sinon.stub().callsArg(3)
- @callback = sinon.stub()
- @project = {
- _id: @project_id
- }
- @deleter.unmarkAsDeletedByExternalSource @project_id, @callback
-
- it "should remove the flag from the project", ->
- @Project.update
- .calledWith({_id: @project_id}, {deletedByExternalDataSource:false})
- .should.equal true
- describe "deleteUsersProjects", ->
- it "should remove all the projects owned by the user_id", (done)->
- user_id = 1234
- @deleter.deleteUsersProjects user_id, =>
- @Project.remove.calledWith(owner_ref:user_id).should.equal true
- done()
- it "should remove all the projects the user is a collaborator of", (done)->
- user_id = 1234
- @deleter.deleteUsersProjects user_id, =>
- @CollaboratorsHandler.removeUserFromAllProjets.calledWith(user_id).should.equal true
- done()
- describe "deleteProject", ->
- beforeEach (done) ->
- @project_id = "mock-project-id-123"
- @deleter.archiveProject = sinon.stub().callsArg(1)
- @deleter.deleteProject @project_id, done
- it "should archive the project to clean it up", ->
- @deleter.archiveProject
- .calledWith(@project_id)
- .should.equal true
- it "should remove the project from Mongo", ->
- @Project.remove
- .calledWith(_id: @project_id)
- .should.equal true
- describe "archiveProject", ->
- beforeEach ->
- @CollaboratorsHandler.getMemberIds = sinon.stub()
- @CollaboratorsHandler.getMemberIds.withArgs(@project_id).yields(null, ["member-id-1", "member-id-2"])
- @ProjectGetter.getProject.callsArgWith(2, null, @project)
- @Project.update.callsArgWith(2)
- it "should flushProjectToMongoAndDelete in doc updater", (done)->
- @deleter.archiveProject @project_id, =>
- @documentUpdaterHandler.flushProjectToMongoAndDelete.calledWith(@project_id).should.equal true
- done()
- it "should remove the project", (done)->
- @deleter.archiveProject @project_id, =>
- @Project.update.calledWith({
- _id:@project_id
- }, {
- $set: { archived: true }
- }).should.equal true
- done()
- it "should removeProjectFromAllTags", (done)->
- @deleter.archiveProject @project_id, =>
- @TagsHandler.removeProjectFromAllTags.calledWith("member-id-1", @project_id).should.equal true
- @TagsHandler.removeProjectFromAllTags.calledWith("member-id-2", @project_id).should.equal true
- done()
- describe "restoreProject", ->
- beforeEach ->
- @Project.update.callsArgWith(2)
- it "should unset the archive attribute", (done)->
- @deleter.restoreProject @project_id, =>
- @Project.update.calledWith({
- _id: @project_id
- }, {
- $unset: { archived: true }
- }).should.equal true
- done()
|