Ctrl K
ComunidadGuías…

test_amorcage_commun.py

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

Archivo original ↗Preguntar a KiBot
"""Le moteur d'amorçage de blink2video est celui des quatre applications.

``_amorcage.py`` est une copie octet pour octet de ``nico579_commons.amorcage`` :
il tourne avant l'installation de la bibliothèque commune, qu'il ne peut donc
pas importer. Ces tests vérifient que la copie n'a pas dérivé du paquet
installé et que runtime.bootstrap() l'appelle comme il faut. Le moteur lui-même
(modes, venv, pip, relance) est testé dans nico579-commons (tests/test_amorcage.py).
"""

from __future__ import annotations

import unittest
from pathlib import Path
from unittest import mock

import runtime

RACINE = Path(__file__).resolve().parent


def _lignes(chemin):
    """Le texte sans égard aux fins de ligne : un dépôt récupéré sous Windows
    peut les convertir, sans que la copie ait dérivé."""
    return Path(chemin).read_bytes().decode("utf-8").splitlines()


class CopieDuCommun(unittest.TestCase):
    def test_la_copie_est_identique_au_module_du_paquet(self):
        from nico579_commons import amorcage
        self.assertEqual(
            _lignes(RACINE / "_amorcage.py"), _lignes(amorcage.__file__),
            "_amorcage.py a dérivé de nico579_commons.amorcage : recopier le "
            "fichier du paquet (et monter l'épingle de nico579-commons).")


class Branchement(unittest.TestCase):
    def test_la_configuration_de_blink2video(self):
        moteur = runtime.amorcage()
        self.assertEqual(moteur.nom, "blink2video")
        self.assertEqual(moteur.variable, "BLINK_BOOTSTRAP")
        self.assertEqual(moteur.venv, Path.home() / ".blink2video" / "venv")
        self.assertTrue(moteur.reutiliser_environnement)  # l'image Docker : rien à créer

    def test_la_langue_est_celle_de_la_page(self):
        with mock.patch.object(runtime, "lire_langue", return_value="en"):
            self.assertIn("Creating", runtime.amorcage().texte("creation_venv", venv="v"))
        with mock.patch.object(runtime, "lire_langue", return_value="fr"):
            self.assertIn("Création", runtime.amorcage().texte("creation_venv", venv="v"))

    def test_un_bundle_n_amorce_rien(self):
        with mock.patch.object(runtime, "frozen", return_value=True), \
                mock.patch.object(runtime, "amorcage") as amorcage:
            runtime.bootstrap()
        amorcage.assert_not_called()

    def test_l_option_est_retiree_avant_le_moteur(self):
        # --bootstrap= n'est connue d'aucun parseur de verbe : elle ne doit pas
        # atteindre argparse, et le moteur la lit dans la variable d'environnement.
        with mock.patch.object(runtime, "frozen", return_value=False), \
                mock.patch.object(runtime, "amorcage") as amorcage, \
                mock.patch.object(runtime.sys, "argv", ["blink2video", "download", "--bootstrap=none"]), \
                mock.patch.dict(runtime.os.environ, {}):
            runtime.bootstrap()
            self.assertEqual(runtime.sys.argv, ["blink2video", "download"])
            self.assertEqual(runtime.os.environ["BLINK_BOOTSTRAP"], "none")
        amorcage.return_value.lancer.assert_called_once_with()


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