version entity additions

This commit is contained in:
Hayden Faulds 2017-11-10 14:54:56 +00:00
parent 569912a832
commit a3420b1236
4 changed files with 151 additions and 45 deletions

View file

@ -102,11 +102,17 @@ module.exports = ProjectManager =
handleDocUpdate = (update, cb) ->
doc_id = update.id
DocumentManager.renameDocWithLock project_id, doc_id, user_id, update, cb
if update.docLines?
RedisManager.addEntity project_id, 'doc', doc_id, user_id, update, cb
else
DocumentManager.renameDocWithLock project_id, doc_id, user_id, update, cb
handleFileUpdate = (update, cb) ->
file_id = update.id
RedisManager.renameFile project_id, file_id, user_id, update, cb
if update.url?
RedisManager.addEntity project_id, 'file', file_id, user_id, update, cb
else
RedisManager.renameFile project_id, file_id, user_id, update, cb
async.each docUpdates, handleDocUpdate, (error) ->
return callback(error) if error?

View file

@ -300,6 +300,21 @@ module.exports = RedisManager =
rclient.rpush projectHistoryKeys.projectHistoryOps({project_id}), jsonUpdate, callback
addEntity: (project_id, entity_type, entitiy_id, user_id, update, callback = (error) ->) ->
update =
pathname: update.pathname
docLines: update.docLines
url: update.url
meta:
user_id: user_id
ts: new Date()
update[entity_type] = entitiy_id
logger.log {project_id, update}, "queue add operation to project-history"
jsonUpdate = JSON.stringify(update)
rclient.rpush projectHistoryKeys.projectHistoryOps({project_id}), jsonUpdate, callback
clearUnflushedTime: (doc_id, callback = (error) ->) ->
rclient.del keys.unflushedTime(doc_id:doc_id), callback

View file

