"""Tests unitaires de compute_new_value (screens/data_actions/compute_operation.py) — logique partagée par apply_data_action.py (champ d'objet) et apply_variable_action.py (variable globale), factorisée pour ne plus être dupliquée dans les deux fichiers avant que la Phase 2 (hasard/opérations mathématiques) n'y ajoute 6 nouvelles opérations. Verrouille le comportement des 7 opérations existantes.""" import pytest from screens.data_actions.compute_operation import compute_new_value def test_definir_texte(): assert compute_new_value("definir_texte", "ancien", "nouveau", False) == "nouveau" assert compute_new_value("definir_texte", "ancien", "", False) == "" assert compute_new_value("definir_texte", "ancien", None, False) == "" def test_definir_nombre_entier_et_decimal(): assert compute_new_value("definir_nombre", 0, "5", False) == 5 assert isinstance(compute_new_value("definir_nombre", 0, "5", False), int) assert compute_new_value("definir_nombre", 0, "5.7", True) == 5.7 assert compute_new_value("definir_nombre", 0, "pas un nombre", False) == 0 def test_definir_bool(): assert compute_new_value("definir_bool_vrai", 0, None, False) == 1 assert compute_new_value("definir_bool_faux", 1, None, False) == 0 def test_basculer_bool(): assert compute_new_value("basculer_bool", 0, None, False) == 1 assert compute_new_value("basculer_bool", 1, None, False) == 0 assert compute_new_value("basculer_bool", None, None, False) == 1 def test_incrementer_decrementer_entier(): assert compute_new_value("incrementer", 10, "5", False) == 15 assert compute_new_value("decrementer", 10, "5", False) == 5 assert compute_new_value("incrementer", None, "5", False) == 5 def test_incrementer_decimal_garde_les_decimales(): result = compute_new_value("incrementer", 10.0, "0.5", True) assert result == 10.5 assert isinstance(result, float) def test_incrementer_valeur_invalide_ne_change_rien(): assert compute_new_value("incrementer", 10, "pas un nombre", False) == 10 def test_operation_inconnue_leve_value_error(): with pytest.raises(ValueError): compute_new_value("multiplier", 10, "2", False)