prole/tests/installer/test_argocd_render_smoke.py
chrisfu 7efb2331f6 checkpoint: service env config + installer updates
- Expand generated service config (conf/service/prole.cfg) with captured inputs and derived vars

- Update installer core (actions/controller/env) and UI screens (services/argocd)

- Update monitoring init script and port mapping

- Update k8s prole-db manifests; add monitoring PV + StorageClass

- Add dev/test config templates and postgresql version file

- Update supabase generated helm values; bump prole-db version

- Extend installer tests incl. ArgoCD render smoke
2026-03-17 09:29:08 -07:00

97 lines
2.7 KiB
Python

from __future__ import annotations
def test_render_argocd_config_page_smoke(monkeypatch):
"""Regression test: ArgoCD config page should render without missing-method errors.
We intentionally stub `tkinter` widgets and the canvas so this test can run headless.
"""
import installer.ui.screens.argocd as argocd
from installer.ui.screens.base import ScreenBaseMixin
class _DummyWidget:
def __init__(self, *_args, **_kwargs):
pass
def destroy(self):
return None
def place_forget(self):
return None
def configure(self, **_kwargs):
return None
class _DummyVar:
def __init__(self, value=None):
self._value = value
self._traces: list[callable] = []
def get(self):
return self._value
def set(self, value):
self._value = value
for cb in list(self._traces):
cb()
def trace_add(self, _mode: str, cb):
# The real tkinter passes (name, index, op); our callbacks accept *_.
self._traces.append(lambda: cb(None, None, None))
monkeypatch.setattr(argocd.tk, "Checkbutton", _DummyWidget)
monkeypatch.setattr(argocd.tk, "Entry", _DummyWidget)
monkeypatch.setattr(argocd.tk, "Button", _DummyWidget)
monkeypatch.setattr(argocd.tk, "StringVar", _DummyVar)
class _DummyCanvas:
def __init__(self):
self._next_id = 1
def winfo_width(self):
return 975
def create_text(self, *_args, **_kwargs):
item = self._next_id
self._next_id += 1
return item
def create_window(self, *_args, **_kwargs):
item = self._next_id
self._next_id += 1
return item
def itemconfig(self, *_args, **_kwargs):
return None
class _DummyConsole:
def write(self, _content: str):
return None
def clear(self):
return None
class _DummyApp(ScreenBaseMixin, argocd.ArgoCDScreenMixin):
def __init__(self):
self.bg_canvas = _DummyCanvas()
self._canvas_items: list[int] = []
self._overlay_widgets: list[object] = []
self.argocd_enabled = _DummyVar(False)
self.argocd_namespace = _DummyVar("argocd")
def _create_console_output(self, *_args, **_kwargs):
return _DummyConsole()
def update_footer(self):
return None
def _on_argocd_toggle(self):
return None
app = _DummyApp()
app._render_argocd_config_page()
assert app._canvas_items
assert app._overlay_widgets