NoteProjetDtoTest.swift 86 lignes · 2994 octets
import XCTest
@testable import Card2vcf

final class NoteProjetDtoTest: XCTestCase {

    func testDecodeComplete() throws {
        let json = """
        {
            "id": "n1",
            "projet_id": "p1",
            "titre": "R\u{e9}union",
            "contenu": "## Points cl\u{e9}s\\n- Point A",
            "auteur": "alice",
            "cree_le": "2026-09-10T08:00:00Z",
            "maj_le": "2026-09-11T10:00:00Z",
            "audio": "note.wav",
            "transcription": "terminee",
            "transcription_erreur": null
        }
        """
        let dto = try SyncJson.decode(NoteProjetDto.self, from: json)
        XCTAssertEqual("n1", dto.id)
        XCTAssertEqual("p1", dto.projetId)
        XCTAssertEqual("R\u{e9}union", dto.titre)
        XCTAssertEqual("## Points cl\u{e9}s\n- Point A", dto.contenu)
        XCTAssertEqual("alice", dto.auteur)
        XCTAssertEqual("2026-09-10T08:00:00Z", dto.creeLe)
        XCTAssertEqual("2026-09-11T10:00:00Z", dto.majLe)
        XCTAssertEqual("note.wav", dto.audio)
        XCTAssertEqual("terminee", dto.transcription)
        XCTAssertNil(dto.transcriptionErreur)
    }

    /// Old server: only the 5 required fields — decoding must succeed with safe defaults.
    func testDecodeMinimalChampsSuffisent() throws {
        let json = """
        {
            "id": "n2",
            "projet_id": "p2",
            "titre": "Appel",
            "contenu": "Discussion initiale",
            "cree_le": "2026-09-12T09:00:00Z"
        }
        """
        let dto = try SyncJson.decode(NoteProjetDto.self, from: json)
        XCTAssertEqual("n2", dto.id)
        XCTAssertEqual("p2", dto.projetId)
        XCTAssertEqual("Appel", dto.titre)
        XCTAssertEqual("Discussion initiale", dto.contenu)
        XCTAssertEqual("", dto.auteur)
        XCTAssertNil(dto.majLe)
        XCTAssertNil(dto.audio)
        XCTAssertNil(dto.transcription)
        XCTAssertNil(dto.transcriptionErreur)
    }

    /// Old server — no "notes" key in pull response — must decode without error, notes == [].
    func testDecodePullResponseSansNotes() throws {
        let json = """
        { "server_time": "2026-09-12T09:00:00Z" }
        """
        let pull = try SyncJson.decode(SyncPullResponse.self, from: json)
        XCTAssertEqual([], pull.notes)
    }

    func testDecodePullResponseAvecNotes() throws {
        let json = """
        {
            "server_time": "2026-09-12T09:00:00Z",
            "notes": [
                {
                    "id": "n1",
                    "projet_id": "p1",
                    "titre": "Note",
                    "contenu": "Texte",
                    "cree_le": "2026-09-12T09:00:00Z"
                }
            ]
        }
        """
        let pull = try SyncJson.decode(SyncPullResponse.self, from: json)
        XCTAssertEqual(1, pull.notes.count)
        XCTAssertEqual("n1", pull.notes[0].id)
        XCTAssertEqual("p1", pull.notes[0].projetId)
    }
}