CalendarServerIdCodecTest.kt 104 lignes · 3420 octets
package fr.ebii.card2vcf.sync

import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Test

class CalendarServerIdCodecTest {

    @Test
    fun encodeWithServerIdPrependsPrefixLine() {
        val encoded = CalendarServerIdCodec.encode(serverId = "abc-123", descriptionBody = "RDV client")

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

    @Test
    fun encodeWithNullServerIdReturnsBodyUnchanged() {
        val encoded = CalendarServerIdCodec.encode(serverId = null, descriptionBody = "RDV client")

        assertEquals("RDV client", encoded)
    }

    @Test
    fun encodeWithEmptyBodyKeepsTrailingNewline() {
        val encoded = CalendarServerIdCodec.encode(serverId = "abc-123", descriptionBody = "")

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

    @Test
    fun decodeExtractsServerIdAndBody() {
        val (serverId, body) = CalendarServerIdCodec.decode("card2vcf:serverId=abc-123\nRDV client")

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

    @Test
    fun decodeWithoutPrefixReturnsNullServerIdAndFullDescription() {
        val (serverId, body) = CalendarServerIdCodec.decode("Simple description sans serverId")

        assertNull(serverId)
        assertEquals("Simple description sans serverId", body)
    }

    @Test
    fun decodeNullDescriptionReturnsNullAndEmptyBody() {
        val (serverId, body) = CalendarServerIdCodec.decode(null)

        assertNull(serverId)
        assertEquals("", body)
    }

    @Test
    fun decodeWithPrefixButNoNewlineTreatsRestAsServerId() {
        val (serverId, body) = CalendarServerIdCodec.decode("card2vcf:serverId=abc-123")

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

    @Test
    fun decodeWithMultilineBodyPreservesInternalNewlines() {
        val (serverId, body) = CalendarServerIdCodec.decode("card2vcf:serverId=abc-123\nligne1\nligne2")

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

    @Test
    fun roundTripEncodeThenDecodePreservesServerIdAndBody() {
        val encoded = CalendarServerIdCodec.encode(serverId = "srv-42", descriptionBody = "Détails\nsur plusieurs lignes")
        val (serverId, body) = CalendarServerIdCodec.decode(encoded)

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

    @Test
    fun roundTripWithoutServerIdPreservesBody() {
        val encoded = CalendarServerIdCodec.encode(serverId = null, descriptionBody = "Sans serverId")
        val (serverId, body) = CalendarServerIdCodec.decode(encoded)

        assertNull(serverId)
        assertEquals("Sans serverId", body)
    }

    @Test
    fun indispoTitleAddsPrefix() {
        assertEquals("[Indispo] Salle A fermée", CalendarEventTitles.indispoTitle("Salle A fermée"))
    }

    @Test
    fun isIndispoTitleDetectsPrefix() {
        assertEquals(true, CalendarEventTitles.isIndispoTitle("[Indispo] Salle A fermée"))
        assertEquals(false, CalendarEventTitles.isIndispoTitle("RDV client"))
    }

    @Test
    fun stripIndispoPrefixRemovesPrefixWhenPresent() {
        assertEquals("Salle A fermée", CalendarEventTitles.stripIndispoPrefix("[Indispo] Salle A fermée"))
        assertEquals("RDV client", CalendarEventTitles.stripIndispoPrefix("RDV client"))
    }
}