mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-30 04:21:32 +02:00
217 lines
5.5 KiB
JavaScript
217 lines
5.5 KiB
JavaScript
import { expect } from 'chai'
|
|
import sinon from 'sinon'
|
|
import esmock from 'esmock'
|
|
|
|
const modulePath = '../../../../app/src/Features/Metadata/MetaHandler.mjs'
|
|
|
|
describe('MetaHandler', function () {
|
|
beforeEach(async function () {
|
|
this.projectId = 'someprojectid'
|
|
this.docId = 'somedocid'
|
|
|
|
this.lines = [
|
|
'\\usepackage{ foo, bar }',
|
|
'\\usepackage{baz}',
|
|
'one',
|
|
'\\label{aaa}',
|
|
'two',
|
|
'commented label % \\label{bbb}', // bbb should not be in the returned labels
|
|
'\\label{ccc}%bar', // ccc should be in the returned labels
|
|
'\\label{ddd} % bar', // ddd should be in the returned labels
|
|
'\\label{ e,f,g }', // e,f,g should be in the returned labels
|
|
]
|
|
|
|
this.docs = {
|
|
[this.docId]: {
|
|
_id: this.docId,
|
|
lines: this.lines,
|
|
},
|
|
}
|
|
|
|
this.ProjectEntityHandler = {
|
|
promises: {
|
|
getAllDocs: sinon.stub().resolves(this.docs),
|
|
getDoc: sinon.stub().resolves(this.docs[this.docId]),
|
|
},
|
|
}
|
|
|
|
this.DocumentUpdaterHandler = {
|
|
promises: {
|
|
flushDocToMongo: sinon.stub().resolves(),
|
|
flushProjectToMongo: sinon.stub().resolves(),
|
|
},
|
|
}
|
|
|
|
this.packageMapping = {
|
|
foo: [
|
|
{
|
|
caption: '\\bar',
|
|
snippet: '\\bar',
|
|
meta: 'foo-cmd',
|
|
score: 12,
|
|
},
|
|
{
|
|
caption: '\\bat[]{}',
|
|
snippet: '\\bar[$1]{$2}',
|
|
meta: 'foo-cmd',
|
|
score: 10,
|
|
},
|
|
],
|
|
baz: [
|
|
{
|
|
caption: '\\longercommandtest{}',
|
|
snippet: '\\longercommandtest{$1}',
|
|
meta: 'baz-cmd',
|
|
score: 50,
|
|
},
|
|
],
|
|
}
|
|
|
|
this.MetaHandler = await esmock.strict(modulePath, {
|
|
'../../../../app/src/Features/Project/ProjectEntityHandler':
|
|
this.ProjectEntityHandler,
|
|
'../../../../app/src/Features/DocumentUpdater/DocumentUpdaterHandler':
|
|
this.DocumentUpdaterHandler,
|
|
'../../../../app/src/Features/Metadata/packageMapping':
|
|
this.packageMapping,
|
|
})
|
|
})
|
|
|
|
describe('getMetaForDoc', function () {
|
|
it('should extract all the labels and packages', async function () {
|
|
const result = await this.MetaHandler.promises.getMetaForDoc(
|
|
this.projectId,
|
|
this.docId
|
|
)
|
|
|
|
expect(result).to.deep.equal({
|
|
labels: ['aaa', 'ccc', 'ddd', 'e,f,g'],
|
|
packages: {
|
|
foo: this.packageMapping.foo,
|
|
baz: this.packageMapping.baz,
|
|
},
|
|
packageNames: ['foo', 'bar', 'baz'],
|
|
})
|
|
|
|
this.DocumentUpdaterHandler.promises.flushDocToMongo.should.be.calledWith(
|
|
this.projectId,
|
|
this.docId
|
|
)
|
|
|
|
this.ProjectEntityHandler.promises.getDoc.should.be.calledWith(
|
|
this.projectId,
|
|
this.docId
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('getAllMetaForProject', function () {
|
|
it('should extract all metadata', async function () {
|
|
this.ProjectEntityHandler.promises.getAllDocs = sinon.stub().resolves({
|
|
doc_one: {
|
|
_id: 'id_one',
|
|
lines: ['one', '\\label{aaa} two', 'three'],
|
|
},
|
|
doc_two: {
|
|
_id: 'id_two',
|
|
lines: ['four'],
|
|
},
|
|
doc_three: {
|
|
_id: 'id_three',
|
|
lines: ['\\label{bbb}', 'five six', 'seven eight \\label{ccc} nine'],
|
|
},
|
|
doc_four: {
|
|
_id: 'id_four',
|
|
lines: [
|
|
'\\usepackage[width=\\textwidth]{baz}',
|
|
'\\usepackage{amsmath}',
|
|
],
|
|
},
|
|
doc_five: {
|
|
_id: 'id_five',
|
|
lines: [
|
|
'\\usepackage{foo,baz}',
|
|
'\\usepackage[options=foo]{hello}',
|
|
'some text',
|
|
'\\section{this}\\label{sec:intro}',
|
|
'In Section \\ref{sec:intro} we saw',
|
|
'nothing',
|
|
],
|
|
},
|
|
})
|
|
|
|
const result = await this.MetaHandler.promises.getAllMetaForProject(
|
|
this.projectId
|
|
)
|
|
|
|
expect(result).to.deep.equal({
|
|
id_one: {
|
|
labels: ['aaa'],
|
|
packages: {},
|
|
packageNames: [],
|
|
},
|
|
id_two: {
|
|
labels: [],
|
|
packages: {},
|
|
packageNames: [],
|
|
},
|
|
id_three: {
|
|
labels: ['bbb', 'ccc'],
|
|
packages: {},
|
|
packageNames: [],
|
|
},
|
|
id_four: {
|
|
labels: [],
|
|
packages: {
|
|
baz: [
|
|
{
|
|
caption: '\\longercommandtest{}',
|
|
snippet: '\\longercommandtest{$1}',
|
|
meta: 'baz-cmd',
|
|
score: 50,
|
|
},
|
|
],
|
|
},
|
|
packageNames: ['baz', 'amsmath'],
|
|
},
|
|
id_five: {
|
|
labels: ['sec:intro'],
|
|
packages: {
|
|
foo: [
|
|
{
|
|
caption: '\\bar',
|
|
snippet: '\\bar',
|
|
meta: 'foo-cmd',
|
|
score: 12,
|
|
},
|
|
{
|
|
caption: '\\bat[]{}',
|
|
snippet: '\\bar[$1]{$2}',
|
|
meta: 'foo-cmd',
|
|
score: 10,
|
|
},
|
|
],
|
|
baz: [
|
|
{
|
|
caption: '\\longercommandtest{}',
|
|
snippet: '\\longercommandtest{$1}',
|
|
meta: 'baz-cmd',
|
|
score: 50,
|
|
},
|
|
],
|
|
},
|
|
packageNames: ['foo', 'baz', 'hello'],
|
|
},
|
|
})
|
|
|
|
this.DocumentUpdaterHandler.promises.flushProjectToMongo.should.be.calledWith(
|
|
this.projectId
|
|
)
|
|
|
|
this.ProjectEntityHandler.promises.getAllDocs.should.be.calledWith(
|
|
this.projectId
|
|
)
|
|
})
|
|
})
|
|
})
|