ProjectDuplicatorTests.coffee 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. sinon = require('sinon')
  2. chai = require('chai').should()
  3. modulePath = "../../../../app/js/Features/Project/ProjectDuplicator.js"
  4. SandboxedModule = require('sandboxed-module')
  5. describe 'duplicating a project', ->
  6. beforeEach ->
  7. @level2folder =
  8. name: "level2folderName"
  9. _id:"level2folderId"
  10. docs:[{name:"level2folderDocName",docLines:"level2Doc"}]
  11. folders:[]
  12. fileRefs:[{name:"file2", _id:"file2"}]
  13. @level1folder =
  14. name:"level1folder"
  15. _id:"level1folderId"
  16. docs:[{name:"level1folderDocName",docLines:"level1Doc"}]
  17. folders:[@level2folder]
  18. fileRefs:[{name:"file1", _id:"file1"}]
  19. @rootFolder =
  20. name:"rootFolder"
  21. _id:"rootFolderId"
  22. docs:[{name:"rootDocHere", docLines:["level0Doc"]}]
  23. folders:[@level1folder]
  24. fileRefs:[{name:"file0", _id:"file0"}]
  25. @project =
  26. _id: @project_id = "this_is_the_old_project"
  27. rootDoc_id: "rootDoc_id"
  28. rootFolder:[@rootFolder]
  29. compiler: "this_is_a_Compiler"
  30. @owner = {_id:"this_is_the_owner"}
  31. @stubbedNewProject =
  32. _id:"new_project_id"
  33. readOnly_refs:[]
  34. collaberator_refs:[]
  35. rootFolder:[
  36. {_id:"new_root_folder_id"}
  37. ]
  38. @foundRootDoc = {_id:"rootDocId", name:"rootDocHere"}
  39. @creationHandler =
  40. createBlankProject : sinon.stub().callsArgWith(2, null, @stubbedNewProject)
  41. @newFolder = {_id: "newFolderId"}
  42. @locator =
  43. findRootDoc : sinon.stub().callsArgWith(1, null, @foundRootDoc)
  44. @projectOptionsHandler =
  45. setCompiler : sinon.stub()
  46. @entityHandler =
  47. addDoc: sinon.stub().callsArgWith(4, null, {name:"somDoc"})
  48. copyFileFromExistingProject: sinon.stub().callsArgWith(4)
  49. setRootDoc: sinon.stub()
  50. addFolder: sinon.stub().callsArgWith(3, null, @newFolder)
  51. @DocumentUpdaterHandler =
  52. flushProjectToMongo: sinon.stub().callsArg(1)
  53. @Project =
  54. findById: sinon.stub().callsArgWith(1, null, @project)
  55. @duplicator = SandboxedModule.require modulePath, requires:
  56. '../../models/Project':{Project:@Project}
  57. "../DocumentUpdater/DocumentUpdaterHandler": @DocumentUpdaterHandler
  58. './ProjectCreationHandler': @creationHandler
  59. './ProjectEntityHandler': @entityHandler
  60. './ProjectLocator': @locator
  61. './ProjectOptionsHandler': @projectOptionsHandler
  62. 'logger-sharelatex':{log:->}
  63. it "should look up the original project", (done) ->
  64. newProjectName = "someProj"
  65. @duplicator.duplicate @owner, @project_id, newProjectName, (err, newProject)=>
  66. @Project.findById.calledWith(@project_id).should.equal true
  67. done()
  68. it "should flush the original project to mongo", (done) ->
  69. newProjectName = "someProj"
  70. @duplicator.duplicate @owner, @project_id, newProjectName, (err, newProject)=>
  71. @DocumentUpdaterHandler.flushProjectToMongo.calledWith(@project_id).should.equal true
  72. done()
  73. it 'should create a blank project', (done)->
  74. newProjectName = "someProj"
  75. @duplicator.duplicate @owner, @project_id, newProjectName, (err, newProject)=>
  76. newProject._id.should.equal @stubbedNewProject._id
  77. @creationHandler.createBlankProject.calledWith(@owner._id, newProjectName).should.equal true
  78. done()
  79. it 'should use the same compiler', (done)->
  80. @entityHandler.addDoc.callsArgWith(4, null, @rootFolder.docs[0])
  81. @duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
  82. @projectOptionsHandler.setCompiler.calledWith(@stubbedNewProject._id, @project.compiler).should.equal true
  83. done()
  84. it 'should use the same root doc', (done)->
  85. @entityHandler.addDoc.callsArgWith(4, null, @rootFolder.docs[0])
  86. @duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
  87. @entityHandler.setRootDoc.calledWith(@stubbedNewProject, @rootFolder.docs[0]._id).should.equal true
  88. done()
  89. it 'should not copy the collaberators or read only refs', (done)->
  90. @duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
  91. newProject.collaberator_refs.length.should.equal 0
  92. newProject.readOnly_refs.length.should.equal 0
  93. done()
  94. it 'should copy all the folders', (done)->
  95. @duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
  96. @entityHandler.addFolder.calledWith(@stubbedNewProject, @stubbedNewProject.rootFolder[0]._id, @level1folder.name).should.equal true
  97. @entityHandler.addFolder.calledWith(@stubbedNewProject, @newFolder._id, @level2folder.name).should.equal true
  98. @entityHandler.addFolder.callCount.should.equal 2
  99. done()
  100. it 'should copy all the docs', (done)->
  101. @duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
  102. @entityHandler.addDoc.calledWith(@stubbedNewProject, @stubbedNewProject.rootFolder[0]._id, @rootFolder.docs[0].name, @rootFolder.docs[0].lines).should.equal true
  103. @entityHandler.addDoc.calledWith(@stubbedNewProject, @newFolder._id, @level1folder.docs[0].name, @level1folder.docs[0].lines).should.equal true
  104. @entityHandler.addDoc.calledWith(@stubbedNewProject, @newFolder._id, @level2folder.docs[0].name, @level2folder.docs[0].lines).should.equal true
  105. done()
  106. it 'should copy all the files', (done)->
  107. @duplicator.duplicate @owner, @project_id, "", (err, newProject)=>
  108. @entityHandler.copyFileFromExistingProject.calledWith(@stubbedNewProject, @stubbedNewProject.rootFolder[0]._id, @project._id, @rootFolder.fileRefs[0]).should.equal true
  109. @entityHandler.copyFileFromExistingProject.calledWith(@stubbedNewProject, @newFolder._id, @project._id, @level1folder.fileRefs[0]).should.equal true
  110. @entityHandler.copyFileFromExistingProject.calledWith(@stubbedNewProject, @newFolder._id, @project._id, @level2folder.fileRefs[0]).should.equal true
  111. done()