mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Return ranges from docupdater to client
This commit is contained in:
parent
5d377713d6
commit
bf2620ee0c
6 changed files with 28 additions and 22 deletions
|
@ -22,7 +22,7 @@ module.exports = DocumentUpdaterManager =
|
||||||
body = JSON.parse(body)
|
body = JSON.parse(body)
|
||||||
catch error
|
catch error
|
||||||
return callback(error)
|
return callback(error)
|
||||||
callback null, body?.lines, body?.version, body?.ops
|
callback null, body?.lines, body?.version, body?.ranges, body?.ops
|
||||||
else if res.statusCode == 422 # Unprocessable Entity
|
else if res.statusCode == 422 # Unprocessable Entity
|
||||||
err = new Error("doc updater could not load requested ops")
|
err = new Error("doc updater could not load requested ops")
|
||||||
err.statusCode = res.statusCode
|
err.statusCode = res.statusCode
|
||||||
|
|
|
@ -79,7 +79,7 @@ module.exports = WebsocketController =
|
||||||
|
|
||||||
AuthorizationManager.assertClientCanViewProject client, (error) ->
|
AuthorizationManager.assertClientCanViewProject client, (error) ->
|
||||||
return callback(error) if error?
|
return callback(error) if error?
|
||||||
DocumentUpdaterManager.getDocument project_id, doc_id, fromVersion, (error, lines, version, ops) ->
|
DocumentUpdaterManager.getDocument project_id, doc_id, fromVersion, (error, lines, version, ranges, ops) ->
|
||||||
return callback(error) if error?
|
return callback(error) if error?
|
||||||
# Encode any binary bits of data so it can go via WebSockets
|
# Encode any binary bits of data so it can go via WebSockets
|
||||||
# See http://ecmanaut.blogspot.co.uk/2006/07/encoding-decoding-utf8-in-javascript.html
|
# See http://ecmanaut.blogspot.co.uk/2006/07/encoding-decoding-utf8-in-javascript.html
|
||||||
|
@ -93,7 +93,7 @@ module.exports = WebsocketController =
|
||||||
escapedLines.push line
|
escapedLines.push line
|
||||||
AuthorizationManager.addAccessToDoc client, doc_id
|
AuthorizationManager.addAccessToDoc client, doc_id
|
||||||
client.join(doc_id)
|
client.join(doc_id)
|
||||||
callback null, escapedLines, version, ops
|
callback null, escapedLines, version, ops, ranges
|
||||||
logger.log {user_id, project_id, doc_id, fromVersion, client_id: client.id}, "client joined doc"
|
logger.log {user_id, project_id, doc_id, fromVersion, client_id: client.id}, "client joined doc"
|
||||||
|
|
||||||
leaveDoc: (client, doc_id, callback = (error) ->) ->
|
leaveDoc: (client, doc_id, callback = (error) ->) ->
|
||||||
|
|
|
@ -13,6 +13,7 @@ describe "joinDoc", ->
|
||||||
@lines = ["test", "doc", "lines"]
|
@lines = ["test", "doc", "lines"]
|
||||||
@version = 42
|
@version = 42
|
||||||
@ops = ["mock", "doc", "ops"]
|
@ops = ["mock", "doc", "ops"]
|
||||||
|
@ranges = {"mock": "ranges"}
|
||||||
|
|
||||||
describe "when authorised readAndWrite", ->
|
describe "when authorised readAndWrite", ->
|
||||||
before (done) ->
|
before (done) ->
|
||||||
|
@ -24,7 +25,7 @@ describe "joinDoc", ->
|
||||||
cb(e)
|
cb(e)
|
||||||
|
|
||||||
(cb) =>
|
(cb) =>
|
||||||
FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (e, {@doc_id}) =>
|
FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
|
||||||
cb(e)
|
cb(e)
|
||||||
|
|
||||||
(cb) =>
|
(cb) =>
|
||||||
|
@ -43,8 +44,8 @@ describe "joinDoc", ->
|
||||||
.calledWith(@project_id, @doc_id, -1)
|
.calledWith(@project_id, @doc_id, -1)
|
||||||
.should.equal true
|
.should.equal true
|
||||||
|
|
||||||
it "should return the doc lines, version and ops", ->
|
it "should return the doc lines, version, ranges and ops", ->
|
||||||
@returnedArgs.should.deep.equal [@lines, @version, @ops]
|
@returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
|
||||||
|
|
||||||
it "should have joined the doc room", (done) ->
|
it "should have joined the doc room", (done) ->
|
||||||
RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
|
RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
|
||||||
|
@ -61,7 +62,7 @@ describe "joinDoc", ->
|
||||||
cb(e)
|
cb(e)
|
||||||
|
|
||||||
(cb) =>
|
(cb) =>
|
||||||
FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (e, {@doc_id}) =>
|
FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
|
||||||
cb(e)
|
cb(e)
|
||||||
|
|
||||||
(cb) =>
|
(cb) =>
|
||||||
|
@ -80,8 +81,8 @@ describe "joinDoc", ->
|
||||||
.calledWith(@project_id, @doc_id, -1)
|
.calledWith(@project_id, @doc_id, -1)
|
||||||
.should.equal true
|
.should.equal true
|
||||||
|
|
||||||
it "should return the doc lines, version and ops", ->
|
it "should return the doc lines, version, ranges and ops", ->
|
||||||
@returnedArgs.should.deep.equal [@lines, @version, @ops]
|
@returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
|
||||||
|
|
||||||
it "should have joined the doc room", (done) ->
|
it "should have joined the doc room", (done) ->
|
||||||
RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
|
RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
|
||||||
|
@ -98,7 +99,7 @@ describe "joinDoc", ->
|
||||||
cb(e)
|
cb(e)
|
||||||
|
|
||||||
(cb) =>
|
(cb) =>
|
||||||
FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (e, {@doc_id}) =>
|
FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
|
||||||
cb(e)
|
cb(e)
|
||||||
|
|
||||||
(cb) =>
|
(cb) =>
|
||||||
|
@ -117,8 +118,8 @@ describe "joinDoc", ->
|
||||||
.calledWith(@project_id, @doc_id, -1)
|
.calledWith(@project_id, @doc_id, -1)
|
||||||
.should.equal true
|
.should.equal true
|
||||||
|
|
||||||
it "should return the doc lines, version and ops", ->
|
it "should return the doc lines, version, ranges and ops", ->
|
||||||
@returnedArgs.should.deep.equal [@lines, @version, @ops]
|
@returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
|
||||||
|
|
||||||
it "should have joined the doc room", (done) ->
|
it "should have joined the doc room", (done) ->
|
||||||
RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
|
RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
|
||||||
|
@ -140,7 +141,7 @@ describe "joinDoc", ->
|
||||||
cb(e)
|
cb(e)
|
||||||
|
|
||||||
(cb) =>
|
(cb) =>
|
||||||
FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (e, {@doc_id}) =>
|
FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
|
||||||
cb(e)
|
cb(e)
|
||||||
|
|
||||||
(cb) =>
|
(cb) =>
|
||||||
|
@ -159,8 +160,8 @@ describe "joinDoc", ->
|
||||||
.calledWith(@project_id, @doc_id, @fromVersion)
|
.calledWith(@project_id, @doc_id, @fromVersion)
|
||||||
.should.equal true
|
.should.equal true
|
||||||
|
|
||||||
it "should return the doc lines, version and ops", ->
|
it "should return the doc lines, version, ranges and ops", ->
|
||||||
@returnedArgs.should.deep.equal [@lines, @version, @ops]
|
@returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
|
||||||
|
|
||||||
it "should have joined the doc room", (done) ->
|
it "should have joined the doc room", (done) ->
|
||||||
RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
|
RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
|
||||||
|
|
|
@ -32,9 +32,9 @@ module.exports = FixturesManager =
|
||||||
options.lines ||= ["doc", "lines"]
|
options.lines ||= ["doc", "lines"]
|
||||||
options.version ||= 42
|
options.version ||= 42
|
||||||
options.ops ||= ["mock", "ops"]
|
options.ops ||= ["mock", "ops"]
|
||||||
{doc_id, lines, version, ops} = options
|
{doc_id, lines, version, ops, ranges} = options
|
||||||
|
|
||||||
MockDocUpdaterServer.createMockDoc project_id, doc_id, {lines, version, ops}
|
MockDocUpdaterServer.createMockDoc project_id, doc_id, {lines, version, ops, ranges}
|
||||||
MockDocUpdaterServer.run (error) =>
|
MockDocUpdaterServer.run (error) =>
|
||||||
throw error if error?
|
throw error if error?
|
||||||
callback null, {project_id, doc_id, lines, version, ops}
|
callback null, {project_id, doc_id, lines, version, ops}
|
||||||
|
|
|
@ -20,6 +20,9 @@ describe 'DocumentUpdaterManager', ->
|
||||||
'logger-sharelatex': @logger = {log: sinon.stub(), error: sinon.stub(), warn: sinon.stub()}
|
'logger-sharelatex': @logger = {log: sinon.stub(), error: sinon.stub(), warn: sinon.stub()}
|
||||||
'request': @request = {}
|
'request': @request = {}
|
||||||
'redis-sharelatex' : createClient: () => @rclient
|
'redis-sharelatex' : createClient: () => @rclient
|
||||||
|
'metrics-sharelatex': @Metrics =
|
||||||
|
Timer: class Timer
|
||||||
|
done: () ->
|
||||||
|
|
||||||
describe "getDocument", ->
|
describe "getDocument", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
|
@ -31,6 +34,7 @@ describe 'DocumentUpdaterManager', ->
|
||||||
lines: @lines
|
lines: @lines
|
||||||
version: @version
|
version: @version
|
||||||
ops: @ops = ["mock-op-1", "mock-op-2"]
|
ops: @ops = ["mock-op-1", "mock-op-2"]
|
||||||
|
ranges: @ranges = {"mock": "ranges"}
|
||||||
@fromVersion = 2
|
@fromVersion = 2
|
||||||
@request.get = sinon.stub().callsArgWith(1, null, {statusCode: 200}, @body)
|
@request.get = sinon.stub().callsArgWith(1, null, {statusCode: 200}, @body)
|
||||||
@DocumentUpdaterManager.getDocument @project_id, @doc_id, @fromVersion, @callback
|
@DocumentUpdaterManager.getDocument @project_id, @doc_id, @fromVersion, @callback
|
||||||
|
@ -39,8 +43,8 @@ describe 'DocumentUpdaterManager', ->
|
||||||
url = "#{@settings.apis.documentupdater.url}/project/#{@project_id}/doc/#{@doc_id}?fromVersion=#{@fromVersion}"
|
url = "#{@settings.apis.documentupdater.url}/project/#{@project_id}/doc/#{@doc_id}?fromVersion=#{@fromVersion}"
|
||||||
@request.get.calledWith(url).should.equal true
|
@request.get.calledWith(url).should.equal true
|
||||||
|
|
||||||
it "should call the callback with the lines and version", ->
|
it "should call the callback with the lines, version, ranges and ops", ->
|
||||||
@callback.calledWith(null, @lines, @version, @ops).should.equal true
|
@callback.calledWith(null, @lines, @version, @ranges, @ops).should.equal true
|
||||||
|
|
||||||
describe "when the document updater API returns an error", ->
|
describe "when the document updater API returns an error", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
|
|
|
@ -170,11 +170,12 @@ describe 'WebsocketController', ->
|
||||||
@doc_lines = ["doc", "lines"]
|
@doc_lines = ["doc", "lines"]
|
||||||
@version = 42
|
@version = 42
|
||||||
@ops = ["mock", "ops"]
|
@ops = ["mock", "ops"]
|
||||||
|
@ranges = { "mock": "ranges" }
|
||||||
|
|
||||||
@client.params.project_id = @project_id
|
@client.params.project_id = @project_id
|
||||||
@AuthorizationManager.addAccessToDoc = sinon.stub()
|
@AuthorizationManager.addAccessToDoc = sinon.stub()
|
||||||
@AuthorizationManager.assertClientCanViewProject = sinon.stub().callsArgWith(1, null)
|
@AuthorizationManager.assertClientCanViewProject = sinon.stub().callsArgWith(1, null)
|
||||||
@DocumentUpdaterManager.getDocument = sinon.stub().callsArgWith(3, null, @doc_lines, @version, @ops)
|
@DocumentUpdaterManager.getDocument = sinon.stub().callsArgWith(3, null, @doc_lines, @version, @ranges, @ops)
|
||||||
|
|
||||||
describe "with a fromVersion", ->
|
describe "with a fromVersion", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
|
@ -201,9 +202,9 @@ describe 'WebsocketController', ->
|
||||||
.calledWith(@doc_id)
|
.calledWith(@doc_id)
|
||||||
.should.equal true
|
.should.equal true
|
||||||
|
|
||||||
it "should call the callback with the lines, version and ops", ->
|
it "should call the callback with the lines, version, ranges and ops", ->
|
||||||
@callback
|
@callback
|
||||||
.calledWith(null, @doc_lines, @version, @ops)
|
.calledWith(null, @doc_lines, @version, @ops, @ranges)
|
||||||
.should.equal true
|
.should.equal true
|
||||||
|
|
||||||
it "should increment the join-doc metric", ->
|
it "should increment the join-doc metric", ->
|
||||||
|
|
Loading…
Reference in a new issue