2014-02-12 10:23:40 +00:00
|
|
|
should = require('chai').should()
|
|
|
|
modulePath = "../../../../app/js/Features/Project/ProjectDeleter"
|
|
|
|
SandboxedModule = require('sandboxed-module')
|
|
|
|
sinon = require('sinon')
|
|
|
|
|
|
|
|
|
|
|
|
describe 'Project deleter', ->
|
|
|
|
|
|
|
|
beforeEach ->
|
2014-04-07 12:47:10 +00:00
|
|
|
@project_id = "12312"
|
|
|
|
@project =
|
|
|
|
_id: @project_id
|
|
|
|
rootFolder:[]
|
|
|
|
collaberator_refs:["collab1", "collab2"]
|
|
|
|
readOnly_refs:["readOnly1", "readOnly2"]
|
|
|
|
owner_ref:"owner ref here"
|
2014-02-12 10:23:40 +00:00
|
|
|
|
|
|
|
@Project =
|
|
|
|
update: sinon.stub().callsArgWith(3)
|
|
|
|
remove: sinon.stub().callsArgWith(1)
|
2014-04-07 12:47:10 +00:00
|
|
|
findById: sinon.stub().callsArgWith(1, null, @project)
|
|
|
|
applyToAllFilesRecursivly: sinon.stub()
|
|
|
|
@documentUpdaterHandler =
|
|
|
|
flushProjectToMongoAndDelete:sinon.stub().callsArgWith(1)
|
|
|
|
@AutomaticSnapshotManager =
|
|
|
|
unmarkProjectAsUpdated:sinon.stub().callsArgWith(1)
|
2014-02-12 10:23:40 +00:00
|
|
|
@editorController = notifyUsersProjectHasBeenDeletedOrRenamed : sinon.stub().callsArgWith(1)
|
2014-04-07 12:47:10 +00:00
|
|
|
@TagsHandler =
|
|
|
|
removeProjectFromAllTags: sinon.stub().callsArgWith(2)
|
2014-02-12 10:23:40 +00:00
|
|
|
@deleter = SandboxedModule.require modulePath, requires:
|
|
|
|
"../Editor/EditorController": @editorController
|
|
|
|
'../../models/Project':{Project:@Project}
|
2014-04-07 12:47:10 +00:00
|
|
|
'../DocumentUpdater/DocumentUpdaterHandler': @documentUpdaterHandler
|
|
|
|
'../Versioning/AutomaticSnapshotManager':@AutomaticSnapshotManager
|
|
|
|
"../Tags/TagsHandler":@TagsHandler
|
2014-02-12 10:23:40 +00:00
|
|
|
'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 "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()
|
2014-04-07 12:47:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
describe "deleteProject", ->
|
|
|
|
beforeEach ->
|
|
|
|
@Project.remove.callsArgWith(1)
|
|
|
|
|
|
|
|
it "should flushProjectToMongoAndDelete in doc updater", (done)->
|
|
|
|
@deleter.deleteProject @project_id, =>
|
|
|
|
@documentUpdaterHandler.flushProjectToMongoAndDelete.calledWith(@project_id).should.equal true
|
|
|
|
done()
|
|
|
|
|
|
|
|
it "should remove the project", (done)->
|
|
|
|
@deleter.deleteProject @project_id, =>
|
|
|
|
@Project.remove.calledWith(_id:@project_id).should.equal true
|
|
|
|
done()
|
|
|
|
|
|
|
|
it "should removeProjectFromAllTags", (done)->
|
|
|
|
@deleter.deleteProject @project_id, =>
|
|
|
|
@TagsHandler.removeProjectFromAllTags.calledWith(@project.owner_ref, @project_id).should.equal true
|
|
|
|
@TagsHandler.removeProjectFromAllTags.calledWith(@project.collaberator_refs[0], @project_id).should.equal true
|
|
|
|
@TagsHandler.removeProjectFromAllTags.calledWith(@project.collaberator_refs[1], @project_id).should.equal true
|
|
|
|
@TagsHandler.removeProjectFromAllTags.calledWith(@project.readOnly_refs[0], @project_id).should.equal true
|
|
|
|
@TagsHandler.removeProjectFromAllTags.calledWith(@project.readOnly_refs[1], @project_id).should.equal true
|
|
|
|
|
|
|
|
done()
|
|
|
|
|