mirror of
https://github.com/overleaf/overleaf.git
synced 2024-10-31 21:21:03 -04:00
Merge pull request #42 from sharelatex/ja-return-latest-doc-on-no-version
Don't return all updates if no version is given
This commit is contained in:
commit
0ac6cc3207
3 changed files with 42 additions and 19 deletions
|
@ -4,12 +4,14 @@ DiffGenerator = require "./DiffGenerator"
|
||||||
logger = require "logger-sharelatex"
|
logger = require "logger-sharelatex"
|
||||||
|
|
||||||
module.exports = DiffManager =
|
module.exports = DiffManager =
|
||||||
getLatestDocAndUpdates: (project_id, doc_id, fromVersion, toVersion, callback = (error, content, version, updates) ->) ->
|
getLatestDocAndUpdates: (project_id, doc_id, fromVersion, callback = (error, content, version, updates) ->) ->
|
||||||
# Get updates last, since then they must be ahead and it
|
# Get updates last, since then they must be ahead and it
|
||||||
# might be possible to rewind to the same version as the doc.
|
# might be possible to rewind to the same version as the doc.
|
||||||
DocumentUpdaterManager.getDocument project_id, doc_id, (error, content, version) ->
|
DocumentUpdaterManager.getDocument project_id, doc_id, (error, content, version) ->
|
||||||
return callback(error) if error?
|
return callback(error) if error?
|
||||||
UpdatesManager.getDocUpdatesWithUserInfo project_id, doc_id, from: fromVersion, to: toVersion, (error, updates) ->
|
if !fromVersion? # If we haven't been given a version, just return lastest doc and no updates
|
||||||
|
return callback(null, content, version, [])
|
||||||
|
UpdatesManager.getDocUpdatesWithUserInfo project_id, doc_id, from: fromVersion, (error, updates) ->
|
||||||
return callback(error) if error?
|
return callback(error) if error?
|
||||||
callback(null, content, version, updates)
|
callback(null, content, version, updates)
|
||||||
|
|
||||||
|
@ -56,7 +58,7 @@ module.exports = DiffManager =
|
||||||
|
|
||||||
_tryGetDocumentBeforeVersion: (project_id, doc_id, version, callback = (error, document, rewoundUpdates) ->) ->
|
_tryGetDocumentBeforeVersion: (project_id, doc_id, version, callback = (error, document, rewoundUpdates) ->) ->
|
||||||
logger.log project_id: project_id, doc_id: doc_id, version: version, "getting document before version"
|
logger.log project_id: project_id, doc_id: doc_id, version: version, "getting document before version"
|
||||||
DiffManager.getLatestDocAndUpdates project_id, doc_id, version, null, (error, content, version, updates) ->
|
DiffManager.getLatestDocAndUpdates project_id, doc_id, version, (error, content, version, updates) ->
|
||||||
return callback(error) if error?
|
return callback(error) if error?
|
||||||
|
|
||||||
# bail out if we hit a broken update
|
# bail out if we hit a broken update
|
||||||
|
|
|
@ -26,7 +26,10 @@ describe "DiffManager", ->
|
||||||
|
|
||||||
@DocumentUpdaterManager.getDocument = sinon.stub().callsArgWith(2, null, @content, @version)
|
@DocumentUpdaterManager.getDocument = sinon.stub().callsArgWith(2, null, @content, @version)
|
||||||
@UpdatesManager.getDocUpdatesWithUserInfo = sinon.stub().callsArgWith(3, null, @updates)
|
@UpdatesManager.getDocUpdatesWithUserInfo = sinon.stub().callsArgWith(3, null, @updates)
|
||||||
@DiffManager.getLatestDocAndUpdates @project_id, @doc_id, @from, @to, @callback
|
|
||||||
|
describe "with a fromVersion", ->
|
||||||
|
beforeEach ->
|
||||||
|
@DiffManager.getLatestDocAndUpdates @project_id, @doc_id, @from, @callback
|
||||||
|
|
||||||
it "should get the latest version of the doc", ->
|
it "should get the latest version of the doc", ->
|
||||||
@DocumentUpdaterManager.getDocument
|
@DocumentUpdaterManager.getDocument
|
||||||
|
@ -35,12 +38,29 @@ describe "DiffManager", ->
|
||||||
|
|
||||||
it "should get the latest updates", ->
|
it "should get the latest updates", ->
|
||||||
@UpdatesManager.getDocUpdatesWithUserInfo
|
@UpdatesManager.getDocUpdatesWithUserInfo
|
||||||
.calledWith(@project_id, @doc_id, from: @from, to: @to)
|
.calledWith(@project_id, @doc_id, from: @from)
|
||||||
.should.equal true
|
.should.equal true
|
||||||
|
|
||||||
it "should call the callback with the content, version and updates", ->
|
it "should call the callback with the content, version and updates", ->
|
||||||
@callback.calledWith(null, @content, @version, @updates).should.equal true
|
@callback.calledWith(null, @content, @version, @updates).should.equal true
|
||||||
|
|
||||||
|
describe "with no fromVersion", ->
|
||||||
|
beforeEach ->
|
||||||
|
@DiffManager.getLatestDocAndUpdates @project_id, @doc_id, null, @callback
|
||||||
|
|
||||||
|
it "should get the latest version of the doc", ->
|
||||||
|
@DocumentUpdaterManager.getDocument
|
||||||
|
.calledWith(@project_id, @doc_id)
|
||||||
|
.should.equal true
|
||||||
|
|
||||||
|
it "should not get the latest updates", ->
|
||||||
|
@UpdatesManager.getDocUpdatesWithUserInfo
|
||||||
|
.called.should.equal false
|
||||||
|
|
||||||
|
it "should call the callback with the content, version and blank updates", ->
|
||||||
|
@callback.calledWith(null, @content, @version, []).should.equal true
|
||||||
|
|
||||||
|
|
||||||
describe "getDiff", ->
|
describe "getDiff", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
@content = "hello world"
|
@content = "hello world"
|
||||||
|
@ -80,7 +100,7 @@ describe "DiffManager", ->
|
||||||
|
|
||||||
describe "when the updates are inconsistent", ->
|
describe "when the updates are inconsistent", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
@DiffManager.getLatestDocAndUpdates = sinon.stub().callsArgWith(4, null, @content, @version, @updates)
|
@DiffManager.getLatestDocAndUpdates = sinon.stub().callsArgWith(3, null, @content, @version, @updates)
|
||||||
@DiffGenerator.buildDiff = sinon.stub().throws(@error = new Error("inconsistent!"))
|
@DiffGenerator.buildDiff = sinon.stub().throws(@error = new Error("inconsistent!"))
|
||||||
@DiffManager.getDiff @project_id, @doc_id, @fromVersion, @toVersion, @callback
|
@DiffManager.getDiff @project_id, @doc_id, @fromVersion, @toVersion, @callback
|
||||||
|
|
||||||
|
@ -177,7 +197,7 @@ describe "DiffManager", ->
|
||||||
|
|
||||||
describe "with matching versions", ->
|
describe "with matching versions", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
@DiffManager.getLatestDocAndUpdates = sinon.stub().callsArgWith(4, null, @content, @version, @updates)
|
@DiffManager.getLatestDocAndUpdates = sinon.stub().callsArgWith(3, null, @content, @version, @updates)
|
||||||
@DiffGenerator.rewindUpdates = sinon.spy (content, updates) =>
|
@DiffGenerator.rewindUpdates = sinon.spy (content, updates) =>
|
||||||
# the rewindUpdates method reverses the 'updates' array
|
# the rewindUpdates method reverses the 'updates' array
|
||||||
updates.reverse()
|
updates.reverse()
|
||||||
|
@ -187,7 +207,7 @@ describe "DiffManager", ->
|
||||||
|
|
||||||
it "should get the latest doc and version with all recent updates", ->
|
it "should get the latest doc and version with all recent updates", ->
|
||||||
@DiffManager.getLatestDocAndUpdates
|
@DiffManager.getLatestDocAndUpdates
|
||||||
.calledWith(@project_id, @doc_id, @fromVersion, null)
|
.calledWith(@project_id, @doc_id, @fromVersion)
|
||||||
.should.equal true
|
.should.equal true
|
||||||
|
|
||||||
it "should rewind the diff", ->
|
it "should rewind the diff", ->
|
||||||
|
@ -200,7 +220,7 @@ describe "DiffManager", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
@version = 50
|
@version = 50
|
||||||
@updates = [ { op: "mock-1", v: 40 }, { op: "mock-1", v: 39 } ]
|
@updates = [ { op: "mock-1", v: 40 }, { op: "mock-1", v: 39 } ]
|
||||||
@DiffManager.getLatestDocAndUpdates = sinon.stub().callsArgWith(4, null, @content, @version, @updates)
|
@DiffManager.getLatestDocAndUpdates = sinon.stub().callsArgWith(3, null, @content, @version, @updates)
|
||||||
@DiffManager._tryGetDocumentBeforeVersion @project_id, @doc_id, @fromVersion, @callback
|
@DiffManager._tryGetDocumentBeforeVersion @project_id, @doc_id, @fromVersion, @callback
|
||||||
|
|
||||||
it "should call the callback with an error with retry = true set", ->
|
it "should call the callback with an error with retry = true set", ->
|
||||||
|
@ -210,7 +230,7 @@ describe "DiffManager", ->
|
||||||
|
|
||||||
describe "when the updates are inconsistent", ->
|
describe "when the updates are inconsistent", ->
|
||||||
beforeEach ->
|
beforeEach ->
|
||||||
@DiffManager.getLatestDocAndUpdates = sinon.stub().callsArgWith(4, null, @content, @version, @updates)
|
@DiffManager.getLatestDocAndUpdates = sinon.stub().callsArgWith(3, null, @content, @version, @updates)
|
||||||
@DiffGenerator.rewindUpdates = sinon.stub().throws(@error = new Error("inconsistent!"))
|
@DiffGenerator.rewindUpdates = sinon.stub().throws(@error = new Error("inconsistent!"))
|
||||||
@DiffManager.getDocumentBeforeVersion @project_id, @doc_id, @fromVersion, @callback
|
@DiffManager.getDocumentBeforeVersion @project_id, @doc_id, @fromVersion, @callback
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ describe "PackManager", ->
|
||||||
"./MongoAWS": {}
|
"./MongoAWS": {}
|
||||||
"logger-sharelatex": { log: sinon.stub(), error: sinon.stub() }
|
"logger-sharelatex": { log: sinon.stub(), error: sinon.stub() }
|
||||||
'metrics-sharelatex': {inc: ()->}
|
'metrics-sharelatex': {inc: ()->}
|
||||||
|
"./ProjectIterator": require("../../../../app/js/ProjectIterator.js") # Cache for speed
|
||||||
"settings-sharelatex":
|
"settings-sharelatex":
|
||||||
redis: lock: key_schema: {}
|
redis: lock: key_schema: {}
|
||||||
@callback = sinon.stub()
|
@callback = sinon.stub()
|
||||||
|
|
Loading…
Reference in a new issue