mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-27 18:51:55 +00:00
83 lines
3.4 KiB
CoffeeScript
83 lines
3.4 KiB
CoffeeScript
SandboxedModule = require('sandboxed-module')
|
|
assert = require('assert')
|
|
require('chai').should()
|
|
sinon = require('sinon')
|
|
modulePath = require('path').join __dirname, '../../../../app/js/Features/Dropbox/DropboxHandler.js'
|
|
|
|
thirdPartyDataStoreApiUrl = "http://third-party-json-store.herokuapp.com"
|
|
siteUrl = "www.sharelatex.com"
|
|
|
|
describe 'third party data store', ->
|
|
user_id = "123nd3ijdks"
|
|
|
|
beforeEach ->
|
|
@stubGet = sinon.stub()
|
|
@stubDel = sinon.stub()
|
|
@projectEntityHandler = flushProjectToThirdPartyDataStore:sinon.stub().callsArgWith(1)
|
|
@projectModel = findAllUsersProjects : sinon.stub()
|
|
@handler = SandboxedModule.require modulePath, requires:
|
|
"settings-sharelatex": {siteUrl:siteUrl, apis: {thirdPartyDataStore: {url: thirdPartyDataStoreApiUrl}}}
|
|
"../../models/Project":{Project:@projectModel}
|
|
'../Project/ProjectEntityHandler':@projectEntityHandler
|
|
"request":
|
|
get:@stubGet
|
|
del: @stubDel
|
|
'logger-sharelatex':
|
|
log:->
|
|
err:->
|
|
|
|
|
|
it 'should be able to get userStatus', (done)->
|
|
body = JSON.stringify({registered:true})
|
|
opts =
|
|
url: "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/dropbox/status"
|
|
timeout: 5000
|
|
@stubGet.withArgs(opts).callsArgWith(1, null, {statusCode:200}, body)
|
|
@handler.getUserRegistrationStatus user_id, (err, status)->
|
|
status.registered.should.equal true
|
|
done()
|
|
|
|
it 'should be able to get auth url with callback url on it', (done)->
|
|
url = "http://www.dropbox.com"
|
|
body = JSON.stringify({authorize_url:url})
|
|
opts =
|
|
url: "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/dropbox/register"
|
|
timeout: 5000
|
|
@stubGet.withArgs(opts).callsArgWith(1, null, {statusCode:200}, body)
|
|
@handler.getDropboxRegisterUrl user_id, (err, returnedUrl)->
|
|
returnedUrl.should.equal "#{url}&oauth_callback=#{siteUrl}/dropbox/completeRegistration"
|
|
done()
|
|
|
|
it 'should be able to complete registration and get getAccessToken from dropbox', (done)->
|
|
body = JSON.stringify({success:true})
|
|
opts =
|
|
url: "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/dropbox/getaccesstoken"
|
|
timeout: 5000
|
|
@stubGet.withArgs(opts).callsArgWith(1, null, {statusCode:200}, body)
|
|
@handler.flushUsersProjectToDropbox = sinon.stub()
|
|
@handler.completeRegistration user_id, (err, successful)=>
|
|
@handler.flushUsersProjectToDropbox.called.should.equal true
|
|
successful.should.equal true
|
|
done()
|
|
|
|
it 'should tell the tpds to unlink the account', (done)->
|
|
opts =
|
|
url: "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/dropbox"
|
|
timeout: 5000
|
|
@stubDel.callsArgWith(1, null, {statusCode:200})
|
|
@handler.unlinkAccount user_id, (err)=>
|
|
@stubDel.calledWith(opts).should.equal true
|
|
done()
|
|
|
|
it 'should tell the project entity handler to flush project to tpds', (done)->
|
|
user_id = "123u9oijllkj"
|
|
projectList = [{_id:"123lk"}, {_id:"12ji3ojio"}, {_id:"2jiojdoi"}]
|
|
collabProjectList = [{_id:"213ds"}]
|
|
@projectModel.findAllUsersProjects.callsArgWith(2, null, projectList, collabProjectList)
|
|
@handler.flushUsersProjectToDropbox user_id, =>
|
|
@projectEntityHandler.flushProjectToThirdPartyDataStore.calledWith(projectList[0]._id).should.equal true
|
|
@projectEntityHandler.flushProjectToThirdPartyDataStore.calledWith(projectList[1]._id).should.equal true
|
|
@projectEntityHandler.flushProjectToThirdPartyDataStore.calledWith(projectList[2]._id).should.equal true
|
|
@projectEntityHandler.flushProjectToThirdPartyDataStore.calledWith(collabProjectList[0]._id).should.equal true
|
|
done()
|
|
|