| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- const chai = require('chai')
- const { expect } = chai
- const SandboxedModule = require('sandboxed-module')
- const StreamPromises = require('node:stream/promises')
- const MODULE_PATH = '../../src/PersistorFactory.js'
- describe('PersistorManager', function () {
- let PersistorFactory, FSPersistor, S3Persistor, Settings, GcsPersistor
- beforeEach(function () {
- FSPersistor = class {
- constructor(settings) {
- this.settings = settings
- }
- wrappedMethod() {
- return 'FSPersistor'
- }
- }
- S3Persistor = class {
- wrappedMethod() {
- return 'S3Persistor'
- }
- }
- GcsPersistor = class {
- wrappedMethod() {
- return 'GcsPersistor'
- }
- }
- Settings = {}
- const requires = {
- './GcsPersistor': GcsPersistor,
- './S3Persistor': { S3Persistor },
- './FSPersistor': FSPersistor,
- '@overleaf/logger': {
- info() {},
- err() {},
- },
- 'stream/promises': StreamPromises,
- }
- PersistorFactory = SandboxedModule.require(MODULE_PATH, { requires })
- })
- it('should implement the S3 wrapped method when S3 is configured', function () {
- Settings.backend = 's3'
- expect(PersistorFactory(Settings)).to.respondTo('wrappedMethod')
- expect(PersistorFactory(Settings).wrappedMethod()).to.equal('S3Persistor')
- })
- it("should implement the S3 wrapped method when 'aws-sdk' is configured", function () {
- Settings.backend = 'aws-sdk'
- expect(PersistorFactory(Settings)).to.respondTo('wrappedMethod')
- expect(PersistorFactory(Settings).wrappedMethod()).to.equal('S3Persistor')
- })
- it('should implement the FS wrapped method when FS is configured', function () {
- Settings.backend = 'fs'
- expect(PersistorFactory(Settings)).to.respondTo('wrappedMethod')
- expect(PersistorFactory(Settings).wrappedMethod()).to.equal('FSPersistor')
- })
- it('should forward useSubdirectories=true to FSPersistor', function () {
- Settings.backend = 'fs'
- Settings.useSubdirectories = true
- expect(PersistorFactory(Settings).settings.useSubdirectories).to.be.true
- })
- it('should forward useSubdirectories=false to FSPersistor', function () {
- Settings.backend = 'fs'
- Settings.useSubdirectories = false
- expect(PersistorFactory(Settings).settings.useSubdirectories).to.be.false
- })
- it('should throw an error when the backend is not configured', function () {
- try {
- PersistorFactory(Settings)
- } catch (err) {
- expect(err.message).to.equal('no backend specified - config incomplete')
- return
- }
- expect('should have caught an error').not.to.exist
- })
- it('should throw an error when the backend is unknown', function () {
- Settings.backend = 'magic'
- try {
- PersistorFactory(Settings)
- } catch (err) {
- expect(err.message).to.equal('unknown backend')
- expect(err.info.backend).to.equal('magic')
- return
- }
- expect('should have caught an error').not.to.exist
- })
- })
|