80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
# -*- 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",
|
|
):
|
|
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()
|