refactor(gui): intégrer les Règles dans Administration > Profils
Retour Dom : « les règles du profil doivent être dans le menu profil, pas à
part ! ». Même logique que le Masquage — les règles qui influencent
l'anonymisation appartiennent au profil ; un sous-onglet séparé crée la
même confusion.
- Retrait du sous-onglet « Administration > Règles » (_SUBTABS, builder,
méthode _build_regles supprimée). Sous-onglets restants : Réglages /
Profils / Partage.
- Section « Profils > Règles du profil » enrichie : wording clair (règles
d'anonymisation portées par le profil), aperçu illustratif de la table
des règles (réutilise _rule_row + _HELP_REGLES), édition fine annoncée
« à venir ».
- Abandon du « Testeur de règle » (écran outil global) pour ne pas
réintroduire un second réglage métier.
Cible UX : Réglages / Profils (Général・Masquage・Mots・Moteurs・Règles du
profil) / Partage. Test obsolète test_rules_subtab_has_no_unexplained_2
remplacé par test_no_separate_rules_subtab.
262 tests unit OK (0 régression), self-test OK, nav 3 sous-onglets + section
Règles dans Profils + thème OK. Préserve d8bc0cd + GO Qwen. Aucun build/push
sans GO Dom.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -53,13 +53,15 @@ def test_main_tab_renamed_to_administration():
|
||||
assert not any("Configuration" in lbl for lbl in labels)
|
||||
|
||||
|
||||
def test_rules_subtab_has_no_unexplained_2():
|
||||
"""Retour Dom #3 : « Règles 2 » incompréhensible → simple « Règles »."""
|
||||
def test_no_separate_rules_subtab():
|
||||
"""Retour Dom : les règles appartiennent au profil → plus de sous-onglet
|
||||
« Règles » séparé (et donc plus de « Règles 2 » incompréhensible)."""
|
||||
from gui_v6.tabs.tab_config import _SUBTABS
|
||||
|
||||
keys = [key for key, _ in _SUBTABS]
|
||||
labels = [label for _, label in _SUBTABS]
|
||||
assert any(lbl.strip() == "🛡️ Règles" for lbl in labels)
|
||||
assert not any("Règles 2" in lbl or "Règles 2" in lbl for lbl in labels)
|
||||
assert "rul" not in keys
|
||||
assert not any("Règles" in lbl for lbl in labels)
|
||||
|
||||
|
||||
def test_help_button_opens_help_window(app):
|
||||
|
||||
@@ -273,3 +273,25 @@ def test_masquage_moved_into_profils(ctk_root, tmp_path, monkeypatch):
|
||||
tab._on_mask_template_saved(saved)
|
||||
assert tab._pro_template_var.get().endswith("depuis_editeur.json")
|
||||
tab.destroy()
|
||||
|
||||
|
||||
def test_regles_moved_into_profils(ctk_root, tmp_path, monkeypatch):
|
||||
"""Retour Dom : le sous-onglet Règles séparé est retiré ; les règles du
|
||||
profil sont une section de Profils."""
|
||||
from gui_v6.tabs import tab_config
|
||||
|
||||
keys = [k for k, _ in tab_config._SUBTABS]
|
||||
assert "rul" not in keys # plus de sous-onglet Règles séparé
|
||||
|
||||
monkeypatch.setattr(tab_config, "_app_base_dir", lambda: tmp_path)
|
||||
tab = tab_config.ConfigTab(ctk_root)
|
||||
tab._show_sub("pro")
|
||||
tab.update_idletasks()
|
||||
|
||||
# la section des règles du profil est dans le panneau Profils
|
||||
texts = " | ".join(_all_texts(tab._panels["pro"]))
|
||||
assert "Règles d'anonymisation portées par ce profil" in texts
|
||||
assert "Masquer le sigle CHUXX" in texts # table de règles relocalisée dans Profils
|
||||
# le builder du sous-onglet séparé n'existe plus
|
||||
assert "rul" not in tab._panels
|
||||
tab.destroy()
|
||||
|
||||
Reference in New Issue
Block a user