prole/tests/installer/test_screen.py
chrisfu 5618b662dd Remove prole-db-manager; simplify deployment via prole-authority; fix pg18 downgrade & cluster name
Summary:
Removed the prole-db-manager microservice and simplified deployment to use
prole-authority as the internal management and authorization point. Fixed two
blocking bugs that prevented silent install from completing on knoe-dev-cluster.

Removed: prole-db-manager
- Deleted db-manager-deployment.yaml and db-manager-service.yaml from opentofu manifests
- Deleted src/db-manager/ (Dockerfile, server.js, package.json, tests)
- Removed prole-db-manager port-forward mapping from installer/core/env.py
- Removed init_db_manager.sh from Initialization Scripts (milestones.py, actions.py)
- Removed init_certmgr.sh and init_db_manager.sh tabs from services screen (services.py)
- Removed live k8s Deployment/Service from knoe-dev-cluster

Fixed: PostgreSQL version downgrade error (pg17 -> pg18)
- Created conf/postgresql/.version with value 18
- Updated k8s/prole/prole-db.yaml and prole-db-recovery.yaml.tpl imageName to prole-db:18-089
- Fixed _init_database_options_state() to restore saved version_type from prole.cfg
  so db_version_type defaults to v18 (pg18) instead of silently reverting to pg17
- Added database_options.* keys to _collect_input_snapshot() in cfg.py so
  distribution, version_type, and all extension toggles persist to prole.cfg

Fixed: Cluster name inconsistency
- Removed stale prole-dev-cluster references; all scripts now use knoe-dev-cluster
- Added knoe-dev-cluster to mode-detection case in etc/prole_cfg.sh

Config: conf/prole.cfg
- Set kerberos_config.enabled = False, KERBEROS_AUTO_ENABLED = False
- Added database_options.distribution = percona, version_type = v18
- Added all 13 extension flags set to True (postgis, pgvector, pgcrypto, pgaudit,
  pg_repack, pg_stat_statements, pg_buffercache, pg_freespacemap, pgrowlocks,
  postgres_fdw, dblink, pg_stat_monitor, pgbadger)

Verification:
./install.py -s -l -v -c conf/prole.cfg completed successfully.
CNPG deployed prole-db:18-089 to knoe-dev-cluster; all milestones passed.

Co-authored-by: Junie <junie@jetbrains.com>
2026-03-01 20:40:44 -08:00

63 lines
1.8 KiB
Python

import pytest
from unittest.mock import MagicMock, patch
import tkinter as tk
from installer.screen import render_title, render_paragraph, TerminalConsole
@pytest.fixture
def mock_app():
app = MagicMock()
app.bg_canvas = MagicMock()
app._canvas_items = []
return app
def test_render_title(mock_app):
render_title(mock_app, "Test Title", y=50)
mock_app.bg_canvas.create_text.assert_called_once()
args, kwargs = mock_app.bg_canvas.create_text.call_args
assert args == (48, 50)
assert kwargs["text"] == "Test Title"
assert len(mock_app._canvas_items) == 1
def test_render_paragraph(mock_app):
render_paragraph(mock_app, "Test Paragraph", y=100)
mock_app.bg_canvas.create_text.assert_called_once()
args, kwargs = mock_app.bg_canvas.create_text.call_args
assert args == (48, 100)
assert kwargs["text"] == "Test Paragraph"
assert len(mock_app._canvas_items) == 1
def test_render_title_no_canvas():
app = MagicMock()
app.bg_canvas = None
render_title(app, "Title")
# Should not raise exception
@patch("platform.system", return_value="Darwin")
def test_terminal_console(mock_platform):
import sys
from unittest.mock import MagicMock as _MM
# TerminalConsole requires a real tkinter root; skip when tkinter is mocked.
if isinstance(sys.modules.get("tkinter"), _MM):
pytest.skip("tkinter is mocked in this test run; TerminalConsole needs real tkinter")
root = tk.Tk()
try:
console = TerminalConsole(root)
console.write("Hello\n")
# In mock or headless env, we might not be able to check text content easily
# but we can verify it doesn't crash and state is managed
assert console.text.cget("state") == "disabled"
console.clear()
assert console.text.cget("state") == "disabled"
finally:
root.destroy()