mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
f14fdc7b7c
[web] Initial version of file reverting GitOrigin-RevId: ef500b2c3ddf21b0acb6650c2526edd10ab2cc18
160 lines
5.1 KiB
JavaScript
160 lines
5.1 KiB
JavaScript
import sinon from 'sinon'
|
|
import { strict as esmock } from 'esmock'
|
|
|
|
const MODULE_PATH = '../../../../app/js/BlobManager.js'
|
|
|
|
describe('BlobManager', function () {
|
|
beforeEach(async function () {
|
|
this.callback = sinon.stub()
|
|
this.extendLock = sinon.stub().yields()
|
|
this.project_id = 'project-1'
|
|
this.historyId = 12345
|
|
this.HistoryStoreManager = {
|
|
createBlobForUpdate: sinon.stub(),
|
|
}
|
|
this.UpdateTranslator = {
|
|
isAddUpdate: sinon.stub().returns(false),
|
|
}
|
|
this.BlobManager = await esmock(MODULE_PATH, {
|
|
'../../../../app/js/HistoryStoreManager.js': this.HistoryStoreManager,
|
|
'../../../../app/js/UpdateTranslator.js': this.UpdateTranslator,
|
|
})
|
|
this.updates = ['update-1', 'update-2']
|
|
})
|
|
|
|
describe('createBlobsForUpdates', function () {
|
|
describe('when there are no blobs to create', function () {
|
|
beforeEach(function (done) {
|
|
this.BlobManager.createBlobsForUpdates(
|
|
this.project_id,
|
|
this.historyId,
|
|
this.updates,
|
|
this.extendLock,
|
|
(error, updatesWithBlobs) => {
|
|
this.callback(error, updatesWithBlobs)
|
|
done()
|
|
}
|
|
)
|
|
})
|
|
|
|
it('should not create any blobs', function () {
|
|
this.HistoryStoreManager.createBlobForUpdate.called.should.equal(false)
|
|
})
|
|
|
|
it('should call the callback with the updates', function () {
|
|
const updatesWithBlobs = this.updates.map(update => ({
|
|
update,
|
|
}))
|
|
this.callback.calledWith(null, updatesWithBlobs).should.equal(true)
|
|
})
|
|
})
|
|
|
|
describe('when there are blobs to create', function () {
|
|
beforeEach(function (done) {
|
|
this.UpdateTranslator.isAddUpdate.returns(true)
|
|
this.blobHash = 'test hash'
|
|
this.HistoryStoreManager.createBlobForUpdate.yields(null, {
|
|
file: this.blobHash,
|
|
})
|
|
this.BlobManager.createBlobsForUpdates(
|
|
this.project_id,
|
|
this.historyId,
|
|
this.updates,
|
|
this.extendLock,
|
|
(error, updatesWithBlobs) => {
|
|
this.callback(error, updatesWithBlobs)
|
|
done()
|
|
}
|
|
)
|
|
})
|
|
|
|
it('should create blobs', function () {
|
|
this.HistoryStoreManager.createBlobForUpdate
|
|
.calledWith(this.project_id, this.historyId, this.updates[0])
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should extend the lock', function () {
|
|
this.extendLock.called.should.equal(true)
|
|
})
|
|
|
|
it('should call the callback with the updates', function () {
|
|
const updatesWithBlobs = this.updates.map(update => ({
|
|
update,
|
|
blobHashes: { file: this.blobHash },
|
|
}))
|
|
this.callback.calledWith(null, updatesWithBlobs).should.equal(true)
|
|
})
|
|
})
|
|
|
|
describe('when there are blobs to create and there is a single network error', function () {
|
|
beforeEach(function (done) {
|
|
this.UpdateTranslator.isAddUpdate.returns(true)
|
|
this.blobHash = 'test hash'
|
|
this.HistoryStoreManager.createBlobForUpdate
|
|
.onFirstCall()
|
|
.yields(new Error('random failure'))
|
|
this.HistoryStoreManager.createBlobForUpdate.yields(null, {
|
|
file: this.blobHash,
|
|
})
|
|
this.BlobManager.createBlobsForUpdates(
|
|
this.project_id,
|
|
this.historyId,
|
|
this.updates,
|
|
this.extendLock,
|
|
(error, updatesWithBlobs) => {
|
|
this.callback(error, updatesWithBlobs)
|
|
done()
|
|
}
|
|
)
|
|
})
|
|
|
|
it('should create blobs', function () {
|
|
this.HistoryStoreManager.createBlobForUpdate
|
|
.calledWith(this.project_id, this.historyId, this.updates[0])
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should extend the lock', function () {
|
|
this.extendLock.called.should.equal(true)
|
|
})
|
|
|
|
it('should call the callback with the updates', function () {
|
|
const updatesWithBlobs = this.updates.map(update => ({
|
|
update,
|
|
blobHashes: { file: this.blobHash },
|
|
}))
|
|
this.callback.calledWith(null, updatesWithBlobs).should.equal(true)
|
|
})
|
|
})
|
|
|
|
describe('when there are blobs to create and there are multiple network errors', function () {
|
|
beforeEach(function (done) {
|
|
this.UpdateTranslator.isAddUpdate.returns(true)
|
|
this.blobHash = 'test hash'
|
|
this.error = new Error('random failure')
|
|
this.HistoryStoreManager.createBlobForUpdate.yields(this.error)
|
|
this.BlobManager.createBlobsForUpdates(
|
|
this.project_id,
|
|
this.historyId,
|
|
this.updates,
|
|
this.extendLock,
|
|
(error, updatesWithBlobs) => {
|
|
this.callback(error, updatesWithBlobs)
|
|
done()
|
|
}
|
|
)
|
|
})
|
|
|
|
it('should try to create blobs', function () {
|
|
this.HistoryStoreManager.createBlobForUpdate
|
|
.calledWith(this.project_id, this.historyId, this.updates[0])
|
|
.should.equal(true)
|
|
})
|
|
|
|
it('should call the callback with an error', function () {
|
|
this.callback.calledWith(this.error).should.equal(true)
|
|
})
|
|
})
|
|
})
|
|
})
|