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) } }
GitRust