| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- sinon = require('sinon')
- chai = require('chai')
- should = chai.should()
- expect = chai.expect
- modulePath = "../../../../app/js/WebApiManager.js"
- SandboxedModule = require('sandboxed-module')
- describe "WebApiManager", ->
- beforeEach ->
- @WebApiManager = SandboxedModule.require modulePath, requires:
- "requestretry": @request = {}
- "logger-sharelatex": @logger = { log: sinon.stub(), error: sinon.stub() }
- 'settings-sharelatex': @settings =
- apis:
- web:
- url: "http://example.com"
- user: "sharelatex"
- pass: "password"
- @callback = sinon.stub()
- @user_id = "mock-user-id"
- @project_id = "mock-project-id"
- @user_info =
- email: "leo@sharelatex.com"
- id: @user_id
- first_name: "Leo"
- last_nane: "Lion"
- extra_param: "blah"
- @project =
- features: "mock-features"
- describe "getUserInfo", ->
- describe "successfully", ->
- beforeEach ->
- @body = JSON.stringify @user_info
- @request.get = sinon.stub().callsArgWith(1, null, {statusCode: 200}, @body)
- @WebApiManager.getUserInfo @user_id, @callback
- it 'should get the user from the web api', ->
- @request.get
- .calledWithMatch({
- url: "#{@settings.apis.web.url}/user/#{@user_id}/personal_info"
- auth:
- user: @settings.apis.web.user
- pass: @settings.apis.web.pass
- sendImmediately: true
- })
- .should.equal true
- it "should call the callback with only the email, id and names", ->
- @callback.calledWith(null, {
- id: @user_id
- email: @user_info.email
- first_name: @user_info.first_name
- last_name: @user_info.last_name
- }).should.equal true
- describe "when the web API returns an error", ->
- beforeEach ->
- @request.get = sinon.stub().callsArgWith(1, @error = new Error("something went wrong"), null, null)
- @WebApiManager.getUserInfo @user_id, @callback
- it "should return an error to the callback", ->
- @callback.calledWith(@error).should.equal true
- describe "when the web returns a failure error code", ->
- beforeEach ->
- @request.get = sinon.stub().callsArgWith(1, null, { statusCode: 500, attempts: 42}, "")
- @WebApiManager.getUserInfo @user_id, @callback
- it "should return the callback with an error", ->
- @callback
- .calledWith(sinon.match.has('message', "web returned a non-success status code: 500 (attempts: 42)"))
- .should.equal true
- describe "when the user cannot be found", ->
- beforeEach ->
- @request.get = sinon.stub().callsArgWith(1, null, {statusCode: 404}, "nothing")
- @WebApiManager.getUserInfo @user_id, @callback
- it "should return a null value", ->
- @callback
- .calledWith(null, null)
- .should.equal true
- describe "getProjectDetails", ->
- describe "successfully", ->
- beforeEach ->
- @body = JSON.stringify @project
- @request.get = sinon.stub().callsArgWith(1, null, {statusCode: 200}, @body)
- @WebApiManager.getProjectDetails @project_id, @callback
- it 'should get the project from the web api', ->
- @request.get
- .calledWithMatch({
- url: "#{@settings.apis.web.url}/project/#{@project_id}/details"
- auth:
- user: @settings.apis.web.user
- pass: @settings.apis.web.pass
- sendImmediately: true
- })
- .should.equal true
- it "should call the callback with the project", ->
- @callback.calledWith(null, @project).should.equal true
- describe "when the web API returns an error", ->
- beforeEach ->
- @request.get = sinon.stub().callsArgWith(1, @error = new Error("something went wrong"), null, null)
- @WebApiManager.getProjectDetails @project_id, @callback
- it "should return an error to the callback", ->
- @callback.calledWith(@error).should.equal true
- describe "when the web returns a failure error code", ->
- beforeEach ->
- @request.get = sinon.stub().callsArgWith(1, null, { statusCode: 500, attempts: 42 }, "")
- @WebApiManager.getProjectDetails @project_id, @callback
- it "should return the callback with an error", ->
- @callback
- .calledWith(sinon.match.has('message', "web returned a non-success status code: 500 (attempts: 42)"))
- .should.equal true
|