mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
4d70bd664f
These changes were previously merged, not deployed, and reverted. This reverts the revert. This reverts commit a6b8c6c658b33b6eee78b8b99e43308f32211ae2, reversing changes made to 93c98921372eed4244d22fce800716cb27eca299.
192 lines
5.6 KiB
JavaScript
192 lines
5.6 KiB
JavaScript
/* eslint-disable
|
|
handle-callback-err,
|
|
*/
|
|
// TODO: This file was created by bulk-decaffeinate.
|
|
// Fix any style issues and re-enable lint.
|
|
/*
|
|
* decaffeinate suggestions:
|
|
* DS101: Remove unnecessary use of Array.from
|
|
* DS102: Remove unnecessary code created because of implicit returns
|
|
* DS207: Consider shorter variations of null checks
|
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
*/
|
|
const sinon = require('sinon')
|
|
const MockTrackChangesApi = require('./helpers/MockTrackChangesApi')
|
|
const MockProjectHistoryApi = require('./helpers/MockProjectHistoryApi')
|
|
const MockWebApi = require('./helpers/MockWebApi')
|
|
const DocUpdaterClient = require('./helpers/DocUpdaterClient')
|
|
const DocUpdaterApp = require('./helpers/DocUpdaterApp')
|
|
|
|
describe('Deleting a document', function () {
|
|
before(function (done) {
|
|
this.lines = ['one', 'two', 'three']
|
|
this.version = 42
|
|
this.update = {
|
|
doc: this.doc_id,
|
|
op: [
|
|
{
|
|
i: 'one and a half\n',
|
|
p: 4
|
|
}
|
|
],
|
|
v: this.version
|
|
}
|
|
this.result = ['one', 'one and a half', 'two', 'three']
|
|
|
|
sinon.spy(MockTrackChangesApi, 'flushDoc')
|
|
sinon.spy(MockProjectHistoryApi, 'flushProject')
|
|
return DocUpdaterApp.ensureRunning(done)
|
|
})
|
|
|
|
after(function () {
|
|
MockTrackChangesApi.flushDoc.restore()
|
|
return MockProjectHistoryApi.flushProject.restore()
|
|
})
|
|
|
|
describe('when the updated doc exists in the doc updater', function () {
|
|
before(function (done) {
|
|
;[this.project_id, this.doc_id] = Array.from([
|
|
DocUpdaterClient.randomId(),
|
|
DocUpdaterClient.randomId()
|
|
])
|
|
sinon.spy(MockWebApi, 'setDocument')
|
|
sinon.spy(MockWebApi, 'getDocument')
|
|
|
|
MockWebApi.insertDoc(this.project_id, this.doc_id, {
|
|
lines: this.lines,
|
|
version: this.version
|
|
})
|
|
return DocUpdaterClient.preloadDoc(
|
|
this.project_id,
|
|
this.doc_id,
|
|
(error) => {
|
|
if (error != null) {
|
|
throw error
|
|
}
|
|
return DocUpdaterClient.sendUpdate(
|
|
this.project_id,
|
|
this.doc_id,
|
|
this.update,
|
|
(error) => {
|
|
if (error != null) {
|
|
throw error
|
|
}
|
|
return setTimeout(() => {
|
|
return DocUpdaterClient.deleteDoc(
|
|
this.project_id,
|
|
this.doc_id,
|
|
(error, res, body) => {
|
|
this.statusCode = res.statusCode
|
|
return setTimeout(done, 200)
|
|
}
|
|
)
|
|
}, 200)
|
|
}
|
|
)
|
|
}
|
|
)
|
|
})
|
|
|
|
after(function () {
|
|
MockWebApi.setDocument.restore()
|
|
return MockWebApi.getDocument.restore()
|
|
})
|
|
|
|
it('should return a 204 status code', function () {
|
|
return this.statusCode.should.equal(204)
|
|
})
|
|
|
|
it('should send the updated document and version to the web api', function () {
|
|
return MockWebApi.setDocument
|
|
.calledWith(this.project_id, this.doc_id, this.result, this.version + 1)
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should need to reload the doc if read again', function (done) {
|
|
MockWebApi.getDocument.called.should.equal.false
|
|
return DocUpdaterClient.getDoc(
|
|
this.project_id,
|
|
this.doc_id,
|
|
(error, res, doc) => {
|
|
MockWebApi.getDocument
|
|
.calledWith(this.project_id, this.doc_id)
|
|
.should.equal(true)
|
|
return done()
|
|
}
|
|
)
|
|
})
|
|
|
|
it('should flush track changes', function () {
|
|
return MockTrackChangesApi.flushDoc
|
|
.calledWith(this.doc_id)
|
|
.should.equal(true)
|
|
})
|
|
|
|
return it('should flush project history', function () {
|
|
return MockProjectHistoryApi.flushProject
|
|
.calledWith(this.project_id)
|
|
.should.equal(true)
|
|
})
|
|
})
|
|
|
|
return describe('when the doc is not in the doc updater', function () {
|
|
before(function (done) {
|
|
;[this.project_id, this.doc_id] = Array.from([
|
|
DocUpdaterClient.randomId(),
|
|
DocUpdaterClient.randomId()
|
|
])
|
|
MockWebApi.insertDoc(this.project_id, this.doc_id, {
|
|
lines: this.lines
|
|
})
|
|
sinon.spy(MockWebApi, 'setDocument')
|
|
sinon.spy(MockWebApi, 'getDocument')
|
|
return DocUpdaterClient.deleteDoc(
|
|
this.project_id,
|
|
this.doc_id,
|
|
(error, res, body) => {
|
|
this.statusCode = res.statusCode
|
|
return setTimeout(done, 200)
|
|
}
|
|
)
|
|
})
|
|
|
|
after(function () {
|
|
MockWebApi.setDocument.restore()
|
|
return MockWebApi.getDocument.restore()
|
|
})
|
|
|
|
it('should return a 204 status code', function () {
|
|
return this.statusCode.should.equal(204)
|
|
})
|
|
|
|
it('should not need to send the updated document to the web api', function () {
|
|
return MockWebApi.setDocument.called.should.equal(false)
|
|
})
|
|
|
|
it('should need to reload the doc if read again', function (done) {
|
|
MockWebApi.getDocument.called.should.equal.false
|
|
return DocUpdaterClient.getDoc(
|
|
this.project_id,
|
|
this.doc_id,
|
|
(error, res, doc) => {
|
|
MockWebApi.getDocument
|
|
.calledWith(this.project_id, this.doc_id)
|
|
.should.equal(true)
|
|
return done()
|
|
}
|
|
)
|
|
})
|
|
|
|
it('should flush track changes', function () {
|
|
return MockTrackChangesApi.flushDoc
|
|
.calledWith(this.doc_id)
|
|
.should.equal(true)
|
|
})
|
|
|
|
return it('should flush project history', function () {
|
|
return MockProjectHistoryApi.flushProject
|
|
.calledWith(this.project_id)
|
|
.should.equal(true)
|
|
})
|
|
})
|
|
})
|