1
0
Fork 0
mirror of https://github.com/overleaf/overleaf.git synced 2025-04-14 13:03:30 +00:00

Post-decaf cleanup of PersistorManager

This commit is contained in:
Simon Detheridge 2020-01-02 16:37:47 +00:00
parent 10f7087912
commit dbfacce988
2 changed files with 74 additions and 161 deletions
services/filestore

View file

@ -1,37 +1,19 @@
// TODO: This file was created by bulk-decaffeinate.
// Sanity-check the conversion and remove this comment.
/*
* decaffeinate suggestions:
* DS103: Rewrite code to no longer use __guard__
* DS205: Consider reworking code to avoid use of IIFEs
* DS207: Consider shorter variations of null checks
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const settings = require('settings-sharelatex')
const logger = require('logger-sharelatex')
// assume s3 if none specified
__guard__(
settings != null ? settings.filestore : undefined,
x => x.backend || (settings.filestore.backend = 's3')
)
module.exports = (function() {
logger.log(
{
backend: settings.filestore.backend
},
'Loading backend'
)
logger.log(
{
backend: __guard__(
settings != null ? settings.filestore : undefined,
x1 => x1.backend
)
},
'Loading backend'
)
module.exports = (() => {
switch (
__guard__(
settings != null ? settings.filestore : undefined,
x2 => x2.backend
)
) {
if (!settings.filestore.backend) {
throw new Error('no backend specified - config incomplete')
}
switch (settings.filestore.backend) {
case 'aws-sdk':
return require('./AWSSDKPersistorManager')
case 's3':
@ -40,13 +22,7 @@ module.exports = (() => {
return require('./FSPersistorManager')
default:
throw new Error(
`Unknown filestore backend: ${settings.filestore.backend}`
`unknown filestore backend: ${settings.filestore.backend}`
)
}
})()
function __guard__(value, transform) {
return typeof value !== 'undefined' && value !== null
? transform(value)
: undefined
}

View file

@ -1,137 +1,74 @@
/* eslint-disable
no-return-assign,
no-unused-vars,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const logger = require('logger-sharelatex')
const { assert } = require('chai')
const sinon = require('sinon')
const chai = require('chai')
const should = chai.should()
const { expect } = chai
const modulePath = '../../../app/js/PersistorManager.js'
const SandboxedModule = require('sandboxed-module')
describe('PersistorManagerTests', function() {
const modulePath = '../../../app/js/PersistorManager.js'
describe('PersistorManager', function() {
let PersistorManager,
FSPersistorManager,
S3PersistorManager,
settings,
requires
beforeEach(function() {
return (this.S3PersistorManager = {
getFileStream: sinon.stub(),
checkIfFileExists: sinon.stub(),
deleteFile: sinon.stub(),
deleteDirectory: sinon.stub(),
sendStream: sinon.stub(),
insertFile: sinon.stub()
})
FSPersistorManager = {
wrappedMethod: sinon.stub().returns('FSPersistorManager')
}
S3PersistorManager = {
wrappedMethod: sinon.stub().returns('S3PersistorManager')
}
settings = {
filestore: {}
}
requires = {
'./S3PersistorManager': S3PersistorManager,
'./FSPersistorManager': FSPersistorManager,
'settings-sharelatex': settings,
'logger-sharelatex': {
log() {},
err() {}
}
}
})
describe('test s3 mixin', function() {
beforeEach(function() {
this.settings = {
filestore: {
backend: 's3'
}
}
this.requires = {
'./S3PersistorManager': this.S3PersistorManager,
'settings-sharelatex': this.settings,
'logger-sharelatex': {
log() {},
err() {}
}
}
return (this.PersistorManager = SandboxedModule.require(modulePath, {
requires: this.requires
}))
})
it('should implement the S3 wrapped method when S3 is configured', function() {
settings.filestore.backend = 's3'
PersistorManager = SandboxedModule.require(modulePath, { requires })
it('should load getFileStream', function(done) {
this.PersistorManager.should.respondTo('getFileStream')
this.PersistorManager.getFileStream()
this.S3PersistorManager.getFileStream.calledOnce.should.equal(true)
return done()
})
it('should load checkIfFileExists', function(done) {
this.PersistorManager.checkIfFileExists()
this.S3PersistorManager.checkIfFileExists.calledOnce.should.equal(true)
return done()
})
it('should load deleteFile', function(done) {
this.PersistorManager.deleteFile()
this.S3PersistorManager.deleteFile.calledOnce.should.equal(true)
return done()
})
it('should load deleteDirectory', function(done) {
this.PersistorManager.deleteDirectory()
this.S3PersistorManager.deleteDirectory.calledOnce.should.equal(true)
return done()
})
it('should load sendStream', function(done) {
this.PersistorManager.sendStream()
this.S3PersistorManager.sendStream.calledOnce.should.equal(true)
return done()
})
return it('should load insertFile', function(done) {
this.PersistorManager.insertFile()
this.S3PersistorManager.insertFile.calledOnce.should.equal(true)
return done()
})
expect(PersistorManager).to.respondTo('wrappedMethod')
expect(PersistorManager.wrappedMethod()).to.equal('S3PersistorManager')
})
describe('test unspecified mixins', () =>
it('should load s3 when no wrapper specified', function(done) {
this.settings = { filestore: {} }
this.requires = {
'./S3PersistorManager': this.S3PersistorManager,
'settings-sharelatex': this.settings,
'logger-sharelatex': {
log() {},
err() {}
}
}
this.PersistorManager = SandboxedModule.require(modulePath, {
requires: this.requires
})
this.PersistorManager.should.respondTo('getFileStream')
this.PersistorManager.getFileStream()
this.S3PersistorManager.getFileStream.calledOnce.should.equal(true)
return done()
}))
it('should implement the FS wrapped method when FS is configured', function() {
settings.filestore.backend = 'fs'
PersistorManager = SandboxedModule.require(modulePath, { requires })
return describe('test invalid mixins', () =>
it('should not load an invalid wrapper', function(done) {
this.settings = {
filestore: {
backend: 'magic'
}
}
this.requires = {
'./S3PersistorManager': this.S3PersistorManager,
'settings-sharelatex': this.settings,
'logger-sharelatex': {
log() {},
err() {}
}
}
this.fsWrapper = null
try {
this.PersistorManager = SandboxedModule.require(modulePath, {
requires: this.requires
})
} catch (error) {
assert.equal('Unknown filestore backend: magic', error.message)
}
assert.isNull(this.fsWrapper)
return done()
}))
expect(PersistorManager).to.respondTo('wrappedMethod')
expect(PersistorManager.wrappedMethod()).to.equal('FSPersistorManager')
})
it('should throw an error when the backend is not configured', function() {
try {
SandboxedModule.require(modulePath, { requires })
} 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.filestore.backend = 'magic'
try {
SandboxedModule.require(modulePath, { requires })
} catch (err) {
expect(err.message).to.equal('unknown filestore backend: magic')
return
}
expect('should have caught an error').not.to.exist
})
})