mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-11 18:32:20 +08:00
4593d0a9b1
Summary: This diff also adds an account version number to the config so that the AccountStore can tell whether it should reload accounts (depending on whether it was the instance making tthe changes.) This diff also fixes a tiny issue where un-opened composers threw an exception if you changed accounts. Test Plan: New tests Reviewers: evan, drew, juan Reviewed By: juan Subscribers: juan Differential Revision: https://phab.nylas.com/D2726
124 lines
4.8 KiB
CoffeeScript
124 lines
4.8 KiB
CoffeeScript
_ = require 'underscore'
|
|
keytar = require 'keytar'
|
|
AccountStore = require '../../src/flux/stores/account-store'
|
|
Account = require '../../src/flux/models/account'
|
|
Actions = require '../../src/flux/actions'
|
|
|
|
describe "AccountStore", ->
|
|
beforeEach ->
|
|
@instance = null
|
|
@constructor = AccountStore.constructor
|
|
@keys = {}
|
|
spyOn(keytar, 'getPassword').andCallFake (service, account) =>
|
|
@keys[account]
|
|
spyOn(keytar, 'deletePassword').andCallFake (service, account) =>
|
|
delete @keys[account]
|
|
spyOn(keytar, 'replacePassword').andCallFake (service, account, pass) =>
|
|
@keys[account] = pass
|
|
|
|
afterEach ->
|
|
@instance.stopListeningToAll()
|
|
|
|
describe "initialization", ->
|
|
beforeEach ->
|
|
@configTokens = null
|
|
@configVersion = 1
|
|
@configAccounts =
|
|
[{
|
|
"id": "A",
|
|
"client_id" : 'local-4f9d476a-c173',
|
|
"server_id" : 'A',
|
|
"email_address":"bengotow@gmail.com",
|
|
"object":"account"
|
|
"organization_unit": "label"
|
|
},{
|
|
"id": "B",
|
|
"client_id" : 'local-4f9d476a-c175',
|
|
"server_id" : 'B',
|
|
"email_address":"ben@nylas.com",
|
|
"object":"account"
|
|
"organization_unit": "label"
|
|
}]
|
|
|
|
spyOn(NylasEnv.config, 'set')
|
|
spyOn(NylasEnv.config, 'get').andCallFake (key) =>
|
|
return @configAccounts if key is 'nylas.accounts'
|
|
return @configVersion if key is 'nylas.accountsVersion'
|
|
return @configTokens if key is 'nylas.accountTokens'
|
|
return null
|
|
|
|
it "should initialize the accounts and version from config", ->
|
|
@instance = new @constructor
|
|
expect(@instance._version).toEqual(@configVersion)
|
|
expect(@instance.accounts()).toEqual([
|
|
(new Account).fromJSON(@configAccounts[0]),
|
|
(new Account).fromJSON(@configAccounts[1])
|
|
])
|
|
|
|
it "should initialize tokens from config, if present, save them to keytar, and remove them from config", ->
|
|
@configTokens = {'A': 'A-TOKEN'}
|
|
@instance = new @constructor
|
|
expect(@instance.tokenForAccountId('A')).toEqual('A-TOKEN')
|
|
expect(@instance.tokenForAccountId('B')).toEqual(undefined)
|
|
expect(keytar.replacePassword).toHaveBeenCalledWith('Nylas', 'bengotow@gmail.com', 'A-TOKEN')
|
|
expect(NylasEnv.config.set).toHaveBeenCalledWith('nylas.accountTokens', null)
|
|
|
|
it "should initialize tokens from keytar", ->
|
|
@configTokens = null
|
|
jasmine.unspy(keytar, 'getPassword')
|
|
spyOn(keytar, 'getPassword').andCallFake (service, account) =>
|
|
return 'A-TOKEN' if account is 'bengotow@gmail.com'
|
|
return 'B-TOKEN' if account is 'ben@nylas.com'
|
|
return null
|
|
@instance = new @constructor
|
|
expect(@instance.tokenForAccountId('A')).toEqual('A-TOKEN')
|
|
expect(@instance.tokenForAccountId('B')).toEqual('B-TOKEN')
|
|
|
|
describe "accountForEmail", ->
|
|
beforeEach ->
|
|
@instance = new @constructor
|
|
@ac1 = new Account emailAddress: 'juan@nylas.com', aliases: []
|
|
@ac2 = new Account emailAddress: 'juan@gmail.com', aliases: ['Juan <juanchis@gmail.com>']
|
|
@ac3 = new Account emailAddress: 'jackie@columbia.edu', aliases: ['Jackie Luo <jacqueline.luo@columbia.edu>']
|
|
@instance._accounts = [@ac1, @ac2, @ac3]
|
|
|
|
it 'returns correct account when no alises present', ->
|
|
expect(@instance.accountForEmail('juan@nylas.com')).toEqual @ac1
|
|
|
|
it 'returns correct account when alias is used', ->
|
|
expect(@instance.accountForEmail('juanchis@gmail.com')).toEqual @ac2
|
|
expect(@instance.accountForEmail('jacqueline.luo@columbia.edu')).toEqual @ac3
|
|
|
|
describe "adding account from json", ->
|
|
beforeEach ->
|
|
spyOn(NylasEnv.config, "set")
|
|
@json =
|
|
"id": "B",
|
|
"client_id" : 'local-4f9d476a-c175',
|
|
"server_id" : 'B',
|
|
"email_address":"ben@nylas.com",
|
|
"provider":"gmail",
|
|
"object":"account"
|
|
"auth_token": "B-NEW-TOKEN"
|
|
"organization_unit": "label"
|
|
@instance = new @constructor
|
|
spyOn(Actions, 'focusDefaultMailboxPerspectiveForAccounts')
|
|
spyOn(@instance, "trigger")
|
|
@instance.addAccountFromJSON(@json)
|
|
|
|
it "saves the token to keytar and to the loaded tokens cache", ->
|
|
expect(@instance._tokens["B"]).toBe("B-NEW-TOKEN")
|
|
expect(keytar.replacePassword).toHaveBeenCalledWith("Nylas", "ben@nylas.com", "B-NEW-TOKEN")
|
|
|
|
it "saves the account to the accounts cache and saves", ->
|
|
account = (new Account).fromJSON(@json)
|
|
expect(@instance._accounts.length).toBe 1
|
|
expect(@instance._accounts[0]).toEqual account
|
|
expect(NylasEnv.config.save).toHaveBeenCalled()
|
|
expect(NylasEnv.config.set.calls.length).toBe 2
|
|
|
|
it "selects the account", ->
|
|
expect(Actions.focusDefaultMailboxPerspectiveForAccounts).toHaveBeenCalledWith(["B"])
|
|
|
|
it "triggers", ->
|
|
expect(@instance.trigger).toHaveBeenCalled()
|