Add in getProjectDetails to WebApiManager

This commit is contained in:
James Allen 2014-03-28 13:05:16 +00:00
parent 22e3aac5b0
commit 9f1efe6dca
2 changed files with 79 additions and 16 deletions

View file

@ -3,11 +3,9 @@ logger = require "logger-sharelatex"
Settings = require "settings-sharelatex" Settings = require "settings-sharelatex"
module.exports = WebApiManager = module.exports = WebApiManager =
getUserInfo: (user_id, callback = (error, userInfo) ->) -> sendRequest: (url, callback = (error, body) ->) ->
url = "#{Settings.apis.web.url}/user/#{user_id}/personal_info"
logger.log user_id: user_id, "getting user info from web"
request.get { request.get {
url: url url: "#{Settings.apis.web.url}#{url}"
auth: auth:
user: Settings.apis.web.user user: Settings.apis.web.user
pass: Settings.apis.web.pass pass: Settings.apis.web.pass
@ -16,6 +14,19 @@ module.exports = WebApiManager =
if error? if error?
return callback(error) return callback(error)
if res.statusCode >= 200 and res.statusCode < 300 if res.statusCode >= 200 and res.statusCode < 300
return callback null, body
else
error = new Error("web returned a non-success status code: #{res.statusCode}")
callback error
getUserInfo: (user_id, callback = (error, userInfo) ->) ->
url = "/user/#{user_id}/personal_info"
logger.log user_id: user_id, "getting user info from web"
WebApiManager.sendRequest url, (error, body) ->
if error?
logger.error err: error, user_id: user_id, url: url, "error accessing web"
return callback error
try try
user = JSON.parse(body) user = JSON.parse(body)
catch error catch error
@ -26,7 +37,17 @@ module.exports = WebApiManager =
first_name: user.first_name first_name: user.first_name
last_name: user.last_name last_name: user.last_name
} }
else
error = new Error("web returned a non-success status code: #{res.statusCode}") getProjectDetails: (project_id, callback = (error, details) ->) ->
logger.error err: error, user_id: user_id, url: url, "error accessing web" url = "/project/#{project_id}/details"
callback error logger.log project_id: project_id, "getting project details from web"
WebApiManager.sendRequest url, (error, body) ->
if error?
logger.error err: error, project_id: project_id, url: url, "error accessing web"
return callback error
try
project = JSON.parse(body)
catch error
return callback(error)
callback null, project

View file

@ -18,12 +18,15 @@ describe "WebApiManager", ->
pass: "password" pass: "password"
@callback = sinon.stub() @callback = sinon.stub()
@user_id = "mock-user-id" @user_id = "mock-user-id"
@project_id = "mock-project-id"
@user_info = @user_info =
email: "leo@sharelatex.com" email: "leo@sharelatex.com"
id: @user_id id: @user_id
first_name: "Leo" first_name: "Leo"
last_nane: "Lion" last_nane: "Lion"
extra_param: "blah" extra_param: "blah"
@project =
features: "mock-features"
describe "getUserInfo", -> describe "getUserInfo", ->
describe "successfully", -> describe "successfully", ->
@ -33,7 +36,6 @@ describe "WebApiManager", ->
@WebApiManager.getUserInfo @user_id, @callback @WebApiManager.getUserInfo @user_id, @callback
it 'should get the user from the web api', -> it 'should get the user from the web api', ->
url =
@request.get @request.get
.calledWith({ .calledWith({
url: "#{@settings.apis.web.url}/user/#{@user_id}/personal_info" url: "#{@settings.apis.web.url}/user/#{@user_id}/personal_info"
@ -69,3 +71,43 @@ describe "WebApiManager", ->
@callback @callback
.calledWith(new Error("web returned failure status code: 500")) .calledWith(new Error("web returned failure status code: 500"))
.should.equal true .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
.calledWith({
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 }, "")
@WebApiManager.getProjectDetails @project_id, @callback
it "should return the callback with an error", ->
@callback
.calledWith(new Error("web returned failure status code: 500"))
.should.equal true