DuplicateDetectorTest.swift
42 lignes · 1764 octets
import XCTest @testable import Card2vcf final class DuplicateDetectorTest: XCTestCase { private func contact( _ id: Int64, emails: [String] = [], phones: [String] = [] ) -> CrmContactEntity { CrmContactEntity(id: id, phones: phones, emails: emails) } func testSameEmailSameCluster() { let a = contact(1, emails: ["Ada@Example.COM"]) let b = contact(2, emails: [" ada@example.com "]) let c = contact(3, emails: ["other@ex.com"]) let clusters = DuplicateDetector.clusters(contacts: [a, b, c], exclusions: []) XCTAssertEqual(Set([1, 2]), clusters[1]) XCTAssertEqual(Set([1, 2]), clusters[2]) XCTAssertEqual(Set([3]), clusters[3]) XCTAssertEqual(1, DuplicateDetector.duplicateCount(1, clusters: clusters)) XCTAssertEqual(0, DuplicateDetector.duplicateCount(3, clusters: clusters)) } func testExclusionSeparatesCluster() { let a = contact(1, emails: ["same@ex.com"]) let b = contact(2, emails: ["same@ex.com"]) let exclusions = [DuplicateExclusionEntity(idA: 1, idB: 2)] let clusters = DuplicateDetector.clusters(contacts: [a, b], exclusions: exclusions) XCTAssertEqual(Set([1]), clusters[1]) XCTAssertEqual(Set([2]), clusters[2]) XCTAssertEqual(0, DuplicateDetector.duplicateCount(1, clusters: clusters)) } func testNormalizedPhoneMatch() { let a = contact(10, phones: ["+33 6 12-34"]) let b = contact(20, phones: ["3361234"]) let clusters = DuplicateDetector.clusters(contacts: [a, b], exclusions: []) XCTAssertEqual(Set([10, 20]), clusters[10]) XCTAssertTrue(DuplicateDetector.duplicateCount(10, clusters: clusters) == 1) } }
GitRust