From 5f87dfb3bf5b36bee17119f39c0b5d2799d54da4 Mon Sep 17 00:00:00 2001 From: Oliver Matthews Date: Tue, 25 Feb 2014 15:52:30 +0000 Subject: [PATCH] add unit tests for fsWrapper make other unit tests no longer depend on fsWrapper --- .../filestore/app/coffee/fsWrapper.coffee | 21 ++-- .../filestore/app/coffee/testWrapper.coffee | 11 --- .../config/settings.development.coffee | 2 +- .../unit/coffee/FileControllerTests.coffee | 12 ++- .../test/unit/coffee/FileHandlerTests.coffee | 13 ++- .../test/unit/coffee/fsWrapperTests.coffee | 96 +++++++++++++++++++ 6 files changed, 118 insertions(+), 37 deletions(-) delete mode 100644 services/filestore/app/coffee/testWrapper.coffee create mode 100644 services/filestore/test/unit/coffee/fsWrapperTests.coffee diff --git a/services/filestore/app/coffee/fsWrapper.coffee b/services/filestore/app/coffee/fsWrapper.coffee index aff75d79f8..be761cd07e 100644 --- a/services/filestore/app/coffee/fsWrapper.coffee +++ b/services/filestore/app/coffee/fsWrapper.coffee @@ -1,19 +1,10 @@ settings = require("settings-sharelatex") logger = require("logger-sharelatex") s3Wrapper = require("./s3Wrapper") -testWrapper = require("./testWrapper") -module.exports = - selectBackend: (backend) -> - wrappedFs = switch backend - when "s3" then s3Wrapper - when "test" then testWrapper - else null - - if !wrappedFs - throw new Error( "Unknown filestore wrapper #{backend}" ) - - module.exports[name] = method for name,method of wrappedFs - -if settings.fileStoreWrapper? - module.exports.selectBackend(settings.fileStoreWrapper) +logger.log backend:settings.filestoreBackend,"Loading backend" +module.exports = switch settings.filestoreBackend + when "s3" + s3Wrapper + else + throw new Error( "Unknown filestore backend: #{settings.filestoreBackend}" ) diff --git a/services/filestore/app/coffee/testWrapper.coffee b/services/filestore/app/coffee/testWrapper.coffee deleted file mode 100644 index 966d4869b0..0000000000 --- a/services/filestore/app/coffee/testWrapper.coffee +++ /dev/null @@ -1,11 +0,0 @@ -sinon = require('sinon') -logger = require("logger-sharelatex") - -module.exports = - getFileStream: sinon.stub() - checkIfFileExists: sinon.stub() - deleteFile: sinon.stub() - deleteDirectory: sinon.stub() - sendStreamToS3: sinon.stub() - insertFile: sinon.stub() - copyFile: sinon.stub() diff --git a/services/filestore/config/settings.development.coffee b/services/filestore/config/settings.development.coffee index f4f0c482e1..7bd2ea59a1 100644 --- a/services/filestore/config/settings.development.coffee +++ b/services/filestore/config/settings.development.coffee @@ -7,7 +7,7 @@ module.exports = # which backend to use # current options are: # "s3" - Amazon S3 - filestoreWrapper: "s3" + filestoreBackend: "s3" # ShareLaTeX stores binary files like images in S3. # Fill in your Amazon S3 credentials below. diff --git a/services/filestore/test/unit/coffee/FileControllerTests.coffee b/services/filestore/test/unit/coffee/FileControllerTests.coffee index 7ff2c5f14c..8a6a671dab 100644 --- a/services/filestore/test/unit/coffee/FileControllerTests.coffee +++ b/services/filestore/test/unit/coffee/FileControllerTests.coffee @@ -9,8 +9,12 @@ SandboxedModule = require('sandboxed-module') describe "FileController", -> beforeEach -> + @FsWrapper = + sendStreamToS3: sinon.stub() + copyFile: sinon.stub() + deleteFile:sinon.stub() + @settings = - filestreamWrapper:"test" s3: buckets: user_files:"user_files" @@ -27,17 +31,15 @@ describe "FileController", -> "logger-sharelatex": log:-> err:-> - @FsWrapper = require("../../../app/js/fsWrapper.js") - @FsWrapper.selectBackend("test") @project_id = "project_id" @file_id = "file_id" @bucket = "user_files" @key = "#{@project_id}/#{@file_id}" - @req = + @req = key:@key bucket:@bucket query:{} - params: + params: project_id:@project_id file_id:@file_id @res = diff --git a/services/filestore/test/unit/coffee/FileHandlerTests.coffee b/services/filestore/test/unit/coffee/FileHandlerTests.coffee index d642031263..2c23c2ec17 100644 --- a/services/filestore/test/unit/coffee/FileHandlerTests.coffee +++ b/services/filestore/test/unit/coffee/FileHandlerTests.coffee @@ -1,4 +1,3 @@ - assert = require("chai").assert sinon = require('sinon') chai = require('chai') @@ -11,23 +10,27 @@ describe "FileHandler", -> beforeEach -> @settings = - filestreamWrapper:"test" s3: buckets: user_files:"user_files" + @FsWrapper = + getFileStream: sinon.stub() + checkIfFileExists: sinon.stub() + deleteFile: sinon.stub() + deleteDirectory: sinon.stub() + sendStreamToS3: sinon.stub() + insertFile: sinon.stub() @LocalFileWriter = writeStream: sinon.stub() @FileConverter = convert: sinon.stub() thumbnail: sinon.stub() preview: sinon.stub() - @keyBuilder = + @keyBuilder = addCachingToKey: sinon.stub() getConvertedFolderKey: sinon.stub() @ImageOptimiser = compressPng: sinon.stub() - @FsWrapper = require("../../../app/js/fsWrapper.js") - @FsWrapper.selectBackend("test") @handler = SandboxedModule.require modulePath, requires: "settings-sharelatex": @settings "./fsWrapper":@FsWrapper diff --git a/services/filestore/test/unit/coffee/fsWrapperTests.coffee b/services/filestore/test/unit/coffee/fsWrapperTests.coffee new file mode 100644 index 0000000000..d8543766b2 --- /dev/null +++ b/services/filestore/test/unit/coffee/fsWrapperTests.coffee @@ -0,0 +1,96 @@ +logger = require("logger-sharelatex") +assert = require("chai").assert +sinon = require('sinon') +chai = require('chai') +should = chai.should() +expect = chai.expect +modulePath = "../../../app/js/fsWrapper.js" +SandboxedModule = require('sandboxed-module') + + +describe "fsWrapperTests", -> + + beforeEach -> + @s3Wrapper = + getFileStream: sinon.stub() + checkIfFileExists: sinon.stub() + deleteFile: sinon.stub() + deleteDirectory: sinon.stub() + sendStreamToS3: sinon.stub() + insertFile: sinon.stub() + + describe "test s3 mixin", -> + beforeEach -> + @settings = + filestoreBackend: "s3" + @requires = + "./s3Wrapper": @s3Wrapper + "settings-sharelatex": @settings + "logger-sharelatex": + log:-> + err:-> + @fsWrapper = SandboxedModule.require modulePath, requires: @requires + + it "should load getFileStream", (done) -> + @fsWrapper.should.respondTo("getFileStream") + @fsWrapper.getFileStream() + @s3Wrapper.getFileStream.calledOnce.should.equal true + done() + + it "should load checkIfFileExists", (done) -> + @fsWrapper.checkIfFileExists() + @s3Wrapper.checkIfFileExists.calledOnce.should.equal true + done() + + it "should load deleteFile", (done) -> + @fsWrapper.deleteFile() + @s3Wrapper.deleteFile.calledOnce.should.equal true + done() + + it "should load deleteDirectory", (done) -> + @fsWrapper.deleteDirectory() + @s3Wrapper.deleteDirectory.calledOnce.should.equal true + done() + + it "should load sendStreamToS3", (done) -> + @fsWrapper.sendStreamToS3() + @s3Wrapper.sendStreamToS3.calledOnce.should.equal true + done() + + it "should load insertFile", (done) -> + @fsWrapper.insertFile() + @s3Wrapper.insertFile.calledOnce.should.equal true + done() + + describe "test invalid mixins", -> + + it "should not load a null wrapper", (done) -> + @settings = + @requires = + "./s3Wrapper": @s3Wrapper + "settings-sharelatex": @settings + "logger-sharelatex": + log:-> + err:-> + try + @fsWrapper=SandboxedModule.require modulePath, requires: @requires + catch error + assert.equal("Unknown filestore backend: null",error.message) + done() + + it "should not load an invalid wrapper", (done) -> + @settings = + filestoreBackend:"magic" + @requires = + "./s3Wrapper": @s3Wrapper + "settings-sharelatex": @settings + "logger-sharelatex": + log:-> + err:-> + try + @fsWrapper=SandboxedModule.require modulePath, requires: @requires + catch error + assert.equal("Unknown filestore backend: magic",error.message) + done() + +