mirror of
https://github.com/overleaf/overleaf.git
synced 2024-10-31 21:21:03 -04:00
86 lines
2.6 KiB
CoffeeScript
86 lines
2.6 KiB
CoffeeScript
|
sinon = require('sinon')
|
||
|
chai = require('chai')
|
||
|
should = chai.should()
|
||
|
expect = chai.expect
|
||
|
modulePath = "../../../../app/js/ShareJsDB.js"
|
||
|
SandboxedModule = require('sandboxed-module')
|
||
|
Errors = require "../../../../app/js/Errors"
|
||
|
|
||
|
describe "ShareJsDB.getSnapshot", ->
|
||
|
beforeEach ->
|
||
|
@doc_id = "document-id"
|
||
|
@project_id = "project-id"
|
||
|
@doc_key = "#{@project_id}:#{@doc_id}"
|
||
|
@callback = sinon.stub()
|
||
|
@ShareJsDB = SandboxedModule.require modulePath, requires:
|
||
|
"./DocumentManager": @DocumentManager = {}
|
||
|
"./RedisManager": {}
|
||
|
"./DocOpsManager": {}
|
||
|
|
||
|
@version = 42
|
||
|
|
||
|
describe "with a text document", ->
|
||
|
beforeEach ->
|
||
|
@lines = ["one", "two", "three"]
|
||
|
|
||
|
describe "successfully", ->
|
||
|
beforeEach ->
|
||
|
@DocumentManager.getDoc = sinon.stub().callsArgWith(2, null, @lines, @version)
|
||
|
@ShareJsDB.getSnapshot @doc_key, @callback
|
||
|
|
||
|
it "should get the doc", ->
|
||
|
@DocumentManager.getDoc
|
||
|
.calledWith(@project_id, @doc_id)
|
||
|
.should.equal true
|
||
|
|
||
|
it "should return the doc lines", ->
|
||
|
@callback.args[0][1].snapshot.should.equal @lines.join("\n")
|
||
|
|
||
|
it "should return the doc version", ->
|
||
|
@callback.args[0][1].v.should.equal @version
|
||
|
|
||
|
it "should return the type as text", ->
|
||
|
@callback.args[0][1].type.should.equal "text"
|
||
|
|
||
|
describe "when the doclines do not exist", ->
|
||
|
beforeEach ->
|
||
|
@DocumentManager.getDoc = sinon.stub().callsArgWith(2, null, null, null)
|
||
|
@ShareJsDB.getSnapshot @doc_key, @callback
|
||
|
|
||
|
it "should return the callback with a NotFoundError", ->
|
||
|
@callback.calledWith(new Errors.NotFoundError("not found")).should.equal true
|
||
|
|
||
|
describe "when getDoc returns an error", ->
|
||
|
beforeEach ->
|
||
|
@DocumentManager.getDoc = sinon.stub().callsArgWith(2, @error = new Error("oops"), null, null)
|
||
|
@ShareJsDB.getSnapshot @doc_key, @callback
|
||
|
|
||
|
it "should return the callback with an error", ->
|
||
|
@callback.calledWith(@error).should.equal true
|
||
|
|
||
|
describe "with a JSON document", ->
|
||
|
beforeEach ->
|
||
|
@lines = [{text: "one"}, {text:"two"}, {text:"three"}]
|
||
|
|
||
|
describe "successfully", ->
|
||
|
beforeEach ->
|
||
|
@DocumentManager.getDoc = sinon.stub().callsArgWith(2, null, @lines, @version)
|
||
|
@ShareJsDB.getSnapshot @doc_key, @callback
|
||
|
|
||
|
it "should get the doc", ->
|
||
|
@DocumentManager.getDoc
|
||
|
.calledWith(@project_id, @doc_id)
|
||
|
.should.equal true
|
||
|
|
||
|
it "should return the doc lines", ->
|
||
|
expect(@callback.args[0][1].snapshot).to.deep.equal lines: @lines
|
||
|
|
||
|
it "should return the doc version", ->
|
||
|
@callback.args[0][1].v.should.equal @version
|
||
|
|
||
|
it "should return the type as text", ->
|
||
|
@callback.args[0][1].type.should.equal "json"
|
||
|
|
||
|
|
||
|
|