move .putElement into ProjectEntityHandler with tests

This commit is contained in:
Henry Oswald
2016-02-24 15:36:39 +00:00
parent a8060109fd
commit 09ac8f8c7a
3 changed files with 117 additions and 58 deletions
@@ -28,6 +28,7 @@ describe 'ProjectEntityHandler', ->
folders:[
{name:"level1", folders:[]}
]
@ProjectUpdateStub = sinon.stub()
@ProjectModel = class Project
constructor:(options)->
@._id = project_id
@@ -35,6 +36,7 @@ describe 'ProjectEntityHandler', ->
@rev = 0
save:(callback)->callback()
rootFolder:[@rootFolder]
@ProjectModel.update = @ProjectUpdateStub
@DocModel = class Doc
constructor:(options)->
@@ -57,8 +59,10 @@ describe 'ProjectEntityHandler', ->
@ProjectModel.getProject = (project_id, fields, callback)=> callback(null, @project)
@ProjectGetter =
getProjectWithOnlyFolders : (project_id, callback)=> callback(null, @project)
@ProjectModel.putElement = (project_id, folder_id, doc, type, callback)-> callback(null, {path:{fileSystem:"somehintg"}})
getProject:sinon.stub()
@projectUpdater = markAsUpdated:sinon.stub()
@projectLocator =
findElement : sinon.stub()
@ProjectEntityHandler = SandboxedModule.require modulePath, requires:
'../../models/Project': Project:@ProjectModel
'../../models/Doc': Doc:@DocModel
@@ -66,10 +70,10 @@ describe 'ProjectEntityHandler', ->
'../../models/File': File:@FileModel
'../FileStore/FileStoreHandler':@FileStoreHandler
'../ThirdPartyDataStore/TpdsUpdateSender':@tpdsUpdateSender
'./ProjectLocator':@projectLocator = {}
'./ProjectLocator': @projectLocator
'../../Features/DocumentUpdater/DocumentUpdaterHandler':@documentUpdaterHandler = {}
'../Docstore/DocstoreManager': @DocstoreManager = {}
'logger-sharelatex': @logger = {log:sinon.stub(), error: sinon.stub()}
'logger-sharelatex': @logger = {log:sinon.stub(), error: sinon.stub(), err:->}
'./ProjectUpdateHandler': @projectUpdater
"./ProjectGetter": @ProjectGetter
@@ -226,7 +230,7 @@ describe 'ProjectEntityHandler', ->
fileSystem: "/somewhere/else.txt"
}
@ProjectEntityHandler._removeElementFromMongoArray = sinon.stub().callsArg(3)
@ProjectModel.putElement = sinon.stub().callsArgWith(4, null, path: @pathAfterMove)
@ProjectEntityHandler._putElement = sinon.stub().callsArgWith(4, null, path: @pathAfterMove)
@tpdsUpdateSender.moveEntity = sinon.stub().callsArg(1)
describe "moving a doc", ->
@@ -259,7 +263,7 @@ describe 'ProjectEntityHandler', ->
.should.equal true
it "should put the element back in the new folder", ->
@ProjectModel.putElement
@ProjectEntityHandler._putElement
.calledWith(
project_id,
folder_id,
@@ -327,7 +331,7 @@ describe 'ProjectEntityHandler', ->
.should.equal true
it "should put the element back in the new folder", ->
@ProjectModel.putElement
@ProjectEntityHandler._putElement
.calledWith(
project_id,
@move_to_folder_id,
@@ -407,7 +411,7 @@ describe 'ProjectEntityHandler', ->
@lines = ['1234','abc']
@path = "/path/to/doc"
@ProjectModel.putElement = sinon.stub().callsArgWith(4, null, {path:{fileSystem:@path}})
@ProjectEntityHandler._putElement = sinon.stub().callsArgWith(4, null, {path:{fileSystem:@path}})
@callback = sinon.stub()
@tpdsUpdateSender.addDoc = sinon.stub().callsArg(1)
@DocstoreManager.updateDoc = sinon.stub().callsArgWith(3, null, true, 0)
@@ -415,12 +419,12 @@ describe 'ProjectEntityHandler', ->
@ProjectEntityHandler.addDoc project_id, folder_id, @name, @lines, @callback
# Created doc
@doc = @ProjectModel.putElement.args[0][2]
@doc = @ProjectEntityHandler._putElement.args[0][2]
@doc.name.should.equal @name
expect(@doc.lines).to.be.undefined
it 'should call put element', ->
@ProjectModel.putElement
@ProjectEntityHandler._putElement
.calledWith(project_id, folder_id, @doc)
.should.equal true
@@ -482,7 +486,7 @@ describe 'ProjectEntityHandler', ->
@ProjectEntityHandler.addFile project_id, folder_id, fileName, @filePath, (err, fileRef, parentFolder)->
it 'should put file into folder by calling put element', (done)->
@ProjectModel.putElement = (passedProject_id, passedFolder_id, passedFileRef, passedType, callback)->
@ProjectEntityHandler._putElement = (passedProject_id, passedFolder_id, passedFileRef, passedType, callback)->
passedProject_id.should.equal project_id
passedFolder_id.should.equal folder_id
passedFileRef.name.should.equal fileName
@@ -492,6 +496,7 @@ describe 'ProjectEntityHandler', ->
@ProjectEntityHandler.addFile project_id, folder_id, fileName, {}, (err, fileRef, parentFolder)->
it 'should return doc and parent folder', (done)->
@ProjectEntityHandler._putElement = sinon.stub().callsArgWith(4, null, {path:{fileSystem:"somehintg"}})
@ProjectEntityHandler.addFile project_id, folder_id, fileName, {}, (err, fileRef, parentFolder)->
parentFolder.should.equal folder_id
fileRef.name.should.equal fileName
@@ -502,7 +507,7 @@ describe 'ProjectEntityHandler', ->
opts =
path : "/somehwere/idsadsds"
project_id : project_id
@ProjectModel.putElement = (project_id, folder_id, doc, type, callback)-> callback(null, {path:{fileSystem:opts.path}})
@ProjectEntityHandler._putElement = (project_id, folder_id, doc, type, callback)-> callback(null, {path:{fileSystem:opts.path}})
@tpdsUpdateSender.addFile = (options)=>
options.project_id.should.equal project_id
@@ -572,7 +577,7 @@ describe 'ProjectEntityHandler', ->
folderName = "folder1234"
it 'should call put element', (done)->
@ProjectModel.putElement = (passedProject_id, passedFolder_id, passedFolder, passedType, callback)->
@ProjectEntityHandler._putElement = (passedProject_id, passedFolder_id, passedFolder, passedType, callback)->
passedProject_id.should.equal project_id
passedFolder_id.should.equal folder_id
passedFolder.name.should.equal folderName
@@ -581,6 +586,7 @@ describe 'ProjectEntityHandler', ->
@ProjectEntityHandler.addFolder project_id, folder_id, folderName, (err, folder, parentFolder)->
it 'should return the folder and parent folder', (done)->
@ProjectEntityHandler._putElement = sinon.stub().callsArgWith(4)
@ProjectEntityHandler.addFolder project_id, folder_id, folderName, (err, folder, parentFolder)->
parentFolder.should.equal folder_id
folder.name.should.equal folderName
@@ -873,14 +879,17 @@ describe 'ProjectEntityHandler', ->
oldFileRef = {name:fileName, _id:"oldFileRef"}
beforeEach ->
@ProjectModel.getProject = (project_id, fields, callback)=> callback(null, {name:@project.name, _id:@project._id})
@ProjectEntityHandler._putElement = sinon.stub().callsArgWith(4, null, {path:{fileSystem:"somehintg"}})
it 'should copy the file in FileStoreHandler', (done)->
@ProjectEntityHandler._putElement = sinon.stub().callsArgWith(4, null, {path:{fileSystem:"somehintg"}})
@ProjectEntityHandler.copyFileFromExistingProject project_id, folder_id, oldProject_id, oldFileRef, (err, fileRef, parentFolder)=>
@FileStoreHandler.copyFile.calledWith(oldProject_id, oldFileRef._id, project_id, fileRef._id).should.equal true
done()
it 'should put file into folder by calling put element', (done)->
@ProjectModel.putElement = (passedProject_id, passedFolder_id, passedFileRef, passedType, callback)->
@ProjectEntityHandler._putElement = (passedProject_id, passedFolder_id, passedFileRef, passedType, callback)->
passedProject_id.should.equal project_id
passedFolder_id.should.equal folder_id
passedFileRef.name.should.equal fileName
@@ -900,7 +909,7 @@ describe 'ProjectEntityHandler', ->
opts =
path : "/somehwere/idsadsds"
project_id : project_id
@ProjectModel.putElement = (project_id, folder_id, doc, type, callback)-> callback(null, {path:{fileSystem:opts.path}})
@ProjectEntityHandler._putElement = (project_id, folder_id, doc, type, callback)-> callback(null, {path:{fileSystem:opts.path}})
@tpdsUpdateSender.addFile = (options)=>
options.project_id.should.equal project_id
@@ -1009,4 +1018,53 @@ describe 'ProjectEntityHandler', ->
@ProjectEntityHandler.unsetRootDoc.called.should.equal false
it "should call the callback", ->
@callback.called.should.equal true
@callback.called.should.equal true
describe "_putElement", ->
beforeEach ->
@project_id = project_id
@project =
_id: ObjectId(project_id)
rootFolder: [_id:ObjectId()]
@folder =
_id: ObjectId()
name: "someFolder"
@doc =
_id: ObjectId()
name: "new.tex"
@path = mongo: "mongo.path", fileSystem: "/file/system/old.tex"
@ProjectGetter.getProject.callsArgWith(2, null, @project)
@projectLocator.findElement.callsArgWith(1, null, @folder, @path)
@ProjectUpdateStub.callsArgWith(3)
describe "updating the project", ->
it "should use the correct mongo path", (done)->
@ProjectEntityHandler._putElement @project_id, @folder._id, @doc, "docs", (err)=>
@ProjectModel.update.args[0][0]._id.should.equal @project_id
assert.deepEqual @ProjectModel.update.args[0][1].$push[@path.mongo+".docs"], @doc
done()
it "should add an s onto the type if not included", (done)->
@ProjectEntityHandler._putElement @project_id, @folder._id, @doc, "doc", (err)=>
assert.deepEqual @ProjectModel.update.args[0][1].$push[@path.mongo+".docs"], @doc
done()
it "should not call update if elemenet is null", (done)->
@ProjectEntityHandler._putElement @project_id, @folder._id, null, "doc", (err)=>
@ProjectModel.update.called.should.equal false
done()
it "should default to root folder insert", (done)->
@ProjectEntityHandler._putElement @project_id, null, @doc, "doc", (err)=>
@projectLocator.findElement.args[0][0].element_id.should.equal @project.rootFolder[0]._id
done()