ContactRepositoryTest.swift 50 lignes · 1941 octets
import XCTest
@testable import Card2vcf

/// Port of the android `ContactRepositoryTest` additions: `updateFromCard`
/// must not wipe the sync fields the draft does not carry.
final class ContactRepositoryTest: XCTestCase {
    private var dao: InMemoryCrmContactDao!
    private var repo: ContactRepository!

    override func setUp() {
        super.setUp()
        dao = InMemoryCrmContactDao()
        repo = ContactRepository(dao: dao)
    }

    func testUpdateFromCardPreservesSyncFields() async throws {
        let id = try await repo.insertFromCard(ContactCard(fullName: "Ada", company: "Acme"))
        var stored = try await dao.getById(id)!
        stored.serverId = "srv-1"
        stored.entrepriseServerId = "ent-42"
        stored.statut = "client"
        stored.etape = "gagne"
        stored.tags = ["vip"]
        try await dao.update(stored)

        try await repo.updateFromCard(id: id, card: ContactCard(fullName: "Ada Lovelace", company: "Acme"))

        let updated = try await dao.getById(id)!
        XCTAssertEqual("Ada Lovelace", updated.fullName)
        XCTAssertEqual("srv-1", updated.serverId)
        XCTAssertEqual("ent-42", updated.entrepriseServerId)
        XCTAssertEqual("client", updated.statut)
        XCTAssertEqual("gagne", updated.etape)
        XCTAssertEqual(["vip"], updated.tags)
    }

    func testUpdateFromCardResetsEntrepriseLinkWhenCompanyChanges() async throws {
        let id = try await repo.insertFromCard(ContactCard(fullName: "Ada", company: "Acme"))
        var stored = try await dao.getById(id)!
        stored.serverId = "srv-1"
        stored.entrepriseServerId = "ent-42"
        try await dao.update(stored)

        try await repo.updateFromCard(id: id, card: ContactCard(fullName: "Ada", company: "Globex"))

        let updated = try await dao.getById(id)!
        XCTAssertEqual("srv-1", updated.serverId)
        XCTAssertNil(updated.entrepriseServerId)
    }
}