session-ios/Signal/test/contact/ContactsPickerTest.swift
2018-09-10 17:30:18 -05:00

84 lines
2.7 KiB
Swift

//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
import XCTest
import Contacts
@testable import Signal
final class ContactsPickerTest: SignalBaseTest {
private var prevLang: Any?
override func setUp() {
super.setUp()
prevLang = getLang()
}
override func tearDown() {
super.tearDown()
if let prevLang = prevLang {
setLang(value: prevLang)
}
}
func testContactSectionMatchesEmailFirstLetterWhenOnlyEmailContact() {
setLangEN()
let emailOnlyContactB = CNMutableContact()
emailOnlyContactB.emailAddresses.append(CNLabeledValue(label: nil, value: "bla@bla.com"))
let emailOnlyContactD = CNMutableContact()
emailOnlyContactD.emailAddresses.append(CNLabeledValue(label: nil, value: "dude@bla.com"))
let contactsPicker = ContactsPicker(allowsMultipleSelection: false, subtitleCellType: .phoneNumber)
let collatedContacts = contactsPicker.collatedContacts([emailOnlyContactB, emailOnlyContactD])
let sectionTitles = contactsPicker.collationForTests.sectionTitles
if let bIndex = sectionTitles.index(of: "B") {
let bSectionContacts = collatedContacts[bIndex]
XCTAssertEqual(bSectionContacts.first, emailOnlyContactB)
}
if let dIndex = sectionTitles.index(of: "D") {
let dSectionContacts = collatedContacts[dIndex]
XCTAssertEqual(dSectionContacts.first, emailOnlyContactD)
}
}
func testContactSectionMatchesNameFirstLetterWhenNameExistsInContact() {
setLangEN()
let nameAndEmailContact = CNMutableContact()
nameAndEmailContact.givenName = "Alice"
nameAndEmailContact.emailAddresses.append(CNLabeledValue(label: nil, value: "nameAndEmail@bla.com"))
let contactsPicker = ContactsPicker(allowsMultipleSelection: false, subtitleCellType: .phoneNumber)
let collatedContacts = contactsPicker.collatedContacts([nameAndEmailContact])
let sectionTitles = contactsPicker.collationForTests.sectionTitles
if let aIndex = sectionTitles.index(of: "A") {
let aSectionContacts = collatedContacts[aIndex]
XCTAssertEqual(aSectionContacts.first, nameAndEmailContact)
}
}
private func setLangEN() {
setLang(value: "en")
}
private func setLang(value: Any) {
UserDefaults.standard.set(value, forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
}
private func setLang(value: String) {
setLang(value: [value])
}
private func getLang() -> Any? {
return UserDefaults.standard.value(forKey: "AppleLanguages")
}
}