ContactMergeTest.swift
134 lignes · 4276 octets
import XCTest @testable import Card2vcf final class ContactMergeTest: XCTestCase { private func contact( _ id: Int64, fullName: String? = nil, firstName: String? = nil, lastName: String? = nil, company: String? = nil, jobTitle: String? = nil, website: String? = nil, address: String? = nil, notes: String? = nil, phones: [String] = [], emails: [String] = [] ) -> CrmContactEntity { CrmContactEntity( id: id, fullName: fullName, firstName: firstName, lastName: lastName, company: company, jobTitle: jobTitle, phones: phones, emails: emails, website: website, address: address, notes: notes, createdAt: id, updatedAt: id, phonesText: phones.joined(separator: " "), emailsText: emails.joined(separator: " ") ) } private func choices( keepId: Int64, notesMode: NotesMode = .keepPrimary, fullNameFromId: Int64? = nil, firstNameFromId: Int64? = nil, lastNameFromId: Int64? = nil, companyFromId: Int64? = nil, jobTitleFromId: Int64? = nil, websiteFromId: Int64? = nil, addressFromId: Int64? = nil ) -> MergeFieldChoices { MergeFieldChoices( fullNameFromId: fullNameFromId ?? keepId, firstNameFromId: firstNameFromId ?? keepId, lastNameFromId: lastNameFromId ?? keepId, companyFromId: companyFromId ?? keepId, jobTitleFromId: jobTitleFromId ?? keepId, websiteFromId: websiteFromId ?? keepId, addressFromId: addressFromId ?? keepId, notesMode: notesMode, cardImageFromId: nil, profileImageFromId: nil, keepId: keepId ) } func testPicksScalarsAndUnionsLists() { let a = contact( 1, fullName: "A", firstName: "Ada", company: "CoA", notes: "note A", phones: ["111"], emails: ["a@ex.com"] ) let b = contact( 2, fullName: "B", lastName: "Lovelace", jobTitle: "Eng", website: "https://b", address: "Paris", notes: "note B", phones: ["111", "222"], emails: ["b@ex.com"] ) let merged = ContactMerge.merge( sources: [a, b], choices: choices( keepId: 1, fullNameFromId: 2, lastNameFromId: 2, jobTitleFromId: 2, websiteFromId: 2, addressFromId: 2 ), now: 99 ) XCTAssertEqual(1, merged.id) XCTAssertEqual("B", merged.fullName) XCTAssertEqual("Ada", merged.firstName) XCTAssertEqual("Lovelace", merged.lastName) XCTAssertEqual("CoA", merged.company) XCTAssertEqual("Eng", merged.jobTitle) XCTAssertEqual("https://b", merged.website) XCTAssertEqual("Paris", merged.address) XCTAssertEqual("note A", merged.notes) XCTAssertEqual(["111", "222"], merged.phones) XCTAssertEqual(["a@ex.com", "b@ex.com"], merged.emails) XCTAssertEqual("111 222", merged.phonesText) XCTAssertEqual("a@ex.com b@ex.com", merged.emailsText) XCTAssertEqual(99, merged.updatedAt) XCTAssertEqual(1, merged.createdAt) } func testConcatNotes() { let a = contact(1, notes: "alpha") let b = contact(2, notes: "beta") let merged = ContactMerge.merge( sources: [a, b], choices: choices(keepId: 1, notesMode: .concat), now: 1 ) XCTAssertEqual("alpha\n---\nbeta", merged.notes) } func testConcatNotesBlankBecomesNull() { let a = contact(1, notes: " ") let b = contact(2, notes: nil) let merged = ContactMerge.merge( sources: [a, b], choices: choices(keepId: 1, notesMode: .concat), now: 1 ) XCTAssertNil(merged.notes) } }
GitRust