| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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()
|