feat(5.20): US-004/005/006/009 ingestie+API+worker+import pe mediu RAR
US-004: rezolva_rar_env (cerere>default cont>ancora globala) + MediuIndisponibil + cod RAR_MEDIU_INDISPONIBIL. US-005: camp rar_env pe POST /v1/prezentari + /valideaza (Literal), echo in SubmissionResult/ValidareResult/GET, build_key + INSERT env-aware. US-006: AccountSessions re-cheiat (account_id, rar_env); RarClient base_url per env; creds din slotul env; purge + recover_orphans scoped pe env (E1/1a, 1b/E6); claim_one propaga rar_env (1c/E8); keepalive pe ancora globala (M2). US-009: selector mediu la import (>=2 medii), eticheta la 1, banner la 0; commit seteaza rar_env pe submissions. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
96
tests/test_rar_env_resolve.py
Normal file
96
tests/test_rar_env_resolve.py
Normal file
@@ -0,0 +1,96 @@
|
||||
"""Teste US-004 (PRD 5.20): rezolvare mediu tinta la ingestie + respingere tinte indisponibile.
|
||||
|
||||
Fixtura `conn` urmareste acelasi pattern ca tests/test_accounts.py:
|
||||
monkeypatch AUTOPASS_DB_PATH pe tempdir, cache_clear, init_db, get_connection.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def conn(monkeypatch):
|
||||
tmp = tempfile.mkdtemp()
|
||||
monkeypatch.setenv("AUTOPASS_DB_PATH", os.path.join(tmp, "test_rar_env_resolve.db"))
|
||||
from app.config import get_settings
|
||||
get_settings.cache_clear()
|
||||
from app.db import get_connection, init_db
|
||||
init_db()
|
||||
c = get_connection()
|
||||
yield c
|
||||
c.close()
|
||||
get_settings.cache_clear()
|
||||
|
||||
|
||||
def _seteaza_cont_ambele(conn) -> None:
|
||||
"""Configureaza contul id=1 cu ambele medii disponibile, default = prod."""
|
||||
conn.execute(
|
||||
"""UPDATE accounts
|
||||
SET rar_test_enabled=1, rar_creds_test_enc='T',
|
||||
rar_prod_enabled=1, rar_creds_prod_enc='P',
|
||||
rar_env_default='prod'
|
||||
WHERE id=1"""
|
||||
)
|
||||
conn.commit()
|
||||
|
||||
|
||||
def _seteaza_cont_doar_prod(conn) -> None:
|
||||
"""Configureaza contul id=1 cu doar prod disponibil, test off."""
|
||||
conn.execute(
|
||||
"""UPDATE accounts
|
||||
SET rar_test_enabled=0, rar_creds_test_enc=NULL,
|
||||
rar_prod_enabled=1, rar_creds_prod_enc='P',
|
||||
rar_env_default='prod'
|
||||
WHERE id=1"""
|
||||
)
|
||||
conn.commit()
|
||||
|
||||
|
||||
def test_cerere_castiga(conn):
|
||||
"""Cererea explicita bate default-ul contului (prod)."""
|
||||
_seteaza_cont_ambele(conn)
|
||||
from app.rar_env import rezolva_rar_env
|
||||
rezultat = rezolva_rar_env(conn, 1, "test")
|
||||
assert rezultat == "test"
|
||||
|
||||
|
||||
def test_fallback_default_cont(conn):
|
||||
"""Fara cerere explicita -> default-ul contului (prod)."""
|
||||
_seteaza_cont_ambele(conn)
|
||||
from app.rar_env import rezolva_rar_env
|
||||
rezultat = rezolva_rar_env(conn, 1, None)
|
||||
assert rezultat == "prod"
|
||||
|
||||
|
||||
def test_tinta_indisponibila_respinsa(conn):
|
||||
"""Cerere pentru 'test' pe un cont doar-prod -> MediuIndisponibil cu .disponibile=['prod']."""
|
||||
_seteaza_cont_doar_prod(conn)
|
||||
from app.rar_env import MediuIndisponibil, rezolva_rar_env
|
||||
with pytest.raises(MediuIndisponibil) as exc_info:
|
||||
rezolva_rar_env(conn, 1, "test")
|
||||
err = exc_info.value
|
||||
assert err.env == "test"
|
||||
assert err.disponibile == ["prod"]
|
||||
|
||||
|
||||
def test_valoare_invalida(conn):
|
||||
"""Cerere cu valoare in afara VALID_ENVS -> ValueError, fara fallback silentios."""
|
||||
from app.rar_env import rezolva_rar_env
|
||||
with pytest.raises(ValueError, match="mediu invalid"):
|
||||
rezolva_rar_env(conn, 1, "staging")
|
||||
|
||||
|
||||
def test_zero_medii_cade_pe_ancora(conn, monkeypatch):
|
||||
"""Cont fara niciun mediu disponibil -> ancora globala AUTOPASS_RAR_ENV."""
|
||||
# id=1 din fresh DB: rar_prod_enabled=1 dar rar_creds_prod_enc=NULL -> 0 disponibile
|
||||
# (valoarea implicita a schemei: prod enabled fara creds -> nedisponibil)
|
||||
monkeypatch.setenv("AUTOPASS_RAR_ENV", "test")
|
||||
from app.config import get_settings
|
||||
get_settings.cache_clear()
|
||||
from app.rar_env import rezolva_rar_env
|
||||
rezultat = rezolva_rar_env(conn, 1, None)
|
||||
assert rezultat == "test"
|
||||
Reference in New Issue
Block a user