| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- SandboxedModule = require('sandboxed-module')
- assert = require('assert')
- require('chai').should()
- expect = require('chai').expect
- sinon = require('sinon')
- modulePath = require('path').join __dirname, '../../../../app/js/Features/History/RestoreManager'
- Errors = require '../../../../app/js/Features/Errors/Errors'
- tk = require("timekeeper")
- moment = require('moment')
- describe 'RestoreManager', ->
- beforeEach ->
- tk.freeze Date.now() # freeze the time for these tests
- @RestoreManager = SandboxedModule.require modulePath, requires:
- '../../infrastructure/FileWriter': @FileWriter = {}
- '../Uploads/FileSystemImportManager': @FileSystemImportManager = {}
- '../Project/ProjectLocator': @ProjectLocator = {}
- '../Errors/Errors': Errors
- '../Project/ProjectEntityHandler': @ProjectEntityHandler = {}
- '../Editor/EditorController': @EditorController = {}
- 'logger-sharelatex': @logger = {log: sinon.stub(), err: sinon.stub()}
- @user_id = 'mock-user-id'
- @project_id = 'mock-project-id'
- @version = 42
- @callback = sinon.stub()
- afterEach ->
- tk.reset()
- describe 'restoreFileFromV2', ->
- beforeEach ->
- @RestoreManager._writeFileVersionToDisk = sinon.stub().yields(null, @fsPath = "/tmp/path/on/disk")
- @RestoreManager._findOrCreateFolder = sinon.stub().yields(null, @folder_id = 'mock-folder-id')
- @FileSystemImportManager.addEntity = sinon.stub().yields(null, @entity = 'mock-entity')
- describe "with a file not in a folder", ->
- beforeEach ->
- @pathname = 'foo.tex'
- @RestoreManager.restoreFileFromV2 @user_id, @project_id, @version, @pathname, @callback
- it 'should write the file version to disk', ->
- @RestoreManager._writeFileVersionToDisk
- .calledWith(@project_id, @version, @pathname)
- .should.equal true
- it 'should find the root folder', ->
- @RestoreManager._findOrCreateFolder
- .calledWith(@project_id, "")
- .should.equal true
- it 'should add the entity', ->
- @FileSystemImportManager.addEntity
- .calledWith(@user_id, @project_id, @folder_id, 'foo.tex', @fsPath, false)
- .should.equal true
- it 'should call the callback with the entity', ->
- @callback.calledWith(null, @entity).should.equal true
- describe "with a file in a folder", ->
- beforeEach ->
- @pathname = 'foo/bar.tex'
- @RestoreManager.restoreFileFromV2 @user_id, @project_id, @version, @pathname, @callback
- it 'should find the folder', ->
- @RestoreManager._findOrCreateFolder
- .calledWith(@project_id, "foo")
- .should.equal true
- it 'should add the entity by its basename', ->
- @FileSystemImportManager.addEntity
- .calledWith(@user_id, @project_id, @folder_id, 'bar.tex', @fsPath, false)
- .should.equal true
- describe '_findOrCreateFolder', ->
- beforeEach ->
- @EditorController.mkdirp = sinon.stub().yields(null, [], {_id: @folder_id = 'mock-folder-id'})
- @RestoreManager._findOrCreateFolder @project_id, 'folder/name', @callback
- it 'should look up or create the folder', ->
- @EditorController.mkdirp
- .calledWith(@project_id, 'folder/name')
- .should.equal true
- it 'should return the folder_id', ->
- @callback.calledWith(null, @folder_id).should.equal true
- describe '_addEntityWithUniqueName', ->
- beforeEach ->
- @addEntityWithName = sinon.stub()
- @name = 'foo.tex'
- describe 'with a valid name', ->
- beforeEach ->
- @addEntityWithName.yields(null, @entity = 'mock-entity')
- @RestoreManager._addEntityWithUniqueName @addEntityWithName, @name, @callback
- it 'should add the entity', ->
- @addEntityWithName.calledWith(@name).should.equal true
- it 'should return the entity', ->
- @callback.calledWith(null, @entity).should.equal true
- describe "with an invalid name", ->
- beforeEach ->
- @addEntityWithName.onFirstCall().yields(new Errors.InvalidNameError())
- @addEntityWithName.onSecondCall().yields(null, @entity = 'mock-entity')
- @RestoreManager._addEntityWithUniqueName @addEntityWithName, @name, @callback
- it 'should try to add the entity with its original name', ->
- @addEntityWithName.calledWith('foo.tex').should.equal true
- it 'should try to add the entity with a unique name', ->
- date = moment(new Date()).format('Do MMM YY H:mm:ss')
- @addEntityWithName.calledWith("foo (Restored on #{date}).tex").should.equal true
- it 'should return the entity', ->
- @callback.calledWith(null, @entity).should.equal true
|