"""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"