ApercuTacheTest.kt 67 lignes · 2272 octets
package fr.ebii.card2vcf.planning

import fr.ebii.card2vcf.data.TacheEntity
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertNull
import kotlin.test.assertTrue

/**
 * Logique d'affichage de la carte kanban, extraite du Compose pour être
 * testable — même principe que `KanbanFilter`.
 */
class ApercuTacheTest {
    private fun tache(
        debut: String? = null,
        duree: Int? = null,
        etiquette: String? = null,
        sousTaches: String = "[]",
    ) = TacheEntity(
        localId = 1,
        titre = "T",
        debut = debut,
        dureeJours = duree,
        etiquette = etiquette,
        sousTachesJson = sousTaches,
    )

    @Test
    fun periodeEnJoursOuvresDuProjet() {
        // Vendredi 2026-01-09 + 3 jours ouvrés.
        val t = tache(debut = "2026-01-09", duree = 3)
        assertEquals("09/01 → 13/01", ApercuTache.periode(t, joursOuvres = 5))
        assertEquals("09/01 → 11/01", ApercuTache.periode(t, joursOuvres = 7))
    }

    @Test
    fun pasDePeriodeSansDate() {
        assertNull(ApercuTache.periode(tache(duree = 3), joursOuvres = 5))
    }

    @Test
    fun uneDateIllisibleNeFaitPasTomberLEcran() {
        assertNull(ApercuTache.periode(tache(debut = "pas-une-date"), joursOuvres = 5))
    }

    @Test
    fun avancementDesSousTaches() {
        val json = """[{"id":"a","titre":"A","fait":true},{"id":"b","titre":"B","fait":false}]"""
        assertEquals(1 to 2, ApercuTache.avancement(tache(sousTaches = json)))
        assertNull(ApercuTache.avancement(tache()), "aucune sous-tâche = rien à afficher")
    }

    @Test
    fun sousTachesIllisiblesIgnorees() {
        assertNull(ApercuTache.avancement(tache(sousTaches = "{pas du json")))
    }

    @Test
    fun retardMesureContreLEcheance() {
        val t = tache(debut = "2026-01-09", duree = 3) // finit le 13 en rythme 5
        assertTrue(ApercuTache.enRetard(t, joursOuvres = 5, echeance = "2026-01-12"))
        assertFalse(ApercuTache.enRetard(t, joursOuvres = 5, echeance = "2026-01-13"))
        assertFalse(ApercuTache.enRetard(t, joursOuvres = 5, echeance = null))
        assertFalse(ApercuTache.enRetard(tache(), joursOuvres = 5, echeance = "2026-01-01"))
    }
}