mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-12 04:25:31 +08:00
93ea9c6165
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
108 lines
4.2 KiB
CoffeeScript
108 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
|
|
|