mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-27 02:51:57 +02:00
project duplicator works and tests pass.
not so bad now.
This commit is contained in:
@@ -13,9 +13,8 @@ logger = require("logger-sharelatex")
|
||||
module.exports = ProjectDuplicator =
|
||||
|
||||
_copyDocs: (newProject, originalRootDoc, originalFolder, desFolder, docContents, callback)->
|
||||
console.log "_copyDocs", originalRootDoc
|
||||
setRootDoc = _.once (doc_id)->
|
||||
projectEntityHandler.setRootDoc newProject, doc_id
|
||||
projectEntityHandler.setRootDoc newProject._id, doc_id
|
||||
|
||||
jobs = originalFolder.docs.map (doc)->
|
||||
return (callback)->
|
||||
@@ -34,20 +33,20 @@ module.exports = ProjectDuplicator =
|
||||
jobs = originalFolder.fileRefs.map (file)->
|
||||
return (cb)->
|
||||
projectEntityHandler.copyFileFromExistingProjectWithProject newProject, desFolder._id, originalProject_id, file, cb
|
||||
async.series jobs, callback
|
||||
async.parallelLimit jobs, 5, callback
|
||||
|
||||
|
||||
_copyFolder: (newProject, originalProject_id, originalRootDoc, originalFolder, desFolder, docContents, callback)->
|
||||
ProjectGetter.getProject newProject._id, {rootFolder:true, name:true}, (err, newProject)->
|
||||
_copyFolderRecursivly: (newProject_id, originalProject_id, originalRootDoc, originalFolder, desFolder, docContents, callback)->
|
||||
ProjectGetter.getProject newProject_id, {rootFolder:true, name:true}, (err, newProject)->
|
||||
if err?
|
||||
logger.err project_id:newProject?._id, "could not get project"
|
||||
logger.err project_id:newProject_id, "could not get project"
|
||||
return cb(err)
|
||||
|
||||
jobs = originalFolder.folders.map (childFolder)->
|
||||
return (cb)->
|
||||
projectEntityHandler.addFolderWithProject newProject, desFolder?._id, childFolder.name, (err, newFolder)->
|
||||
return cb(err) if err?
|
||||
ProjectDuplicator._copyFolder newProject, originalProject_id, originalRootDoc, childFolder, newFolder, docContents, cb
|
||||
ProjectDuplicator._copyFolderRecursivly newProject_id, originalProject_id, originalRootDoc, childFolder, newFolder, docContents, cb
|
||||
|
||||
jobs.push (cb)->
|
||||
ProjectDuplicator._copyFiles newProject, originalProject_id, originalFolder, desFolder, cb
|
||||
@@ -56,7 +55,6 @@ module.exports = ProjectDuplicator =
|
||||
|
||||
async.series jobs, callback
|
||||
|
||||
|
||||
duplicate: (owner, originalProject_id, newProjectName, callback)->
|
||||
|
||||
jobs =
|
||||
@@ -76,20 +74,16 @@ module.exports = ProjectDuplicator =
|
||||
logger.err err:err, originalProject_id:originalProject_id, "error duplicating project"
|
||||
return callback(err)
|
||||
{originalProject, newProject, originalRootDoc, docContentsArray} = results
|
||||
originalRootDoc = originalRootDoc[0] #wtf array?
|
||||
|
||||
originalRootDoc = originalRootDoc[0]
|
||||
|
||||
docContents = {}
|
||||
for docContent in docContentsArray
|
||||
docContents[docContent._id] = docContent
|
||||
|
||||
projectOptionsHandler.setCompiler newProject._id, originalProject.compiler, ->
|
||||
console.log originalProject.rootFolder, "originalProject"
|
||||
ProjectDuplicator._copyFolder newProject, originalProject_id, originalRootDoc, originalProject.rootFolder[0], newProject.rootFolder[0], docContents, ->
|
||||
|
||||
ProjectDuplicator._copyFolderRecursivly newProject._id, originalProject_id, originalRootDoc, originalProject.rootFolder[0], newProject.rootFolder[0], docContents, ->
|
||||
if err?
|
||||
logger.err err:err, originalProject_id:originalProject_id, newProjectName:newProjectName, "error cloning project"
|
||||
|
||||
ProjectGetter.getProject newProject._id, {rootFolder:true, name:true}, (err, project)->
|
||||
if err?
|
||||
logger.err err:err, "could not get project for clone"
|
||||
return callback(err)
|
||||
callback(err, newProject)
|
||||
|
||||
callback(err, newProject)
|
||||
|
||||
@@ -25,7 +25,7 @@ describe 'ProjectDuplicator', ->
|
||||
folders:[@level1folder]
|
||||
fileRefs:[{name:"file0", _id:"file0"}]
|
||||
@project =
|
||||
_id: @project_id = "this_is_the_old_project"
|
||||
_id: @old_project_id = "this_is_the_old_project_id"
|
||||
rootDoc_id: "rootDoc_id"
|
||||
rootFolder:[@rootFolder]
|
||||
compiler: "this_is_a_Compiler"
|
||||
@@ -45,7 +45,7 @@ describe 'ProjectDuplicator', ->
|
||||
|
||||
@owner = {_id:"this_is_the_owner"}
|
||||
@stubbedNewProject =
|
||||
_id:"new_project_id"
|
||||
_id: @new_project_id = "new_project_id"
|
||||
readOnly_refs:[]
|
||||
collaberator_refs:[]
|
||||
rootFolder:[
|
||||
@@ -59,7 +59,7 @@ describe 'ProjectDuplicator', ->
|
||||
@newFolder = {_id: "newFolderId"}
|
||||
|
||||
@locator =
|
||||
findRootDoc : sinon.stub().callsArgWith(1, null, @foundRootDoc)
|
||||
findRootDoc : sinon.stub().callsArgWith(1, null, @foundRootDoc, {})
|
||||
|
||||
@projectOptionsHandler =
|
||||
setCompiler : sinon.stub()
|
||||
@@ -76,7 +76,10 @@ describe 'ProjectDuplicator', ->
|
||||
findById: sinon.stub().callsArgWith(1, null, @project)
|
||||
|
||||
@ProjectGetter =
|
||||
getProject: sinon.stub().callsArgWith(2, null, @project)
|
||||
getProject: sinon.stub()
|
||||
|
||||
@ProjectGetter.getProject.withArgs(@old_project_id, sinon.match.any).callsArgWith(2, null, @project)
|
||||
@ProjectGetter.getProject.withArgs(@new_project_id, sinon.match.any).callsArgWith(2, null, @stubbedNewProject)
|
||||
|
||||
@duplicator = SandboxedModule.require modulePath, requires:
|
||||
'../../models/Project':{Project:@Project}
|
||||
@@ -91,58 +94,58 @@ describe 'ProjectDuplicator', ->
|
||||
|
||||
it "should look up the original project", (done) ->
|
||||
newProjectName = "someProj"
|
||||
@duplicator.duplicate @owner, @project_id, newProjectName, (err, newProject)=>
|
||||
@ProjectGetter.getProject.calledWith(@project_id).should.equal true
|
||||
@duplicator.duplicate @owner, @old_project_id, newProjectName, (err, newProject)=>
|
||||
@ProjectGetter.getProject.calledWith(@old_project_id).should.equal true
|
||||
done()
|
||||
|
||||
it "should flush the original project to mongo", (done) ->
|
||||
newProjectName = "someProj"
|
||||
@duplicator.duplicate @owner, @project_id, newProjectName, (err, newProject)=>
|
||||
@DocumentUpdaterHandler.flushProjectToMongo.calledWith(@project_id).should.equal true
|
||||
@duplicator.duplicate @owner, @old_project_id, newProjectName, (err, newProject)=>
|
||||
@DocumentUpdaterHandler.flushProjectToMongo.calledWith(@old_project_id).should.equal true
|
||||
done()
|
||||
|
||||
it 'should create a blank project', (done)->
|
||||
newProjectName = "someProj"
|
||||
@duplicator.duplicate @owner, @project_id, newProjectName, (err, newProject)=>
|
||||
@duplicator.duplicate @owner, @old_project_id, newProjectName, (err, newProject)=>
|
||||
newProject._id.should.equal @stubbedNewProject._id
|
||||
@creationHandler.createBlankProject.calledWith(@owner._id, newProjectName).should.equal true
|
||||
done()
|
||||
|
||||
it 'should use the same compiler', (done)->
|
||||
@entityHandler.addDocWithProject.callsArgWith(4, null, @rootFolder.docs[0])
|
||||
@duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
|
||||
@duplicator.duplicate @owner, @old_project_id, "", (err, newProject)=>
|
||||
@projectOptionsHandler.setCompiler.calledWith(@stubbedNewProject._id, @project.compiler).should.equal true
|
||||
done()
|
||||
|
||||
it 'should use the same root doc', (done)->
|
||||
it 'should use the same root docccccccc', (done)->
|
||||
@entityHandler.addDocWithProject.callsArgWith(4, null, @rootFolder.docs[0])
|
||||
@duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
|
||||
@entityHandler.setRootDoc.calledWith(@stubbedNewProject, @rootFolder.docs[0]._id).should.equal true
|
||||
@duplicator.duplicate @owner, @old_project_id, "", (err, newProject)=>
|
||||
@entityHandler.setRootDoc.calledWith(@stubbedNewProject._id, @rootFolder.docs[0]._id).should.equal true
|
||||
done()
|
||||
|
||||
it 'should not copy the collaberators or read only refs', (done)->
|
||||
@duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
|
||||
@duplicator.duplicate @owner, @old_project_id, "", (err, newProject)=>
|
||||
newProject.collaberator_refs.length.should.equal 0
|
||||
newProject.readOnly_refs.length.should.equal 0
|
||||
done()
|
||||
|
||||
it 'should copy all the folders', (done)->
|
||||
@duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
|
||||
@duplicator.duplicate @owner, @old_project_id, "", (err, newProject)=>
|
||||
@entityHandler.addFolderWithProject.calledWith(@stubbedNewProject, @stubbedNewProject.rootFolder[0]._id, @level1folder.name).should.equal true
|
||||
@entityHandler.addFolderWithProject.calledWith(@stubbedNewProject, @newFolder._id, @level2folder.name).should.equal true
|
||||
@entityHandler.addFolderWithProject.callCount.should.equal 2
|
||||
done()
|
||||
|
||||
it 'should copy all the docs', (done)->
|
||||
@duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
|
||||
@DocstoreManager.getAllDocs.calledWith(@project_id).should.equal true
|
||||
@duplicator.duplicate @owner, @old_project_id, "", (err, newProject)=>
|
||||
@DocstoreManager.getAllDocs.calledWith(@old_project_id).should.equal true
|
||||
@entityHandler.addDocWithProject.calledWith(@stubbedNewProject, @stubbedNewProject.rootFolder[0]._id, @doc0.name, @doc0_lines).should.equal true
|
||||
@entityHandler.addDocWithProject.calledWith(@stubbedNewProject, @newFolder._id, @doc1.name, @doc1_lines).should.equal true
|
||||
@entityHandler.addDocWithProject.calledWith(@stubbedNewProject, @newFolder._id, @doc2.name, @doc2_lines).should.equal true
|
||||
done()
|
||||
|
||||
it 'should copy all the files', (done)->
|
||||
@duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
|
||||
@duplicator.duplicate @owner, @old_project_id, "", (err, newProject)=>
|
||||
@entityHandler.copyFileFromExistingProjectWithProject.calledWith(@stubbedNewProject, @stubbedNewProject.rootFolder[0]._id, @project._id, @rootFolder.fileRefs[0]).should.equal true
|
||||
@entityHandler.copyFileFromExistingProjectWithProject.calledWith(@stubbedNewProject, @newFolder._id, @project._id, @level1folder.fileRefs[0]).should.equal true
|
||||
@entityHandler.copyFileFromExistingProjectWithProject.calledWith(@stubbedNewProject, @newFolder._id, @project._id, @level2folder.fileRefs[0]).should.equal true
|
||||
|
||||
Reference in New Issue
Block a user