Ctrl K
ComunidadGuías…

test_relance_apres_maj.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""La relance qui suit une mise à jour garde chacun de ses verbes.

Vu en vrai le 2026-10-17, à la première mise à jour par l'installateur commun
(0.23.0 vers 0.23.1) : l'assistant de nico579-commons 0.5.0 perd les arguments
vides. « serve … --trusted-host "" watch --loop 10 download … » revenait
« … --trusted-host watch --loop 10 download … » : --trusted-host avalait la
relève, et serve mourait sur un --loop qu'il ne connaît pas. Page et relève
restaient éteintes jusqu'à une relance à la main."""

import unittest
from unittest import mock

import maj
import runtime

STANDARD = ["serve", "--port", "8765", "--timezone", "Europe/Paris", "--trusted-host", "",
            "watch", "--loop", "10",
            "download", "--from", "all", "--usb-loop", "10", "--cloud-loop", "1"]
GROUPES = [["serve", "--port", "8765", "--timezone", "Europe/Paris", "--trusted-host", ""],
           ["watch", "--loop", "10"],
           ["download", "--from", "all", "--usb-loop", "10", "--cloud-loop", "1"]]


def abimee(ligne: list) -> list:
    """Ce que l'assistant de nico579-commons 0.5.0 fait d'une ligne de relance."""
    return [mot for mot in ligne if mot]


class LignesAbimeesParLAncienAssistant(unittest.TestCase):
    def test_la_ligne_intacte_ne_change_pas(self):
        self.assertEqual(runtime.decouper_verbes(STANDARD), GROUPES)

    def test_sans_supplement_la_releve_n_est_plus_avalee(self):
        # Démarrage de Windows : « start » seul.
        self.assertEqual(runtime.decouper_verbes(abimee(STANDARD)), GROUPES)

    def test_avec_le_supplement_du_raccourci(self):
        # Raccourci du bureau : « start --open-browser », greffé après le bloc fixe.
        ligne = STANDARD[:runtime.LONGUEUR_BLOC_SERVE] + ["--open-browser"] \
            + STANDARD[runtime.LONGUEUR_BLOC_SERVE:]
        self.assertEqual(runtime.decouper_verbes(abimee(ligne)),
                         [GROUPES[0] + ["--open-browser"], GROUPES[1], GROUPES[2]])

    def test_un_hote_nomme_comme_un_verbe_reste_une_valeur(self):
        # Audit I-11 : standard() fait suivre l'hôte du verbe watch.
        self.assertEqual(
            runtime.decouper_verbes(["serve", "--trusted-host", "watch", "watch", "--loop", "10"]),
            [["serve", "--trusted-host", "watch"], ["watch", "--loop", "10"]])
        self.assertEqual(runtime.decouper_verbes(["serve", "--trusted-host", "watch"]),
                         [["serve", "--trusted-host", "watch"]])


class ListeDeRelance(unittest.TestCase):
    def relance(self, compositions):
        with mock.patch.object(maj, "_compositions_en_cours", return_value=compositions):
            return maj._verbes_a_relancer()

    def test_aucun_argument_vide_n_est_confie_a_l_assistant(self):
        lignes = self.relance([GROUPES])
        self.assertEqual(len(lignes), 1)
        self.assertNotIn("", lignes[0])
        # serve retrouve de lui-même son hôte vide, valeur par défaut.
        self.assertEqual(runtime.decouper_verbes(abimee(lignes[0])),
                         [GROUPES[0][:5], GROUPES[1], GROUPES[2]])

    def test_un_hote_renseigne_est_garde(self):
        groupes = [GROUPES[0][:6] + ["nas.local"], GROUPES[1]]
        self.assertEqual(self.relance([groupes]),
                         [[mot for groupe in groupes for mot in groupe]])

    def test_rien_ne_tournait(self):
        self.assertEqual(self.relance([[]]), [["start"]])


if __name__ == "__main__":
    unittest.main()