Files
overleaf-cep/services/web/test/unit/src/Project/FolderStructureBuilderTests.js
Mathias Jakobsen 2a78b68c78 Merge pull request #16186 from overleaf/mj-mongo-object-id
[web] Use constructor for ObjectId

GitOrigin-RevId: 9eb8b377ea599605b72af237d1ab12f4d8287162
2023-12-19 09:04:02 +00:00

121 lines
3.7 KiB
JavaScript

const { expect } = require('chai')
const SandboxedModule = require('sandboxed-module')
const { ObjectId } = require('mongodb')
const MODULE_PATH =
'../../../../app/src/Features/Project/FolderStructureBuilder'
const MOCK_OBJECT_ID = new ObjectId('657306930a1cf28031c358da')
describe('FolderStructureBuilder', function () {
beforeEach(function () {
this.FolderStructureBuilder = SandboxedModule.require(MODULE_PATH, {
requires: {
mongodb: {
ObjectId: class {
constructor() {
return MOCK_OBJECT_ID
}
},
},
},
})
})
describe('buildFolderStructure', function () {
describe('when given no documents at all', function () {
beforeEach(function () {
this.result = this.FolderStructureBuilder.buildFolderStructure([], [])
})
it('returns an empty root folder', function () {
expect(this.result).to.deep.equal({
_id: MOCK_OBJECT_ID,
name: 'rootFolder',
folders: [],
docs: [],
fileRefs: [],
})
})
})
describe('when given documents and files', function () {
beforeEach(function () {
const docUploads = [
{ path: '/main.tex', doc: { _id: 'doc-1', name: 'main.tex' } },
{ path: '/foo/other.tex', doc: { _id: 'doc-2', name: 'other.tex' } },
{ path: '/foo/other.bib', doc: { _id: 'doc-3', name: 'other.bib' } },
{
path: '/foo/foo1/foo2/another.tex',
doc: { _id: 'doc-4', name: 'another.tex' },
},
]
const fileUploads = [
{ path: '/aaa.jpg', file: { _id: 'file-1', name: 'aaa.jpg' } },
{ path: '/foo/bbb.jpg', file: { _id: 'file-2', name: 'bbb.jpg' } },
{ path: '/bar/ccc.jpg', file: { _id: 'file-3', name: 'ccc.jpg' } },
]
this.result = this.FolderStructureBuilder.buildFolderStructure(
docUploads,
fileUploads
)
})
it('returns a full folder structure', function () {
expect(this.result).to.deep.equal({
_id: MOCK_OBJECT_ID,
name: 'rootFolder',
docs: [{ _id: 'doc-1', name: 'main.tex' }],
fileRefs: [{ _id: 'file-1', name: 'aaa.jpg' }],
folders: [
{
_id: MOCK_OBJECT_ID,
name: 'foo',
docs: [
{ _id: 'doc-2', name: 'other.tex' },
{ _id: 'doc-3', name: 'other.bib' },
],
fileRefs: [{ _id: 'file-2', name: 'bbb.jpg' }],
folders: [
{
_id: MOCK_OBJECT_ID,
name: 'foo1',
docs: [],
fileRefs: [],
folders: [
{
_id: MOCK_OBJECT_ID,
name: 'foo2',
docs: [{ _id: 'doc-4', name: 'another.tex' }],
fileRefs: [],
folders: [],
},
],
},
],
},
{
_id: MOCK_OBJECT_ID,
name: 'bar',
docs: [],
fileRefs: [{ _id: 'file-3', name: 'ccc.jpg' }],
folders: [],
},
],
})
})
})
describe('when given duplicate files', function () {
it('throws an error', function () {
const docUploads = [
{ path: '/foo/doc.tex', doc: { _id: 'doc-1', name: 'doc.tex' } },
{ path: '/foo/doc.tex', doc: { _id: 'doc-2', name: 'doc.tex' } },
]
expect(() =>
this.FolderStructureBuilder.buildFolderStructure(docUploads, [])
).to.throw()
})
})
})
})