ContactSyncMapperTest.kt 57 lignes · 1979 octets
package fr.ebii.card2vcf.sync

import fr.ebii.card2vcf.data.CrmContactEntity
import kotlinx.serialization.decodeFromString
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Test

class ContactSyncMapperTest {
    @Test
    fun mapsLocalFieldsToApiJson() {
        val entity = CrmContactEntity(
            id = 1L,
            fullName = "Marie Dubois",
            firstName = "Marie",
            lastName = "Dubois",
            jobTitle = "Directrice",
            phones = listOf("+33 1 23 45 67 89"),
            emails = listOf("marie@acme.fr"),
            notes = "Rencontrée au salon",
            entrepriseServerId = "ent-42",
            statut = "client",
            etape = "qualifie",
            tags = listOf("vip", "lyon"),
        )

        val payload = ContactSyncMapper.toCreatePayload(entity)
        val request = syncJson.decodeFromString<CreateContactRequest>(payload)

        assertEquals("Marie", request.prenom)
        assertEquals("Dubois", request.nom)
        assertEquals("ent-42", request.entrepriseId)
        assertEquals("Directrice", request.fonction)
        assertEquals("marie@acme.fr", request.emails.single().valeur)
        assertEquals("+33 1 23 45 67 89", request.telephones.single().valeur)
        assertEquals("Rencontrée au salon", request.notes)
        assertEquals("client", request.statut)
        assertEquals("qualifie", request.etape)
        assertEquals(listOf("vip", "lyon"), request.tags)
    }

    @Test
    fun splitsFullNameWhenFirstAndLastMissing() {
        val entity = CrmContactEntity(
            fullName = "Jean Paul Sartre",
            emails = listOf("jp@ex.com"),
        )

        val request = syncJson.decodeFromString<CreateContactRequest>(
            ContactSyncMapper.toCreatePayload(entity),
        )

        assertEquals("Jean", request.prenom)
        assertEquals("Paul Sartre", request.nom)
        assertNull(request.entrepriseId)
    }
}