LwwMergerTest.swift 82 lignes · 2722 octets
import XCTest
@testable import Card2vcf

final class LwwMergerTest: XCTestCase {
    func testPickLww_remoteNewerWins() {
        let result = LwwMerger.pickLww(
            local: "local-value",
            localTs: 100,
            remote: "remote-value",
            remoteTs: 200
        )
        XCTAssertEqual("remote-value", result)
    }

    func testPickLww_localNewerWins() {
        let result = LwwMerger.pickLww(
            local: "local-value",
            localTs: 300,
            remote: "remote-value",
            remoteTs: 200
        )
        XCTAssertEqual("local-value", result)
    }

    func testPickLww_equalTimestampsRemoteWins() {
        let result = LwwMerger.pickLww(
            local: "local-value",
            localTs: 100,
            remote: "remote-value",
            remoteTs: 100
        )
        XCTAssertEqual("remote-value", result)
    }

    func testPickTaskMove_remoteNewerWins() {
        let local = LwwMerger.TaskPlacement(colonneId: "todo", ordre: 1, updatedAt: 100)
        let remote = LwwMerger.TaskPlacement(colonneId: "done", ordre: 2, updatedAt: 200)

        let result = LwwMerger.pickTaskMove(local: local, remote: remote)

        XCTAssertEqual(remote, result)
    }

    func testPickTaskMove_localNewerWins() {
        let local = LwwMerger.TaskPlacement(colonneId: "todo", ordre: 1, updatedAt: 300)
        let remote = LwwMerger.TaskPlacement(colonneId: "done", ordre: 2, updatedAt: 200)

        let result = LwwMerger.pickTaskMove(local: local, remote: remote)

        XCTAssertEqual(local, result)
    }

    func testPickTaskMove_equalTimestampsRemoteWins() {
        let local = LwwMerger.TaskPlacement(colonneId: "todo", ordre: 1, updatedAt: 100)
        let remote = LwwMerger.TaskPlacement(colonneId: "done", ordre: 2, updatedAt: 100)

        let result = LwwMerger.pickTaskMove(local: local, remote: remote)

        XCTAssertEqual(remote, result)
    }

    func testShouldInsertInteraction_whenUnknownServerId() {
        let existing: Set<String> = ["srv-1", "srv-2"]

        XCTAssertTrue(LwwMerger.shouldInsertInteraction(existingServerIds: existing, remoteServerId: "srv-3"))
    }

    func testShouldInsertInteraction_whenKnownServerId() {
        let existing: Set<String> = ["srv-1", "srv-2"]

        XCTAssertFalse(LwwMerger.shouldInsertInteraction(existingServerIds: existing, remoteServerId: "srv-1"))
    }

    func testApplyTombstoneIds_removesMatchingIds() {
        let local: Set<String> = ["a", "b", "c"]
        let tombstones: Set<String> = ["b", "d"]

        let remaining = LwwMerger.applyTombstoneIds(localServerIds: local, tombstoneIds: tombstones)

        XCTAssertEqual(Set(["a", "c"]), remaining)
    }
}