| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- sinon = require('sinon')
- chai = require('chai')
- should = chai.should()
- expect = chai.expect
- modulePath = "../../../../app/js/Features/Uploads/ProjectUploadController.js"
- SandboxedModule = require('sandboxed-module')
- MockRequest = require "../helpers/MockRequest"
- MockResponse = require "../helpers/MockResponse"
- describe "ProjectUploadController", ->
- beforeEach ->
- @req = new MockRequest()
- @res = new MockResponse()
- @user_id = "user-id-123"
- @metrics =
- Timer: class Timer
- done: sinon.stub()
- @AuthenticationController =
- getLoggedInUserId: sinon.stub().returns(@user_id)
- @ProjectUploadController = SandboxedModule.require modulePath, requires:
- "./ProjectUploadManager" : @ProjectUploadManager = {}
- "./FileSystemImportManager" : @FileSystemImportManager = {}
- "logger-sharelatex" : @logger = {log: sinon.stub(), error: sinon.stub(), err:->}
- "metrics-sharelatex": @metrics
- '../Authentication/AuthenticationController': @AuthenticationController
- "fs" : @fs = {}
- describe "uploadProject", ->
- beforeEach ->
- @path = "/path/to/file/on/disk.zip"
- @name = "filename.zip"
- @req.files =
- qqfile:
- path: @path
- originalname: @name
- @req.session =
- user:
- _id: @user_id
- @project =
- _id: @project_id = "project-id-123"
- @fs.unlink = sinon.stub()
- describe "successfully", ->
- beforeEach ->
- @ProjectUploadManager.createProjectFromZipArchive =
- sinon.stub().callsArgWith(3, null, @project)
- @ProjectUploadController.uploadProject @req, @res
- it "should create a project owned by the logged in user", ->
- @ProjectUploadManager
- .createProjectFromZipArchive
- .calledWith(@user_id)
- .should.equal true
- it "should create a project with the same name as the zip archive", ->
- @ProjectUploadManager
- .createProjectFromZipArchive
- .calledWith(sinon.match.any, "filename", sinon.match.any)
- .should.equal true
- it "should create a project from the zip archive", ->
- @ProjectUploadManager
- .createProjectFromZipArchive
- .calledWith(sinon.match.any, sinon.match.any, @path)
- .should.equal true
- it "should return a successful response to the FileUploader client", ->
- expect(@res.body).to.deep.equal
- success: true
- project_id: @project_id
- it "should record the time taken to do the upload", ->
- @metrics.Timer::done.called.should.equal true
- it "should output a log line", ->
- @logger.log
- .calledWith(sinon.match.any, "uploaded project")
- .should.equal true
- it "should remove the uploaded file", ->
- @fs.unlink.calledWith(@path).should.equal true
- describe "when ProjectUploadManager.createProjectFromZipArchive fails", ->
- beforeEach ->
- @ProjectUploadManager.createProjectFromZipArchive =
- sinon.stub().callsArgWith(3, new Error("Something went wrong"), @project)
- @ProjectUploadController.uploadProject @req, @res
- it "should return a failed response to the FileUploader client", ->
- expect(@res.body).to.deep.equal
- success: false
- it "should output an error log line", ->
- @logger.error
- .calledWith(sinon.match.any, "error uploading project")
- .should.equal true
- describe "uploadFile", ->
- beforeEach ->
- @project_id = "project-id-123"
- @folder_id = "folder-id-123"
- @path = "/path/to/file/on/disk.png"
- @filename = "filename.png"
- @req.files =
- qqfile:
- path: @path
- originalname: @name
- @req.session =
- user:
- _id: @user_id
- @req.params =
- Project_id: @project_id
- @req.query =
- folder_id: @folder_id
- @fs.unlink = sinon.stub()
- describe "successfully", ->
- beforeEach ->
- @entity =
- _id : "1234"
- @FileSystemImportManager.addEntity = sinon.stub().callsArgWith(6, null, @entity)
- @ProjectUploadController.uploadFile @req, @res
- it "should insert the file", ->
- @FileSystemImportManager.addEntity
- .calledWith(@user_id, @project_id, @folder_id, @name, @path)
- .should.equal true
- it "should return a successful response to the FileUploader client", ->
- expect(@res.body).to.deep.equal
- success: true
- entity_id: @entity._id
- it "should output a log line", ->
- @logger.log
- .calledWith(sinon.match.any, "uploaded file")
- .should.equal true
- it "should time the request", ->
- @metrics.Timer::done.called.should.equal true
- it "should remove the uploaded file", ->
- @fs.unlink.calledWith(@path).should.equal true
- describe "when FileSystemImportManager.addEntity returns an error", ->
- beforeEach ->
- @FileSystemImportManager.addEntity = sinon.stub()
- .callsArgWith(6, new Error("Sorry something went wrong"))
- @ProjectUploadController.uploadFile @req, @res
- it "should return an unsuccessful response to the FileUploader client", ->
- expect(@res.body).to.deep.equal
- success: false
- it "should output an error log line", ->
- @logger.error
- .calledWith(sinon.match.any, "error uploading file")
- .should.equal true
- describe "with a bad request", ->
- beforeEach ->
- @req.files.qqfile.originalname = ""
- @ProjectUploadController.uploadFile @req, @res
- it "should return a a non success response", ->
- expect(@res.body).to.deep.equal
- success: false
|