ContactSyncMapperTest.swift
100 lignes · 3261 octets
import XCTest @testable import Card2vcf final class ContactSyncMapperTest: XCTestCase { private let mapper = ContactSyncMapper() func testMapsLocalFieldsToApiJson() throws { let entity = CrmContactEntity( id: 1, fullName: "Marie Dubois", firstName: "Marie", lastName: "Dubois", jobTitle: "Directrice", phones: ["+33 1 23 45 67 89"], emails: ["marie@acme.fr"], notes: "Rencontrée au salon", serverId: nil, statut: "client", etape: "qualifie", tags: ["vip", "lyon"], entrepriseServerId: "ent-42" ) let payload = mapper.toCreatePayload(entity) let request = try SyncJson.decode(CreateContactRequest.self, from: payload) XCTAssertEqual("Marie", request.prenom) XCTAssertEqual("Dubois", request.nom) XCTAssertEqual("ent-42", request.entrepriseId) XCTAssertEqual("Directrice", request.fonction) XCTAssertEqual("marie@acme.fr", request.emails.first?.valeur) XCTAssertEqual(1, request.emails.count) XCTAssertEqual("+33 1 23 45 67 89", request.telephones.first?.valeur) XCTAssertEqual(1, request.telephones.count) XCTAssertEqual("Rencontrée au salon", request.notes) XCTAssertEqual("client", request.statut) XCTAssertEqual("qualifie", request.etape) XCTAssertEqual(["vip", "lyon"], request.tags) } func testSendsEntrepriseNomWhenNoServerLink() throws { let entity = CrmContactEntity( fullName: "Ada", company: " Acme " ) let payload = mapper.toCreatePayload(entity) let request = try SyncJson.decode(CreateContactRequest.self, from: payload) XCTAssertNil(request.entrepriseId) XCTAssertEqual("Acme", request.entrepriseNom) XCTAssertTrue(payload.contains(#""entreprise_nom""#)) } func testOmitsEntrepriseNomWhenServerLinkExists() throws { let entity = CrmContactEntity( fullName: "Ada", company: "Acme", entrepriseServerId: "ent-42" ) let request = try SyncJson.decode( CreateContactRequest.self, from: mapper.toCreatePayload(entity) ) XCTAssertEqual("ent-42", request.entrepriseId) XCTAssertNil(request.entrepriseNom) } func testOmitsEntrepriseNomWhenCompanyBlank() throws { let entity = CrmContactEntity( fullName: "Ada", company: " " ) let request = try SyncJson.decode( CreateContactRequest.self, from: mapper.toCreatePayload(entity) ) XCTAssertNil(request.entrepriseNom) } func testSplitsFullNameWhenFirstAndLastMissing() throws { let entity = CrmContactEntity( fullName: "Jean Paul Sartre", emails: ["jp@ex.com"] ) let request = try SyncJson.decode( CreateContactRequest.self, from: mapper.toCreatePayload(entity) ) XCTAssertEqual("Jean", request.prenom) XCTAssertEqual("Paul Sartre", request.nom) XCTAssertNil(request.entrepriseId) } }
GitRust