overleaf/services/web/test/unit/coffee/Documents/DocumentControllerTests.coffee

101 lines
3.1 KiB
CoffeeScript
Raw Normal View History

2014-02-12 05:23:40 -05:00
sinon = require('sinon')
chai = require('chai')
should = chai.should()
expect = chai.expect
modulePath = "../../../../app/js/Features/Documents/DocumentController.js"
SandboxedModule = require('sandboxed-module')
events = require "events"
MockRequest = require "../helpers/MockRequest"
MockResponse = require "../helpers/MockResponse"
2016-03-23 11:14:49 -04:00
Errors = require "../../../../app/js/Features/Errors/Errors"
2014-02-12 05:23:40 -05:00
describe "DocumentController", ->
beforeEach ->
@DocumentController = SandboxedModule.require modulePath, requires:
"logger-sharelatex":
log:->
err:->
2014-02-12 05:23:40 -05:00
"../Project/ProjectEntityHandler": @ProjectEntityHandler = {}
"../Project/ProjectEntityUpdateHandler": @ProjectEntityUpdateHandler = {}
2014-02-12 05:23:40 -05:00
@res = new MockResponse()
@req = new MockRequest()
@next = sinon.stub()
@project_id = "project-id-123"
@doc_id = "doc-id-123"
@doc_lines = ["one", "two", "three"]
2014-05-08 08:42:30 -04:00
@version = 42
@ranges = {"mock": "ranges"}
@pathname = '/a/b/c/file.tex'
2014-05-08 08:42:30 -04:00
@rev = 5
2014-02-12 05:23:40 -05:00
describe "getDocument", ->
beforeEach ->
@req.params =
Project_id: @project_id
doc_id: @doc_id
describe "when the document exists", ->
beforeEach ->
@ProjectEntityHandler.getDoc = sinon.stub().callsArgWith(3, null, @doc_lines, @rev, @version, @ranges, @pathname)
2014-02-12 05:23:40 -05:00
@DocumentController.getDocument(@req, @res, @next)
it "should get the document from Mongo", ->
2014-05-08 08:42:30 -04:00
@ProjectEntityHandler.getDoc
.calledWith(@project_id, @doc_id, pathname: true)
2014-02-12 05:23:40 -05:00
.should.equal true
it "should return the document data to the client as JSON", ->
@res.type.should.equal "json"
@res.body.should.equal JSON.stringify
lines: @doc_lines
version: @version
ranges: @ranges
pathname: @pathname
2014-02-12 05:23:40 -05:00
describe "when the document doesn't exist", ->
beforeEach ->
@ProjectEntityHandler.getDoc = sinon.stub().callsArgWith(3, new Errors.NotFoundError("not found"), null)
2014-02-12 05:23:40 -05:00
@DocumentController.getDocument(@req, @res, @next)
it "should call next with the NotFoundError", ->
@next.calledWith(new Errors.NotFoundError("not found"))
.should.equal true
describe "setDocument", ->
beforeEach ->
@req.params =
Project_id: @project_id
doc_id: @doc_id
describe "when the document exists", ->
beforeEach ->
@ProjectEntityUpdateHandler.updateDocLines = sinon.stub().yields()
2014-02-12 05:23:40 -05:00
@req.body =
lines: @doc_lines
version: @version
ranges: @ranges
2014-02-12 05:23:40 -05:00
@DocumentController.setDocument(@req, @res, @next)
it "should update the document in Mongo", ->
@ProjectEntityUpdateHandler.updateDocLines
.calledWith(@project_id, @doc_id, @doc_lines, @version, @ranges)
2014-02-12 05:23:40 -05:00
.should.equal true
it "should return a successful response", ->
@res.success.should.equal true
describe "when the document doesn't exist", ->
beforeEach ->
@ProjectEntityUpdateHandler.updateDocLines = sinon.stub().yields(new Errors.NotFoundError("document does not exist"))
2014-02-12 05:23:40 -05:00
@req.body =
lines: @doc_lines
@DocumentController.setDocument(@req, @res, @next)
it "should call next with the NotFoundError", ->
@next.calledWith(new Errors.NotFoundError("not found"))
.should.equal true