mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-06-04 06:39:02 +02:00
3f75f35a8e
add missing mocks for @overleaf/metrics in unit tests GitOrigin-RevId: 0903c3e26f88f92ef816a64f14ad053f159b31ed
189 lines
5.5 KiB
JavaScript
189 lines
5.5 KiB
JavaScript
import { expect, vi } from 'vitest'
|
|
import sinon from 'sinon'
|
|
import MockResponse from '../helpers/MockResponse.mjs'
|
|
const modulePath = '../../../../app/src/Features/Metadata/MetaController.mjs'
|
|
|
|
describe('MetaController', function () {
|
|
beforeEach(async function (ctx) {
|
|
ctx.EditorRealTimeController = {
|
|
emitToRoom: sinon.stub(),
|
|
}
|
|
|
|
ctx.MetaHandler = {
|
|
promises: {
|
|
getAllMetaForProject: sinon.stub(),
|
|
getMetaForDoc: sinon.stub(),
|
|
},
|
|
}
|
|
|
|
vi.doMock(
|
|
'../../../../app/src/Features/Editor/EditorRealTimeController',
|
|
() => ({
|
|
default: ctx.EditorRealTimeController,
|
|
})
|
|
)
|
|
|
|
vi.doMock('../../../../app/src/Features/Metadata/MetaHandler', () => ({
|
|
default: ctx.MetaHandler,
|
|
}))
|
|
|
|
vi.doMock(
|
|
'../../../../app/src/Features/Analytics/AnalyticsManager',
|
|
() => ({ default: {} })
|
|
)
|
|
|
|
vi.doMock(
|
|
'../../../../app/src/Features/SplitTests/SplitTestHandler',
|
|
() => ({
|
|
default: {
|
|
promises: {
|
|
getAssignment: sinon.stub().resolves({}),
|
|
},
|
|
},
|
|
})
|
|
)
|
|
|
|
ctx.MetadataController = (await import(modulePath)).default
|
|
})
|
|
|
|
describe('getMetadata', function () {
|
|
it('should respond with json', async function (ctx) {
|
|
const projectMeta = {
|
|
'doc-id': {
|
|
labels: ['foo'],
|
|
packages: { a: { commands: [] } },
|
|
packageNames: ['a'],
|
|
},
|
|
}
|
|
|
|
ctx.MetaHandler.promises.getAllMetaForProject = sinon
|
|
.stub()
|
|
.resolves(projectMeta)
|
|
|
|
const req = { params: { project_id: 'project-id' } }
|
|
const res = new MockResponse(vi)
|
|
const next = sinon.stub()
|
|
|
|
await ctx.MetadataController.getMetadata(req, res, next)
|
|
|
|
ctx.MetaHandler.promises.getAllMetaForProject.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
expect(res.json).toHaveBeenCalledTimes(1)
|
|
expect(res.json).toHaveBeenCalledWith({
|
|
projectId: 'project-id',
|
|
projectMeta,
|
|
})
|
|
next.should.not.have.been.called
|
|
})
|
|
|
|
it('should handle an error', async function (ctx) {
|
|
ctx.MetaHandler.promises.getAllMetaForProject = sinon
|
|
.stub()
|
|
.throws(new Error('woops'))
|
|
|
|
const req = { params: { project_id: 'project-id' } }
|
|
const res = new MockResponse(vi)
|
|
const next = sinon.stub()
|
|
|
|
await ctx.MetadataController.getMetadata(req, res, next)
|
|
|
|
ctx.MetaHandler.promises.getAllMetaForProject.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
expect(res.json).not.toHaveBeenCalled()
|
|
next.should.have.been.calledWithMatch(error => error instanceof Error)
|
|
})
|
|
})
|
|
|
|
describe('broadcastMetadataForDoc', function () {
|
|
it('should broadcast on broadcast:true ', async function (ctx) {
|
|
ctx.MetaHandler.promises.getMetaForDoc = sinon.stub().resolves({
|
|
labels: ['foo'],
|
|
packages: { a: { commands: [] } },
|
|
packageNames: ['a'],
|
|
})
|
|
|
|
ctx.EditorRealTimeController.emitToRoom = sinon.stub()
|
|
|
|
const req = {
|
|
params: { project_id: 'project-id', doc_id: 'doc-id' },
|
|
body: { broadcast: true },
|
|
}
|
|
const res = new MockResponse(vi)
|
|
const next = sinon.stub()
|
|
|
|
await ctx.MetadataController.broadcastMetadataForDoc(req, res, next)
|
|
|
|
ctx.MetaHandler.promises.getMetaForDoc.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
expect(res.json).not.toHaveBeenCalled()
|
|
expect(res.sendStatus).toHaveBeenCalledTimes(1)
|
|
expect(res.sendStatus).toHaveBeenCalledWith(200)
|
|
next.should.not.have.been.called
|
|
|
|
ctx.EditorRealTimeController.emitToRoom.should.have.been.calledOnce
|
|
const { lastCall } = ctx.EditorRealTimeController.emitToRoom
|
|
expect(lastCall.args[0]).to.equal('project-id')
|
|
expect(lastCall.args[1]).to.equal('broadcastDocMeta')
|
|
expect(lastCall.args[2]).to.have.all.keys(['docId', 'meta'])
|
|
})
|
|
|
|
it('should return json on broadcast:false ', async function (ctx) {
|
|
const docMeta = {
|
|
labels: ['foo'],
|
|
packages: { a: [] },
|
|
packageNames: ['a'],
|
|
}
|
|
|
|
ctx.MetaHandler.promises.getMetaForDoc = sinon.stub().resolves(docMeta)
|
|
|
|
ctx.EditorRealTimeController.emitToRoom = sinon.stub()
|
|
|
|
const req = {
|
|
params: { project_id: 'project-id', doc_id: 'doc-id' },
|
|
body: { broadcast: false },
|
|
}
|
|
const res = new MockResponse(vi)
|
|
const next = sinon.stub()
|
|
|
|
await ctx.MetadataController.broadcastMetadataForDoc(req, res, next)
|
|
|
|
ctx.MetaHandler.promises.getMetaForDoc.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
ctx.EditorRealTimeController.emitToRoom.should.not.have.been.called
|
|
expect(res.json).toHaveBeenCalledTimes(1)
|
|
expect(res.json).toHaveBeenCalledWith({
|
|
docId: 'doc-id',
|
|
meta: docMeta,
|
|
})
|
|
next.should.not.have.been.called
|
|
})
|
|
|
|
it('should handle an error', async function (ctx) {
|
|
ctx.MetaHandler.promises.getMetaForDoc = sinon
|
|
.stub()
|
|
.throws(new Error('woops'))
|
|
|
|
ctx.EditorRealTimeController.emitToRoom = sinon.stub()
|
|
|
|
const req = {
|
|
params: { project_id: 'project-id', doc_id: 'doc-id' },
|
|
body: { broadcast: true },
|
|
}
|
|
const res = new MockResponse(vi)
|
|
const next = sinon.stub()
|
|
|
|
await ctx.MetadataController.broadcastMetadataForDoc(req, res, next)
|
|
|
|
ctx.MetaHandler.promises.getMetaForDoc.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
expect(res.json).not.toHaveBeenCalled()
|
|
next.should.have.been.calledWithMatch(error => error instanceof Error)
|
|
})
|
|
})
|
|
})
|