5.12 (livrat): editare in modal a randurilor de preview, cont obligatoriu inainte de import, formular editare extras (_form_editare, _editare_preview_modal), plus suita de teste aferenta (preview edit/compact, mapare op, form editare, signup, admin panel). Design + planificare: - docs/design.md: sistem de design (tokeni, breakpoints, scara control, componente, a11y). - docs/prd/prd-5.12-* si prd-5.13-* (5.13 cu raport /autoplan: CEO+Design+Eng, audit trail). Curatare: sterse PNG-urile de test/mockup temporare din radacina. Nota: implementarea CSS 5.13 (responsive compact + sistem butoane) NU e inca facuta — planul revizuit cere refactorul testelor fragile din test_web_responsive.py INAINTE de CSS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
125 lines
4.1 KiB
Python
125 lines
4.1 KiB
Python
"""Teste US-002 (PRD 3.1): CLI tools/account.py (create/list/activate/deactivate)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import tempfile
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture()
|
|
def env(monkeypatch):
|
|
tmp = tempfile.mkdtemp()
|
|
monkeypatch.setenv("AUTOPASS_DB_PATH", os.path.join(tmp, "test_tools_account.db"))
|
|
from app.config import get_settings
|
|
get_settings.cache_clear()
|
|
yield
|
|
get_settings.cache_clear()
|
|
|
|
|
|
def _run(argv):
|
|
from tools.account import main
|
|
return main(argv)
|
|
|
|
|
|
def test_create_afiseaza_id(env, capsys):
|
|
rc = _run(["create", "--name", "Service X", "--cui", "RO001", "--email", "x@test.com"])
|
|
out = capsys.readouterr().out
|
|
assert rc == 0
|
|
assert "id=2" in out
|
|
assert "activ=da" in out
|
|
|
|
|
|
def test_create_inactive_in_asteptare(env, capsys):
|
|
rc = _run(["create", "--name", "Service X", "--cui", "RO002", "--email", "x2@test.com", "--inactive"])
|
|
out = capsys.readouterr().out
|
|
assert rc == 0
|
|
assert "activ=nu" in out
|
|
|
|
|
|
def test_create_with_key_emite_cheie(env, capsys):
|
|
rc = _run(["create", "--name", "Service X", "--cui", "RO003", "--email", "x3@test.com", "--with-key"])
|
|
out = capsys.readouterr().out
|
|
assert rc == 0
|
|
assert "rfak_" in out
|
|
# cheia exista in DB pentru contul nou
|
|
from app.db import get_connection
|
|
conn = get_connection()
|
|
try:
|
|
n = conn.execute(
|
|
"SELECT COUNT(*) AS n FROM api_keys k JOIN accounts a ON a.id=k.account_id "
|
|
"WHERE a.name='Service X'"
|
|
).fetchone()["n"]
|
|
finally:
|
|
conn.close()
|
|
assert n == 1
|
|
|
|
|
|
def test_create_cui_duplicat_exit_2(env, capsys):
|
|
assert _run(["create", "--name", "Service A", "--cui", "RO123", "--email", "a@test.com"]) == 0
|
|
rc = _run(["create", "--name", "Service B", "--cui", "RO123", "--email", "b@test.com"])
|
|
err = capsys.readouterr().err
|
|
assert rc == 2
|
|
assert "RO123" in err
|
|
|
|
|
|
def test_with_key_atomic_pe_cui_duplicat(env, capsys):
|
|
# cont initial care ocupa CUI
|
|
assert _run(["create", "--name", "Service A", "--cui", "RO123", "--email", "a@test.com"]) == 0
|
|
capsys.readouterr()
|
|
# --with-key pe CUI duplicat: rollback -> niciun cont B, nicio cheie orfana
|
|
rc = _run(["create", "--name", "Service B", "--cui", "RO123", "--email", "b@test.com", "--with-key"])
|
|
assert rc == 2
|
|
from app.db import get_connection
|
|
conn = get_connection()
|
|
try:
|
|
assert conn.execute("SELECT COUNT(*) AS n FROM accounts WHERE name='Service B'").fetchone()["n"] == 0
|
|
# o singura cheie n-a fost emisa (doar contul A nu are cheie)
|
|
assert conn.execute("SELECT COUNT(*) AS n FROM api_keys").fetchone()["n"] == 0
|
|
finally:
|
|
conn.close()
|
|
|
|
|
|
def test_activate_comuta_starea(env, capsys):
|
|
_run(["create", "--name", "Service X", "--cui", "RO004", "--email", "x4@test.com", "--inactive"])
|
|
capsys.readouterr()
|
|
assert _run(["deactivate", "--account", "2"]) == 0
|
|
assert _run(["activate", "--account", "2"]) == 0
|
|
capsys.readouterr()
|
|
rc = _run(["list"])
|
|
out = capsys.readouterr().out
|
|
assert rc == 0
|
|
assert "Service X" in out
|
|
# contul 2 apare activ
|
|
line = [ln for ln in out.splitlines() if "Service X" in ln][0]
|
|
assert "da" in line
|
|
|
|
|
|
def test_activate_inexistent_exit_2(env, capsys):
|
|
rc = _run(["activate", "--account", "9999"])
|
|
err = capsys.readouterr().err
|
|
assert rc == 2
|
|
assert "inexistent" in err
|
|
|
|
|
|
def test_list_afiseaza_activ(env, capsys):
|
|
_run(["create", "--name", "Service X", "--cui", "RO005", "--email", "x5@test.com"])
|
|
capsys.readouterr()
|
|
rc = _run(["list"])
|
|
out = capsys.readouterr().out
|
|
assert rc == 0
|
|
assert "Service X" in out
|
|
assert "activ" in out # antet tabel
|
|
|
|
|
|
def test_list_pending_filtreaza(env, capsys):
|
|
_run(["create", "--name", "Activ SRL", "--cui", "RO006", "--email", "activ@test.com"])
|
|
_run(["create", "--name", "Asteptare SRL", "--cui", "RO007", "--email", "ast@test.com", "--inactive"])
|
|
capsys.readouterr()
|
|
rc = _run(["list", "--pending"])
|
|
out = capsys.readouterr().out
|
|
assert rc == 0
|
|
assert "Asteptare SRL" in out
|
|
assert "Activ SRL" not in out
|