Files
overleaf-cep/services/web/test/unit/src/Project/ProjectEntityRestoreHandler.test.mjs
Andrew Rumble f02f6475ac Update paths
GitOrigin-RevId: a9474c8f36e8b287de4dd8fda29bc082001444ac
2025-10-23 08:06:10 +00:00

106 lines
2.3 KiB
JavaScript

import { vi, expect } from 'vitest'
import sinon from 'sinon'
const MODULE_PATH =
'../../../../app/src/Features/Project/ProjectEntityRestoreHandler.mjs'
describe('ProjectEntityRestoreHandler', function () {
beforeEach(async function (ctx) {
ctx.project = {
_id: '123213jlkj9kdlsaj',
}
ctx.user = {
_id: '588f3ddae8ebc1bac07c9fa4',
first_name: 'bjkdsjfk',
features: {},
}
ctx.docId = '4eecb1c1bffa66588e0000a2'
ctx.DocModel = class Doc {
constructor(options) {
this.name = options.name
this.lines = options.lines
this._id = this.docId
this.rev = 0
}
}
ctx.ProjectEntityHandler = {
promises: {
getDoc: sinon.stub(),
},
}
ctx.EditorController = {
promises: {
addDocWithRanges: sinon.stub(),
},
}
vi.doMock(
'../../../../app/src/Features/Project/ProjectEntityHandler.mjs',
() => ({
default: ctx.ProjectEntityHandler,
})
)
vi.doMock(
'../../../../app/src/Features/Editor/EditorController.mjs',
() => ({
default: ctx.EditorController,
})
)
ctx.ProjectEntityRestoreHandler = (await import(MODULE_PATH)).default
})
it('should add a new doc with timestamp name and old content', async function (ctx) {
const docName = 'deletedDoc'
ctx.docLines = ['line one', 'line two']
ctx.rev = 3
ctx.ranges = { comments: [{ id: 123 }] }
ctx.newDoc = new ctx.DocModel({
name: ctx.docName,
lines: undefined,
_id: ctx.docId,
rev: 0,
})
ctx.ProjectEntityHandler.promises.getDoc.resolves({
lines: ctx.docLines,
rev: ctx.rev,
version: 'version',
ranges: ctx.ranges,
})
ctx.EditorController.promises.addDocWithRanges = sinon
.stub()
.resolves(ctx.newDoc)
await ctx.ProjectEntityRestoreHandler.promises.restoreDeletedDoc(
ctx.project._id,
ctx.docId,
docName,
ctx.user._id
)
const docNameMatcher = new RegExp(docName + '-\\d{4}-\\d{2}-\\d{2}-\\d+')
expect(
ctx.EditorController.promises.addDocWithRanges
).to.have.been.calledWith(
ctx.project._id,
null,
sinon.match(docNameMatcher),
ctx.docLines,
ctx.ranges,
null,
ctx.user._id
)
})
})