CouleurEtiquetteTest.swift 42 lignes · 1684 octets
import XCTest
@testable import Card2vcf

/// Port du hachage d'étiquette de `Server/src/modeles.rs`, miroir de
/// `CouleurEtiquetteTest.kt`. Le FNV-1a y a été écrit explicitement pour être
/// reproductible : une même étiquette doit donner la même teinte sur le web,
/// sur Android et sur iOS.
final class CouleurEtiquetteTest: XCTestCase {
    func testMemeEtiquetteMemeTeinte() {
        let a = CouleurEtiquette.pour("câblage")
        XCTAssertEqual(a, CouleurEtiquette.pour("câblage"))
        XCTAssertTrue(CouleurEtiquette.palette.contains(a ?? ""))
    }

    func testSansEtiquettePasDeTeinte() {
        XCTAssertNil(CouleurEtiquette.pour(nil))
        XCTAssertNil(CouleurEtiquette.pour("  "))
    }

    /// Valeurs figées, à comparer avec les tests Rust et Kotlin homologues.
    func testTeintesDeReference() {
        XCTAssertEqual("#8B5CF6", CouleurEtiquette.pour("câblage"))
        XCTAssertEqual("#3FB985", CouleurEtiquette.pour("étude"))
        XCTAssertEqual("#0EA5E9", CouleurEtiquette.pour("chantier"))
    }

    func testLEspaceAutourNeChangePasLaTeinte() {
        XCTAssertEqual(CouleurEtiquette.pour("câblage"), CouleurEtiquette.pour("  câblage  "))
    }

    func testLaPaletteEstReellementRepartie() {
        let libelles = [
            "câblage", "étude", "chantier", "livraison", "essais", "montage",
            "devis", "recette", "soudure", "peinture", "controle", "reprise",
        ]
        let distinctes = Set(libelles.compactMap { CouleurEtiquette.pour($0) })
        XCTAssertGreaterThanOrEqual(
            distinctes.count, 5,
            "12 libellés ne donnent que \(distinctes.count) teintes"
        )
    }
}