mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-14 20:40:17 -05:00
Allow source and user_id to be included when setting a document
This commit is contained in:
parent
5d45e191f3
commit
4f878e000b
6 changed files with 41 additions and 38 deletions
|
@ -42,7 +42,7 @@ module.exports = DocumentManager =
|
|||
return callback(error) if error?
|
||||
callback null, lines, version, ops
|
||||
|
||||
setDoc: (project_id, doc_id, newLines, _callback = (error) ->) ->
|
||||
setDoc: (project_id, doc_id, newLines, source, user_id, _callback = (error) ->) ->
|
||||
timer = new Metrics.Timer("docManager.setDoc")
|
||||
callback = (args...) ->
|
||||
timer.done()
|
||||
|
@ -68,6 +68,8 @@ module.exports = DocumentManager =
|
|||
v: version
|
||||
meta:
|
||||
type: "external"
|
||||
source: source
|
||||
user_id: user_id
|
||||
UpdateManager.applyUpdates project_id, doc_id, [update], (error) ->
|
||||
return callback(error) if error?
|
||||
DocumentManager.flushDocIfLoaded project_id, doc_id, (error) ->
|
||||
|
@ -114,9 +116,9 @@ module.exports = DocumentManager =
|
|||
UpdateManager = require "./UpdateManager"
|
||||
UpdateManager.lockUpdatesAndDo DocumentManager.getDocAndRecentOps, project_id, doc_id, fromVersion, callback
|
||||
|
||||
setDocWithLock: (project_id, doc_id, lines, callback = (error) ->) ->
|
||||
setDocWithLock: (project_id, doc_id, lines, source, user_id, callback = (error) ->) ->
|
||||
UpdateManager = require "./UpdateManager"
|
||||
UpdateManager.lockUpdatesAndDo DocumentManager.setDoc, project_id, doc_id, lines, callback
|
||||
UpdateManager.lockUpdatesAndDo DocumentManager.setDoc, project_id, doc_id, lines, source, user_id, callback
|
||||
|
||||
flushDocIfLoadedWithLock: (project_id, doc_id, callback = (error) ->) ->
|
||||
UpdateManager = require "./UpdateManager"
|
||||
|
|
|
@ -32,9 +32,11 @@ module.exports = HttpController =
|
|||
doc_id = req.params.doc_id
|
||||
project_id = req.params.project_id
|
||||
lines = req.body.lines
|
||||
logger.log project_id: project_id, doc_id: doc_id, lines: lines, "setting doc via http"
|
||||
source = req.body.source
|
||||
user_id = req.body.user_id
|
||||
logger.log project_id: project_id, doc_id: doc_id, lines: lines, source: source, user_id: user_id, "setting doc via http"
|
||||
timer = new Metrics.Timer("http.setDoc")
|
||||
DocumentManager.setDocWithLock project_id, doc_id, lines, (error) ->
|
||||
DocumentManager.setDocWithLock project_id, doc_id, lines, source, user_id, (error) ->
|
||||
timer.done()
|
||||
return next(error) if error?
|
||||
logger.log project_id: project_id, doc_id: doc_id, "set doc via http"
|
||||
|
|
|
@ -18,6 +18,8 @@ describe "Setting a document", ->
|
|||
v: 0
|
||||
@result = ["one", "one and a half", "two", "three"]
|
||||
@newLines = ["these", "are", "the", "new", "lines"]
|
||||
@source = "dropbox"
|
||||
@user_id = "user-id-123"
|
||||
MockWebApi.insertDoc @project_id, @doc_id, {
|
||||
lines: @lines
|
||||
}
|
||||
|
@ -30,7 +32,7 @@ describe "Setting a document", ->
|
|||
DocUpdaterClient.sendUpdate @project_id, @doc_id, @update, (error) =>
|
||||
throw error if error?
|
||||
setTimeout () =>
|
||||
DocUpdaterClient.setDocLines @project_id, @doc_id, @newLines, (error, res, body) =>
|
||||
DocUpdaterClient.setDocLines @project_id, @doc_id, @newLines, @source, @user_id, (error, res, body) =>
|
||||
@statusCode = res.statusCode
|
||||
done()
|
||||
, 200
|
||||
|
|
|
@ -43,11 +43,13 @@ module.exports = DocUpdaterClient =
|
|||
request.post "http://localhost:3003/project/#{project_id}/doc/#{doc_id}/flush", (error, res, body) ->
|
||||
callback error, res, body
|
||||
|
||||
setDocLines: (project_id, doc_id, lines, callback = (error) ->) ->
|
||||
setDocLines: (project_id, doc_id, lines, source, user_id, callback = (error) ->) ->
|
||||
request.post {
|
||||
url: "http://localhost:3003/project/#{project_id}/doc/#{doc_id}"
|
||||
json:
|
||||
lines: lines
|
||||
source: source
|
||||
user_id: user_id
|
||||
}, (error, res, body) ->
|
||||
callback error, res, body
|
||||
|
||||
|
|
|
@ -22,6 +22,8 @@ describe "DocumentManager - setDoc", ->
|
|||
@version = 42
|
||||
@ops = ["mock-ops"]
|
||||
@callback = sinon.stub()
|
||||
@source = "dropbox"
|
||||
@user_id = "mock-user-id"
|
||||
|
||||
describe "with plain tex lines", ->
|
||||
beforeEach ->
|
||||
|
@ -34,7 +36,7 @@ describe "DocumentManager - setDoc", ->
|
|||
@DiffCodec.diffAsShareJsOp = sinon.stub().callsArgWith(2, null, @ops)
|
||||
@UpdateManager.applyUpdates = sinon.stub().callsArgWith(3, null)
|
||||
@DocumentManager.flushDocIfLoaded = sinon.stub().callsArg(2)
|
||||
@DocumentManager.setDoc @project_id, @doc_id, @afterLines, @callback
|
||||
@DocumentManager.setDoc @project_id, @doc_id, @afterLines, @source, @user_id, @callback
|
||||
|
||||
it "should get the current doc lines", ->
|
||||
@DocumentManager.getDoc
|
||||
|
@ -48,7 +50,20 @@ describe "DocumentManager - setDoc", ->
|
|||
|
||||
it "should apply the diff as a ShareJS op", ->
|
||||
@UpdateManager.applyUpdates
|
||||
.calledWith(@project_id, @doc_id, [doc: @doc_id, v: @version, op: @ops, meta: { type: "external" }])
|
||||
.calledWith(
|
||||
@project_id,
|
||||
@doc_id,
|
||||
[
|
||||
doc: @doc_id,
|
||||
v: @version,
|
||||
op: @ops,
|
||||
meta: {
|
||||
type: "external"
|
||||
source: @source
|
||||
user_id: @user_id
|
||||
}
|
||||
]
|
||||
)
|
||||
.should.equal true
|
||||
|
||||
it "should flush the doc to Mongo", ->
|
||||
|
@ -62,30 +77,6 @@ describe "DocumentManager - setDoc", ->
|
|||
it "should time the execution", ->
|
||||
@Metrics.Timer::done.called.should.equal true
|
||||
|
||||
describe "with json lines", ->
|
||||
beforeEach ->
|
||||
@beforeLines = [text: "before", text: "lines"]
|
||||
@afterLines = ["after", "lines"]
|
||||
|
||||
describe "successfully", ->
|
||||
beforeEach ->
|
||||
@DocumentManager.getDoc = sinon.stub().callsArgWith(2, null, @beforeLines, @version)
|
||||
@DiffCodec.diffAsShareJsOp = sinon.stub().callsArgWith(2, null, @ops)
|
||||
@UpdateManager.applyUpdates = sinon.stub().callsArgWith(3, null)
|
||||
@DocumentManager.flushDocIfLoaded = sinon.stub().callsArg(2)
|
||||
@DocumentManager.setDoc @project_id, @doc_id, @afterLines, @callback
|
||||
|
||||
it "should get the current doc lines", ->
|
||||
@DocumentManager.getDoc
|
||||
.calledWith(@project_id, @doc_id)
|
||||
.should.equal true
|
||||
|
||||
it "should return not try to get a diff", ->
|
||||
@DiffCodec.diffAsShareJsOp.called.should.equal false
|
||||
|
||||
it "should call the callback", ->
|
||||
@callback.calledWith(null).should.equal true
|
||||
|
||||
describe "without new lines", ->
|
||||
beforeEach ->
|
||||
@DocumentManager.getDoc = sinon.stub().callsArgWith(2, null, @beforeLines, @version)
|
||||
|
@ -96,7 +87,7 @@ describe "DocumentManager - setDoc", ->
|
|||
|
||||
it "should not try to get the doc lines", ->
|
||||
@DocumentManager.getDoc.called.should.equal false
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -19,6 +19,8 @@ describe "HttpController - setDoc", ->
|
|||
@project_id = "project-id-123"
|
||||
@doc_id = "doc-id-123"
|
||||
@lines = ["one", "two", "three"]
|
||||
@source = "dropbox"
|
||||
@user_id = "user-id-123"
|
||||
@res =
|
||||
send: sinon.stub()
|
||||
@req =
|
||||
|
@ -27,16 +29,18 @@ describe "HttpController - setDoc", ->
|
|||
doc_id: @doc_id
|
||||
body:
|
||||
lines: @lines
|
||||
source: @source
|
||||
user_id: @user_id
|
||||
@next = sinon.stub()
|
||||
|
||||
describe "successfully", ->
|
||||
beforeEach ->
|
||||
@DocumentManager.setDocWithLock = sinon.stub().callsArgWith(3)
|
||||
@DocumentManager.setDocWithLock = sinon.stub().callsArgWith(5)
|
||||
@HttpController.setDoc(@req, @res, @next)
|
||||
|
||||
it "should set the doc", ->
|
||||
@DocumentManager.setDocWithLock
|
||||
.calledWith(@project_id, @doc_id)
|
||||
.calledWith(@project_id, @doc_id, @lines, @source, @user_id)
|
||||
.should.equal true
|
||||
|
||||
it "should return a successful No Content response", ->
|
||||
|
@ -46,7 +50,7 @@ describe "HttpController - setDoc", ->
|
|||
|
||||
it "should log the request", ->
|
||||
@logger.log
|
||||
.calledWith(doc_id: @doc_id, project_id: @project_id, lines: @lines, "setting doc via http")
|
||||
.calledWith(doc_id: @doc_id, project_id: @project_id, lines: @lines, source: @source, user_id: @user_id, "setting doc via http")
|
||||
.should.equal true
|
||||
|
||||
it "should time the request", ->
|
||||
|
@ -54,7 +58,7 @@ describe "HttpController - setDoc", ->
|
|||
|
||||
describe "when an errors occurs", ->
|
||||
beforeEach ->
|
||||
@DocumentManager.setDocWithLock = sinon.stub().callsArgWith(3, new Error("oops"))
|
||||
@DocumentManager.setDocWithLock = sinon.stub().callsArgWith(5, new Error("oops"))
|
||||
@HttpController.setDoc(@req, @res, @next)
|
||||
|
||||
it "should call next with the error", ->
|
||||
|
|
Loading…
Reference in a new issue