nebulab-dropbox
Version:
Client library for the Dropbox API
304 lines (265 loc) • 12.8 kB
text/coffeescript
describe 'Dropbox.AuthDriver.BrowserBase', ->
beforeEach ->
= module? and module?.exports? and require?
= chrome?.runtime?.id
= new Dropbox.Client testKeys
describe 'with rememberUser: false', ->
beforeEach (done) ->
return done() if or
= new Dropbox.AuthDriver.BrowserBase rememberUser: false
.setStorageKey
= new Dropbox.AuthDriver.BrowserBase(
rememberUser: false, scope: 'other')
.setStorageKey
.forgetCredentials =>
.forgetCredentials =>
done()
afterEach (done) ->
return done() if or
.forgetCredentials =>
.forgetCredentials ->
done()
describe '#loadCredentials', ->
it 'produces the credentials passed to storeCredentials', (done) ->
return done() if or
goldCredentials = .credentials()
.storeCredentials goldCredentials, =>
.loadCredentials (credentials) ->
expect(credentials).to.deep.equal goldCredentials
done()
it 'produces null after forgetCredentials was called', (done) ->
return done() if or
.storeCredentials .credentials(), =>
.forgetCredentials =>
.loadCredentials (credentials) ->
expect(credentials).to.equal null
done()
it 'produces null if a different scope is provided', (done) ->
return done() if or
goldCredentials = .credentials()
.storeCredentials goldCredentials, =>
.loadCredentials (credentials) =>
expect(credentials).to.equal null
.loadCredentials (credentials) =>
expect(credentials).to.deep.equal goldCredentials
done()
describe 'without localStorage support', ->
beforeEach (done) ->
return done() if or
= sinon.stub Dropbox.AuthDriver.BrowserBase, 'localStorage'
.returns {}
return done() if or
= new Dropbox.AuthDriver.BrowserBase rememberUser: false
.setStorageKey
= new Dropbox.AuthDriver.BrowserBase(
rememberUser: false, scope: 'other')
.setStorageKey
.forgetCredentials =>
.forgetCredentials ->
done()
afterEach (done) ->
return done() if or
.restore()
.forgetCredentials =>
.forgetCredentials ->
done()
describe '#loadCredentials', ->
it 'produces the credentials passed to storeCredentials', (done) ->
return done() if or
goldCredentials = .credentials()
.storeCredentials goldCredentials, =>
.loadCredentials (credentials) ->
expect(credentials).to.deep.equal goldCredentials
done()
it 'works in the presence of other cookies', (done) ->
return done() if or
goldCredentials = .credentials()
document.cookie = 'answer=42; path=/'
.storeCredentials goldCredentials, =>
document.cookie = 'zzz_answer=42; path=/'
.loadCredentials (credentials) ->
expect(credentials).to.deep.equal goldCredentials
done()
it 'produces null after forgetCredentials was called', (done) ->
return done() if or
.storeCredentials .credentials(), =>
.forgetCredentials =>
.loadCredentials (credentials) ->
expect(credentials).to.equal null
done()
it 'produces null if a different scope is provided', (done) ->
return done() if or
goldCredentials = .credentials()
.storeCredentials goldCredentials, =>
.loadCredentials (credentials) =>
expect(credentials).to.equal null
.loadCredentials (credentials) =>
expect(credentials).to.deep.equal goldCredentials
done()
describe '#storeCredentials', ->
it 'falls back to cookies', (done) ->
return done() if or
.storeCredentials .credentials(), =>
expect(document.cookie).to.contain 'dropbox-auth'
done()
describe 'Dropbox.AuthDriver.Redirect', ->
describe '#loadCredentials', ->
beforeEach ->
= module? and module.exports? and require?
= chrome? and (chrome.extension or chrome.app?.runtime)
return if or
= new Dropbox.Client testKeys
= new Dropbox.AuthDriver.Redirect scope: 'some_scope'
.setStorageKey
it 'produces the credentials passed to storeCredentials', (done) ->
return done() if or
goldCredentials = .credentials()
.storeCredentials goldCredentials, =>
= new Dropbox.AuthDriver.Redirect scope: 'some_scope'
.setStorageKey
.loadCredentials (credentials) ->
expect(credentials).to.deep.equal goldCredentials
done()
it 'produces null after forgetCredentials was called', (done) ->
return done() if or
.storeCredentials .credentials(), =>
.forgetCredentials =>
= new Dropbox.AuthDriver.Redirect scope: 'some_scope'
.setStorageKey
.loadCredentials (credentials) ->
expect(credentials).to.equal null
done()
it 'produces null if a different scope is provided', (done) ->
return done() if or
.setStorageKey
.storeCredentials .credentials(), =>
= new Dropbox.AuthDriver.Redirect scope: 'other_scope'
.setStorageKey
.loadCredentials (credentials) ->
expect(credentials).to.equal null
done()
describe 'integration', ->
beforeEach ->
= module? and module.exports? and require?
= chrome? and (chrome.extension or chrome.app?.runtime)
= cordova?
it 'should work', (done) ->
return done() if or or
45 * 1000 # Time-consuming because the user must click.
listenerCalled = false
listener = (event) ->
window.removeEventListener 'message', listener
Dropbox.AuthDriver.Popup.onMessage.removeListener listener
return if listenerCalled is true
listenerCalled = true
data = event.data or event
expect(data).to.match(/^\[.*\]$/)
[error, credentials] = JSON.parse data
expect(error).to.equal null
expect(credentials).to.have.property 'uid'
expect(credentials.uid).to.be.a 'string'
expect(credentials).to.have.property 'token'
expect(credentials.token).to.be.a 'string'
done()
window.addEventListener 'message', listener
Dropbox.AuthDriver.Popup.onMessage.addListener listener
(new Dropbox.AuthDriver.Popup()).openWindow(
'/test/html/redirect_driver_test.html')
it 'should be the default driver on browsers', ->
return if or or
client = new Dropbox.Client testKeys
Dropbox.AuthDriver.autoConfigure client
expect(client._driver).to.be.instanceOf Dropbox.AuthDriver.Redirect
describe 'Dropbox.AuthDriver.Popup', ->
describe '#loadCredentials', ->
beforeEach ->
= module? and module.exports? and require?
= chrome? and (chrome.extension or chrome.app?.runtime)
return if or
= new Dropbox.Client testKeys
= new Dropbox.AuthDriver.Popup scope: 'some_scope'
.setStorageKey
it 'produces the credentials passed to storeCredentials', (done) ->
return done() if or
goldCredentials = .credentials()
.storeCredentials goldCredentials, =>
= new Dropbox.AuthDriver.Popup scope: 'some_scope'
.setStorageKey
.loadCredentials (credentials) ->
expect(credentials).to.deep.equal goldCredentials
done()
it 'produces null after forgetCredentials was called', (done) ->
return done() if or
.storeCredentials .credentials(), =>
.forgetCredentials =>
= new Dropbox.AuthDriver.Popup scope: 'some_scope'
.setStorageKey
.loadCredentials (credentials) ->
expect(credentials).to.equal null
done()
it 'produces null if a different scope is provided', (done) ->
return done() if or
.setStorageKey
.storeCredentials .credentials(), =>
= new Dropbox.AuthDriver.Popup scope: 'other_scope'
.setStorageKey
.loadCredentials (credentials) ->
expect(credentials).to.equal null
done()
describe 'integration', ->
beforeEach ->
= module? and module.exports? and require?
= chrome? and (chrome.extension or chrome.app?.runtime)
= cordova?
it 'should work with rememberUser: false', (done) ->
return done() if or or
45 * 1000 # Time-consuming because the user must click.
client = new Dropbox.Client testKeys
client.reset()
authDriver = new Dropbox.AuthDriver.Popup(
receiverFile: 'oauth_receiver.html', scope: 'popup-integration',
rememberUser: false)
client.authDriver authDriver
client.authenticate (error, client) =>
expect(error).to.equal null
expect(client.authStep).to.equal Dropbox.Client.DONE
# Verify that we can do API calls.
client.getAccountInfo (error, accountInfo) ->
expect(error).to.equal null
expect(accountInfo).to.be.instanceOf Dropbox.AccountInfo
# Follow-up authenticate() should restart the process.
client.reset()
client.authenticate interactive: false, (error, client) ->
expect(error).to.equal null
expect(client.authStep).to.equal Dropbox.Client.RESET
expect(client.isAuthenticated()).to.equal false
done()
it 'should work with rememberUser: true', (done) ->
return done() if or or
45 * 1000 # Time-consuming because the user must click.
client = new Dropbox.Client testKeys
client.reset()
authDriver = new Dropbox.AuthDriver.Popup(
receiverFile: 'oauth_receiver.html', scope: 'popup-integration',
rememberUser: true)
client.authDriver authDriver
authDriver.setStorageKey client
authDriver.forgetCredentials ->
client.authenticate (error, client) ->
expect(error).to.equal null
expect(client.authStep).to.equal Dropbox.Client.DONE
# Verify that we can do API calls.
client.getAccountInfo (error, accountInfo) ->
expect(error).to.equal null
expect(accountInfo).to.be.instanceOf Dropbox.AccountInfo
# Follow-up authenticate() should use stored credentials.
client.reset()
client.authenticate interactive: false, (error, client) ->
expect(error).to.equal null
expect(client.authStep).to.equal Dropbox.Client.DONE
expect(client.isAuthenticated()).to.equal true
# Verify that we can do API calls.
client.getAccountInfo (error, accountInfo) ->
expect(error).to.equal null
expect(accountInfo).to.be.instanceOf Dropbox.AccountInfo
done()