mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-29 18:03:42 -05:00
ee85d948e2
GitOrigin-RevId: ef2ef77e26df59d1af3df6dc664e284d3c70102d
92 lines
2.6 KiB
JavaScript
92 lines
2.6 KiB
JavaScript
'use strict'
|
|
|
|
const { expect } = require('chai')
|
|
const {
|
|
File,
|
|
Snapshot,
|
|
TextOperation,
|
|
Change,
|
|
EditFileOperation,
|
|
} = require('..')
|
|
|
|
describe('Snapshot', function () {
|
|
describe('findBlobHashes', function () {
|
|
it('finds blob hashes from files', function () {
|
|
const snapshot = new Snapshot()
|
|
|
|
const blobHashes = new Set()
|
|
snapshot.findBlobHashes(blobHashes)
|
|
expect(blobHashes.size).to.equal(0)
|
|
|
|
// Add a file without a hash.
|
|
snapshot.addFile('foo', File.fromString(''))
|
|
snapshot.findBlobHashes(blobHashes)
|
|
expect(blobHashes.size).to.equal(0)
|
|
|
|
// Add a file with a hash.
|
|
snapshot.addFile('bar', File.fromHash(File.EMPTY_FILE_HASH))
|
|
snapshot.findBlobHashes(blobHashes)
|
|
expect(Array.from(blobHashes)).to.have.members([File.EMPTY_FILE_HASH])
|
|
})
|
|
})
|
|
|
|
describe('editFile', function () {
|
|
let snapshot
|
|
let operation
|
|
|
|
beforeEach(function () {
|
|
snapshot = new Snapshot()
|
|
snapshot.addFile('hello.txt', File.fromString('hello'))
|
|
operation = new TextOperation()
|
|
operation.retain(5)
|
|
operation.insert(' world!')
|
|
})
|
|
|
|
it('applies text operations to the file', function () {
|
|
snapshot.editFile('hello.txt', operation)
|
|
const file = snapshot.getFile('hello.txt')
|
|
expect(file.getContent()).to.equal('hello world!')
|
|
})
|
|
|
|
it('rejects text operations for nonexistent file', function () {
|
|
expect(() => {
|
|
snapshot.editFile('does-not-exist.txt', operation)
|
|
}).to.throw(Snapshot.EditMissingFileError)
|
|
})
|
|
})
|
|
|
|
describe('applyAll', function () {
|
|
let snapshot
|
|
let change
|
|
|
|
beforeEach(function () {
|
|
snapshot = new Snapshot()
|
|
snapshot.addFile('empty.txt', File.fromString(''))
|
|
const badTextOp = new TextOperation()
|
|
badTextOp.insert('FAIL!')
|
|
const goodTextOp = new TextOperation()
|
|
goodTextOp.insert('SUCCESS!')
|
|
change = new Change(
|
|
[
|
|
new EditFileOperation('missing.txt', badTextOp),
|
|
new EditFileOperation('empty.txt', goodTextOp),
|
|
],
|
|
new Date()
|
|
)
|
|
})
|
|
|
|
it('ignores recoverable errors', function () {
|
|
snapshot.applyAll([change])
|
|
const file = snapshot.getFile('empty.txt')
|
|
expect(file.getContent()).to.equal('SUCCESS!')
|
|
})
|
|
|
|
it('stops on recoverable errors in strict mode', function () {
|
|
expect(() => {
|
|
snapshot.applyAll([change], { strict: true })
|
|
}).to.throw(Snapshot.EditMissingFileError)
|
|
const file = snapshot.getFile('empty.txt')
|
|
expect(file.getContent()).to.equal('')
|
|
})
|
|
})
|
|
})
|