mirror of
https://github.com/dredx/prole.git
synced 2026-09-23 11:03:59 +00:00
92 lines
3.2 KiB
Python
92 lines
3.2 KiB
Python
"""Tests for the GitOps provider choice screen (_render_gitops_choice_page)."""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
import tkinter as tk
|
|
from pathlib import Path
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
|
if str(PROJECT_ROOT) not in sys.path:
|
|
sys.path.insert(0, str(PROJECT_ROOT))
|
|
|
|
from knoe.ui.screens.base import ScreenBaseMixin
|
|
from knoe.ui.screens.gitops import GitOpsScreenMixin
|
|
|
|
|
|
class _DummyGitOpsApp(ScreenBaseMixin, GitOpsScreenMixin):
|
|
"""Minimal surface to render the GitOps choice screen."""
|
|
|
|
def __init__(self, root: tk.Tk, canvas: tk.Canvas):
|
|
self.root = root
|
|
self.bg_canvas = canvas
|
|
self._canvas_items: list[int] = []
|
|
self._overlay_widgets: list[tk.Widget] = []
|
|
self.gitops_provider = tk.StringVar(master=root, value="gitea")
|
|
self.gitops_enabled = tk.BooleanVar(master=root, value=False)
|
|
self.argocd_enabled = tk.BooleanVar(master=root, value=False)
|
|
self.knoe_cfg_data: dict = {}
|
|
|
|
def _save_knoe_cfg(self):
|
|
pass
|
|
|
|
|
|
def _canvas_texts(cnv: tk.Canvas) -> list[str]:
|
|
return [
|
|
cnv.itemcget(item, "text")
|
|
for item in cnv.find_all()
|
|
if cnv.type(item) == "text"
|
|
]
|
|
|
|
|
|
def test_gitops_choice_page_renders_title_and_options():
|
|
"""The choice screen must render a title and all three provider options."""
|
|
root = tk.Tk()
|
|
root.withdraw()
|
|
try:
|
|
canvas = tk.Canvas(root, width=975, height=600, bg="white")
|
|
canvas.pack(fill="both", expand=False)
|
|
root.update()
|
|
app = _DummyGitOpsApp(root, canvas)
|
|
app._render_gitops_choice_page()
|
|
root.update()
|
|
texts = _canvas_texts(canvas)
|
|
assert "GitOps Provider" in texts
|
|
# All three provider labels must appear as Radiobutton text (widget titles).
|
|
widget_texts = [w.cget("text") for w in app._overlay_widgets if isinstance(w, tk.Radiobutton)]
|
|
assert any("Gitea" in t for t in widget_texts)
|
|
assert any("ArgoCD" in t for t in widget_texts)
|
|
assert any("None" in t for t in widget_texts)
|
|
finally:
|
|
root.destroy()
|
|
|
|
|
|
def test_on_gitops_provider_change_syncs_boolean_vars():
|
|
"""Selecting a provider must update gitops_enabled and argocd_enabled accordingly."""
|
|
root = tk.Tk()
|
|
root.withdraw()
|
|
try:
|
|
canvas = tk.Canvas(root, width=975, height=600, bg="white")
|
|
canvas.pack()
|
|
root.update()
|
|
app = _DummyGitOpsApp(root, canvas)
|
|
|
|
app.gitops_provider.set("gitea")
|
|
app._on_gitops_provider_change()
|
|
assert app.gitops_enabled.get() is True
|
|
assert app.argocd_enabled.get() is False
|
|
assert app.knoe_cfg_data["Optional Features"]["GITOPS_PROVIDER"] == "gitea"
|
|
|
|
app.gitops_provider.set("argocd")
|
|
app._on_gitops_provider_change()
|
|
assert app.gitops_enabled.get() is False
|
|
assert app.argocd_enabled.get() is True
|
|
assert app.knoe_cfg_data["Optional Features"]["ARGOCD_ENABLED"] == "True"
|
|
|
|
app.gitops_provider.set("none")
|
|
app._on_gitops_provider_change()
|
|
assert app.gitops_enabled.get() is False
|
|
assert app.argocd_enabled.get() is False
|
|
assert app.knoe_cfg_data["Optional Features"]["GITOPS_PROVIDER"] == "none"
|
|
finally:
|
|
root.destroy()
|