mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Add in getProjectDetails to WebApiManager
This commit is contained in:
parent
22e3aac5b0
commit
9f1efe6dca
2 changed files with 79 additions and 16 deletions
|
@ -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
|
|
@ -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
|
Loading…
Reference in a new issue