Mailspring/spec-nylas/stores/contact-store-spec.coffee
Evan Morikawa 93ea9c6165 fix(*): can select participant with space if it's an email
Summary:
Fixes T2272

If the label is too long, the unread icons will now ellipsis truncate the
text correctly instead of being pushed off of the side.

I made the max-width of the sidebar 17px wider to allow for Karim's french
"Inbox" translation.

Fixes T2266

Added some more protection to places where filenames could be blank when
downloading.

This was partially fixed by Rob's D1685

Fixes T2258

You can now finish selecting a participant by pressing `space`, but only
when the participant looks like an email address.

When you do this we directly add the email address to the chip instead of
looking up a contact. This allows you to send just to the email instead of
adding a potentially erroneous name into the input field

Test Plan: edgehill --test

Reviewers: bengotow

Reviewed By: bengotow

Maniphest Tasks: T2272, T2266, T2258

Differential Revision: https://phab.nylas.com/D1729
2015-07-13 10:25:30 -04:00

109 lines
4.2 KiB
CoffeeScript

_ = require 'underscore'
proxyquire = require 'proxyquire'
Contact = require '../../src/flux/models/contact'
ContactStore = require '../../src/flux/stores/contact-store'
DatabaseStore = require '../../src/flux/stores/database-store'
NamespaceStore = require '../../src/flux/stores/namespace-store'
describe "ContactStore", ->
beforeEach ->
ContactStore._contactCache = []
ContactStore._fetchOffset = 0
ContactStore._namespaceId = null
ContactStore._lastNamespaceId = null
NamespaceStore._current =
id: "nsid"
it "initializes the cache from the DB", ->
spyOn(DatabaseStore, "findAll").andCallFake -> Promise.resolve([])
ContactStore.constructor()
expect(ContactStore._contactCache.length).toBe 0
expect(ContactStore._fetchOffset).toBe 0
describe "when the Namespace updates from null to valid", ->
beforeEach ->
spyOn(ContactStore, "_refreshCache")
NamespaceStore.trigger()
it "triggers a database fetch", ->
expect(ContactStore._refreshCache.calls.length).toBe 1
describe "when the Namespace updates but the ID doesn't change", ->
it "does nothing", ->
spyOn(ContactStore, "_refreshCache")
ContactStore._contactCache = [1,2,3]
ContactStore._fetchOffset = 3
ContactStore._namespaceId = "nsid"
ContactStore._lastNamespaceId = "nsid"
NamespaceStore._current =
id: "nsid"
NamespaceStore.trigger()
expect(ContactStore._contactCache).toEqual [1,2,3]
expect(ContactStore._fetchOffset).toBe 3
expect(ContactStore._refreshCache).not.toHaveBeenCalled()
describe "when searching for a contact", ->
beforeEach ->
@c1 = new Contact(name: "", email: "1test@nylas.com")
@c2 = new Contact(name: "First", email: "2test@nylas.com")
@c3 = new Contact(name: "First Last", email: "3test@nylas.com")
@c4 = new Contact(name: "Fit", email: "fit@nylas.com")
@c5 = new Contact(name: "Fins", email: "fins@nylas.com")
@c6 = new Contact(name: "Fill", email: "fill@nylas.com")
@c7 = new Contact(name: "Fin", email: "fin@nylas.com")
ContactStore._contactCache = [@c1,@c2,@c3,@c4,@c5,@c6,@c7]
it "can find by first name", ->
results = ContactStore.searchContacts("First")
expect(results.length).toBe 2
expect(results[0]).toBe @c2
expect(results[1]).toBe @c3
it "can find by last name", ->
results = ContactStore.searchContacts("Last")
expect(results.length).toBe 1
expect(results[0]).toBe @c3
it "can find by email", ->
results = ContactStore.searchContacts("1test")
expect(results.length).toBe 1
expect(results[0]).toBe @c1
it "is case insensitive", ->
results = ContactStore.searchContacts("FIrsT")
expect(results.length).toBe 2
expect(results[0]).toBe @c2
expect(results[1]).toBe @c3
it "only returns the number requested", ->
results = ContactStore.searchContacts("FIrsT", limit: 1)
expect(results.length).toBe 1
expect(results[0]).toBe @c2
it "returns no more than 5 by default", ->
results = ContactStore.searchContacts("fi")
expect(results.length).toBe 5
it "can return more than 5 if requested", ->
results = ContactStore.searchContacts("fi", limit: 6)
expect(results.length).toBe 6
describe 'parseContactsInString', ->
testCases =
"evan@nylas.com": [new Contact(name: "evan@nylas.com", email: "evan@nylas.com")]
"Evan Morikawa": []
"Evan Morikawa <evan@nylas.com>": [new Contact(name: "Evan Morikawa", email: "evan@nylas.com")]
"Evan Morikawa (evan@nylas.com)": [new Contact(name: "Evan Morikawa", email: "evan@nylas.com")]
"Evan (evan@nylas.com)": [new Contact(name: "Evan", email: "evan@nylas.com")]
"Evan Morikawa <evan@nylas.com>, Ben <ben@nylas.com>": [
new Contact(name: "Evan Morikawa", email: "evan@nylas.com")
new Contact(name: "Ben", email: "ben@nylas.com")
]
_.forEach testCases, (value, key) ->
it "works for #{key}", ->
testContacts = ContactStore.parseContactsInString(key).map (c) -> c.nameEmail()
expectedContacts = value.map (c) -> c.nameEmail()
expect(testContacts).toEqual expectedContacts