mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-31 12:51:35 +02:00
164 lines
5.0 KiB
JavaScript
164 lines
5.0 KiB
JavaScript
import { expect } from 'chai'
|
|
import sinon from 'sinon'
|
|
import esmock from 'esmock'
|
|
import MockResponse from '../helpers/MockResponse.js'
|
|
const modulePath = '../../../../app/src/Features/Metadata/MetaController.mjs'
|
|
|
|
describe('MetaController', function () {
|
|
beforeEach(async function () {
|
|
this.EditorRealTimeController = {
|
|
emitToRoom: sinon.stub(),
|
|
}
|
|
|
|
this.MetaHandler = {
|
|
promises: {
|
|
getAllMetaForProject: sinon.stub(),
|
|
getMetaForDoc: sinon.stub(),
|
|
},
|
|
}
|
|
|
|
this.MetadataController = await esmock.strict(modulePath, {
|
|
'../../../../app/src/Features/Editor/EditorRealTimeController':
|
|
this.EditorRealTimeController,
|
|
'../../../../app/src/Features/Metadata/MetaHandler': this.MetaHandler,
|
|
})
|
|
})
|
|
|
|
describe('getMetadata', function () {
|
|
it('should respond with json', async function () {
|
|
const projectMeta = {
|
|
'doc-id': {
|
|
labels: ['foo'],
|
|
packages: { a: { commands: [] } },
|
|
packageNames: ['a'],
|
|
},
|
|
}
|
|
|
|
this.MetaHandler.promises.getAllMetaForProject = sinon
|
|
.stub()
|
|
.resolves(projectMeta)
|
|
|
|
const req = { params: { project_id: 'project-id' } }
|
|
const res = new MockResponse()
|
|
const next = sinon.stub()
|
|
|
|
await this.MetadataController.getMetadata(req, res, next)
|
|
|
|
this.MetaHandler.promises.getAllMetaForProject.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
res.json.should.have.been.calledOnceWith({
|
|
projectId: 'project-id',
|
|
projectMeta,
|
|
})
|
|
next.should.not.have.been.called
|
|
})
|
|
|
|
it('should handle an error', async function () {
|
|
this.MetaHandler.promises.getAllMetaForProject = sinon
|
|
.stub()
|
|
.throws(new Error('woops'))
|
|
|
|
const req = { params: { project_id: 'project-id' } }
|
|
const res = new MockResponse()
|
|
const next = sinon.stub()
|
|
|
|
await this.MetadataController.getMetadata(req, res, next)
|
|
|
|
this.MetaHandler.promises.getAllMetaForProject.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
res.json.should.not.have.been.called
|
|
next.should.have.been.calledWithMatch(error => error instanceof Error)
|
|
})
|
|
})
|
|
|
|
describe('broadcastMetadataForDoc', function () {
|
|
it('should broadcast on broadcast:true ', async function () {
|
|
this.MetaHandler.promises.getMetaForDoc = sinon.stub().resolves({
|
|
labels: ['foo'],
|
|
packages: { a: { commands: [] } },
|
|
packageNames: ['a'],
|
|
})
|
|
|
|
this.EditorRealTimeController.emitToRoom = sinon.stub()
|
|
|
|
const req = {
|
|
params: { project_id: 'project-id', doc_id: 'doc-id' },
|
|
body: { broadcast: true },
|
|
}
|
|
const res = new MockResponse()
|
|
const next = sinon.stub()
|
|
|
|
await this.MetadataController.broadcastMetadataForDoc(req, res, next)
|
|
|
|
this.MetaHandler.promises.getMetaForDoc.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
res.json.should.not.have.been.called
|
|
res.sendStatus.should.have.been.calledOnceWith(200)
|
|
next.should.not.have.been.called
|
|
|
|
this.EditorRealTimeController.emitToRoom.should.have.been.calledOnce
|
|
const { lastCall } = this.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 () {
|
|
const docMeta = {
|
|
labels: ['foo'],
|
|
packages: { a: [] },
|
|
packageNames: ['a'],
|
|
}
|
|
|
|
this.MetaHandler.promises.getMetaForDoc = sinon.stub().resolves(docMeta)
|
|
|
|
this.EditorRealTimeController.emitToRoom = sinon.stub()
|
|
|
|
const req = {
|
|
params: { project_id: 'project-id', doc_id: 'doc-id' },
|
|
body: { broadcast: false },
|
|
}
|
|
const res = new MockResponse()
|
|
const next = sinon.stub()
|
|
|
|
await this.MetadataController.broadcastMetadataForDoc(req, res, next)
|
|
|
|
this.MetaHandler.promises.getMetaForDoc.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
this.EditorRealTimeController.emitToRoom.should.not.have.been.called
|
|
res.json.should.have.been.calledOnceWith({
|
|
docId: 'doc-id',
|
|
meta: docMeta,
|
|
})
|
|
next.should.not.have.been.called
|
|
})
|
|
|
|
it('should handle an error', async function () {
|
|
this.MetaHandler.promises.getMetaForDoc = sinon
|
|
.stub()
|
|
.throws(new Error('woops'))
|
|
|
|
this.EditorRealTimeController.emitToRoom = sinon.stub()
|
|
|
|
const req = {
|
|
params: { project_id: 'project-id', doc_id: 'doc-id' },
|
|
body: { broadcast: true },
|
|
}
|
|
const res = new MockResponse()
|
|
const next = sinon.stub()
|
|
|
|
await this.MetadataController.broadcastMetadataForDoc(req, res, next)
|
|
|
|
this.MetaHandler.promises.getMetaForDoc.should.have.been.calledWith(
|
|
'project-id'
|
|
)
|
|
res.json.should.not.have.been.called
|
|
next.should.have.been.calledWithMatch(error => error instanceof Error)
|
|
})
|
|
})
|
|
})
|