CalendarServerIdCodecTest.swift 87 lignes · 3300 octets
import XCTest
@testable import Card2vcf

final class CalendarServerIdCodecTest: XCTestCase {
    func testEncodeWithServerIdPrependsPrefixLine() {
        let encoded = CalendarServerIdCodec.encode(serverId: "abc-123", descriptionBody: "RDV client")

        XCTAssertEqual("card2vcf:serverId=abc-123\nRDV client", encoded)
    }

    func testEncodeWithNilServerIdReturnsBodyUnchanged() {
        let encoded = CalendarServerIdCodec.encode(serverId: nil, descriptionBody: "RDV client")

        XCTAssertEqual("RDV client", encoded)
    }

    func testEncodeWithEmptyBodyKeepsTrailingNewline() {
        let encoded = CalendarServerIdCodec.encode(serverId: "abc-123", descriptionBody: "")

        XCTAssertEqual("card2vcf:serverId=abc-123\n", encoded)
    }

    func testDecodeExtractsServerIdAndBody() {
        let (serverId, body) = CalendarServerIdCodec.decode("card2vcf:serverId=abc-123\nRDV client")

        XCTAssertEqual("abc-123", serverId)
        XCTAssertEqual("RDV client", body)
    }

    func testDecodeWithoutPrefixReturnsNilServerIdAndFullDescription() {
        let (serverId, body) = CalendarServerIdCodec.decode("Simple description sans serverId")

        XCTAssertNil(serverId)
        XCTAssertEqual("Simple description sans serverId", body)
    }

    func testDecodeNilDescriptionReturnsNilAndEmptyBody() {
        let (serverId, body) = CalendarServerIdCodec.decode(nil)

        XCTAssertNil(serverId)
        XCTAssertEqual("", body)
    }

    func testDecodeWithPrefixButNoNewlineTreatsRestAsServerId() {
        let (serverId, body) = CalendarServerIdCodec.decode("card2vcf:serverId=abc-123")

        XCTAssertEqual("abc-123", serverId)
        XCTAssertEqual("", body)
    }

    func testDecodeWithMultilineBodyPreservesInternalNewlines() {
        let (serverId, body) = CalendarServerIdCodec.decode("card2vcf:serverId=abc-123\nligne1\nligne2")

        XCTAssertEqual("abc-123", serverId)
        XCTAssertEqual("ligne1\nligne2", body)
    }

    func testRoundTripEncodeThenDecodePreservesServerIdAndBody() {
        let encoded = CalendarServerIdCodec.encode(serverId: "srv-42", descriptionBody: "Détails\nsur plusieurs lignes")
        let (serverId, body) = CalendarServerIdCodec.decode(encoded)

        XCTAssertEqual("srv-42", serverId)
        XCTAssertEqual("Détails\nsur plusieurs lignes", body)
    }

    func testRoundTripWithoutServerIdPreservesBody() {
        let encoded = CalendarServerIdCodec.encode(serverId: nil, descriptionBody: "Sans serverId")
        let (serverId, body) = CalendarServerIdCodec.decode(encoded)

        XCTAssertNil(serverId)
        XCTAssertEqual("Sans serverId", body)
    }

    func testIndispoTitleAddsPrefix() {
        XCTAssertEqual("[Indispo] Salle A fermée", CalendarEventTitles.indispoTitle("Salle A fermée"))
    }

    func testIsIndispoTitleDetectsPrefix() {
        XCTAssertTrue(CalendarEventTitles.isIndispoTitle("[Indispo] Salle A fermée"))
        XCTAssertFalse(CalendarEventTitles.isIndispoTitle("RDV client"))
    }

    func testStripIndispoPrefixRemovesPrefixWhenPresent() {
        XCTAssertEqual("Salle A fermée", CalendarEventTitles.stripIndispoPrefix("[Indispo] Salle A fermée"))
        XCTAssertEqual("RDV client", CalendarEventTitles.stripIndispoPrefix("RDV client"))
    }
}