@ -19,55 +19,113 @@ describe "ProjectManager", ->
@callback = sinon.stub()
describe "updateProjectWithLocks", ->
beforeEach ->
@firstDocUpdate =
id: 1
update: 'foo'
@secondDocUpdate =
id: 2
update: 'bar'
@docUpdates = [ @firstDocUpdate, @secondDocUpdate ]
@firstFileUpdate =
id: 2
update: 'bar'
@fileUpdates = [ @firstFileUpdate ]
@DocumentManager.renameDocWithLock = sinon.stub().yields()
@RedisManager.renameFile = sinon.stub().yields()
describe "successfully", ->
describe "rename operations", ->
beforeEach ->
@ProjectManager.updateProjectWithLocks @project_id, @user_id, @docUpdates, @fileUpdates, @callback
@firstDocUpdate =
id: 1
pathname: 'foo'
newPathname: 'foo'
@secondDocUpdate =
id: 2
pathname: 'bar'
newPathname: 'bar2'
@docUpdates = [ @firstDocUpdate, @secondDocUpdate ]
@firstFileUpdate =
id: 2
pathname: 'bar'
newPathname: 'bar2'
@fileUpdates = [ @firstFileUpdate ]
@DocumentManager.renameDocWithLock = sinon.stub().yields()
@RedisManager.renameFile = sinon.stub().yields()
it "should rename the docs in the updates", ->
@DocumentManager.renameDocWithLock
.calledWith(@project_id, @firstDocUpdate.id, @user_id, @firstDocUpdate)
.should.equal true
@DocumentManager.renameDocWithLock
.calledWith(@project_id, @secondDocUpdate.id, @user_id, @secondDocUpdate)
.should.equal true
describe "successfully", ->
beforeEach ->
@ProjectManager.updateProjectWithLocks @project_id, @user_id, @docUpdates, @fileUpdates, @callback
it "should rename the files in the updates", ->
@RedisManager.renameFile
.calledWith(@project_id, @firstFileUpdate.id, @user_id, @firstFileUpdate)
.should.equal true
it "should rename the docs in the updates", ->
@DocumentManager.renameDocWithLock
.calledWith(@project_id, @firstDocUpdate.id, @user_id, @firstDocUpdate)
.should.equal true
@DocumentManager.renameDocWithLock
.calledWith(@project_id, @secondDocUpdate.id, @user_id, @secondDocUpdate)
.should.equal true
it "should call the callback", ->
@callback.called.should.equal true
it "should rename the files in the updates", ->
@RedisManager.renameFile
.calledWith(@project_id, @firstFileUpdate.id, @user_id, @firstFileUpdate)
.should.equal true
describe "when renaming a doc fails", ->
it "should call the callback", ->
@callback.called.should.equal true
describe "when renaming a doc fails", ->
beforeEach ->
@error = new Error('error')
@DocumentManager.renameDocWithLock = sinon.stub().yields(@error)
@ProjectManager.updateProjectWithLocks @project_id, @user_id, @docUpdates, @fileUpdates, @callback
it "should call the callback with the error", ->
@callback.calledWith(@error).should.equal true
describe "when renaming a file fails", ->
beforeEach ->
@error = new Error('error')
@RedisManager.renameFile = sinon.stub().yields(@error)
@ProjectManager.updateProjectWithLocks @project_id, @user_id, @docUpdates, @fileUpdates, @callback
it "should call the callback with the error", ->
@callback.calledWith(@error).should.equal true
describe "add operations", ->
beforeEach ->
@error = new Error('error')
@DocumentManager.renameDocWithLock = sinon.stub().yields(@error)
@ProjectManager.updateProjectWithLocks @project_id, @user_id, @docUpdates, @fileUpdates, @callback
@firstDocUpdate =
id: 1
docLines: "a\nb"
@secondDocUpdate =
id: 2
docLines: "a\nb"
@docUpdates = [ @firstDocUpdate, @secondDocUpdate ]
@firstFileUpdate =
id: 2
url: 'filestore.example.com/2'
@fileUpdates = [ @firstFileUpdate ]
@RedisManager.addEntity = sinon.stub().yields()
it "should call the callback with the error", ->
@callback.calledWith(@error).should.equal true
describe "successfully", ->
beforeEach ->
@ProjectManager.updateProjectWithLocks @project_id, @user_id, @docUpdates, @fileUpdates, @callback
describe "when renaming a file fails", ->
beforeEach ->
@error = new Error('error')
@RedisManager.renameFile = sinon.stub().yields(@error)
@ProjectManager.updateProjectWithLocks @project_id, @user_id, @docUpdates, @fileUpdates, @callback
it "should add the docs in the updates", ->
@RedisManager.addEntity
.calledWith(@project_id, 'doc', @firstDocUpdate.id, @user_id, @firstDocUpdate)
.should.equal true
@RedisManager.addEntity
.calledWith(@project_id, 'doc', @secondDocUpdate.id, @user_id, @secondDocUpdate)
.should.equal true
it "should add the files in the updates", ->
@RedisManager.addEntity
.calledWith(@project_id, 'file', @firstFileUpdate.id, @user_id, @firstFileUpdate)
.should.equal true
it "should call the callback", ->
@callback.called.should.equal true
describe "when adding a doc fails", ->
beforeEach ->
@error = new Error('error')
@RedisManager.addEntity = sinon.stub().yields(@error)
@ProjectManager.updateProjectWithLocks @project_id, @user_id, @docUpdates, @fileUpdates, @callback
it "should call the callback with the error", ->
@callback.calledWith(@error).should.equal true
describe "when adding a file fails", ->
beforeEach ->
@error = new Error('error')
@RedisManager.addEntity = sinon.stub().yields(@error)
@ProjectManager.updateProjectWithLocks @project_id, @user_id, @docUpdates, @fileUpdates, @callback
it "should call the callback with the error", ->
@callback.calledWith(@error).should.equal true
it "should call the callback with the error", ->
@callback.calledWith(@error).should.equal true

View file

@ -739,3 +739,30 @@ describe "RedisManager", ->
@rclient.rpush
.calledWith("ProjectHistory:Ops:#{@project_id}", JSON.stringify(update))
.should.equal true
describe "addEntity", ->
beforeEach (done) ->
@rclient.rpush = sinon.stub().yields()
@entity_id = 1234
@entity_type = 'type'
@update =
pathname: @pathname = '/old'
docLines: @docLines = 'a\nb'
url: @url = 'filestore.example.com'
@RedisManager.addEntity @project_id, @entity_type, @entity_id, @userId, @update, done
it "should queue an update", ->
update =
pathname: @pathname
docLines: @docLines
url: @url
meta:
user_id: @user_id
ts: new Date()
update[@entity_type] = @entity_id
@rclient.rpush
.calledWith("ProjectHistory:Ops:#{@project_id}", JSON.stringify(update))
.should.equal true