"""Structural tests for the DB-maintenance admin routes + scheduler surface.""" def test_admin_handlers_callable(): from scribe.routes import admin as admin_routes for name in ( "get_db_maintenance", "update_db_maintenance", "run_db_maintenance_now", "get_db_maintenance_health", ): assert callable(getattr(admin_routes, name)) def test_db_maintenance_routes_registered(): from scribe.app import create_app app = create_app() rules = {r.rule for r in app.url_map.iter_rules()} assert "/api/admin/db-maintenance" in rules assert "/api/admin/db-maintenance/run" in rules assert "/api/admin/db-maintenance/health" in rules def test_scheduler_surface(): from scribe.services import db_maintenance_scheduler as sched for fn in ( "start_db_maintenance_scheduler", "stop_db_maintenance_scheduler", "reschedule_db_maintenance", "get_maintenance_hour", "is_maintenance_enabled", ): assert callable(getattr(sched, fn)), f"scheduler missing {fn}" def test_service_surface_and_allowlist(): from scribe.services.db_maintenance import ( MAINTENANCE_TABLES, get_last_run, get_table_health, run_maintenance, ) assert callable(run_maintenance) and callable(get_last_run) and callable(get_table_health) # The allowlist is a closed tuple covering exactly the high-churn tables. assert isinstance(MAINTENANCE_TABLES, tuple) assert set(MAINTENANCE_TABLES) == { "app_logs", "notifications", "password_reset_tokens", "invitation_tokens", "notes", "note_versions", } def test_set_admin_setting_exists(): from scribe.services.settings import set_admin_setting assert callable(set_admin_setting)