# -*- coding: utf-8 -*- """Smoke test: built-in CLI usage lists routed account subcommands.""" from __future__ import annotations import os import subprocess import sys import pytest _scripts = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "scripts") def test_usage_includes_all_account_subcommands(): env = {**os.environ, "PYTHONPATH": _scripts} r = subprocess.run( [sys.executable, "-m", "cli.app"], capture_output=True, text=True, env=env, cwd=_scripts, ) assert r.returncode == 1 usage = r.stdout for cmd in ( "init-db", "init-master-key", "export-credentials", "import-credentials", "add-web", "ensure-web", "get-credential", "pick-web", "resolve", "reveal-profile", ): assert cmd in usage, f"USAGE 缺少 {cmd}" assert "--ensure" in usage assert "--login-id" in usage def test_init_db_cli_succeeds(fake_env): """宿主调用的 init-db 必须成功并写入展示元数据。""" import json env = { **os.environ, "PYTHONPATH": _scripts, "JIANGCHANG_DATA_ROOT": fake_env["data_root"], "JIANGCHANG_USER_ID": fake_env["user_id"], } r = subprocess.run( [sys.executable, "main.py", "init-db"], capture_output=True, text=True, env=env, cwd=_scripts, ) assert r.returncode == 0, r.stdout + r.stderr payload = json.loads(r.stdout.strip().splitlines()[-1]) assert payload.get("ok") is True assert payload.get("skill") == "account-manager" assert payload.get("db_path") from db.connection import get_conn conn = get_conn() try: cur = conn.cursor() cur.execute("SELECT COUNT(*) FROM _jiangchang_columns") assert int(cur.fetchone()[0]) > 0 cur.execute( """ SELECT display_name FROM _jiangchang_columns WHERE table_name = 'accounts' AND column_name = 'role' """ ) assert cur.fetchone()[0] == "角色" finally: conn.close()