feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
"""Tests para browser_profile_open.
|
||||
|
||||
browser_profile_open compone browser_profile_show (lectura de metadata) y lanza
|
||||
Chromium via systemd-run. Aqui se mockea browser_profile_show (ligado en el modulo por
|
||||
el `from browser.browser_profile_show import browser_profile_show`) y se usa dry_run=True
|
||||
para NO abrir navegador. Se valida el comando construido en los dos casos clave:
|
||||
- user_data_dir vacio -> NO se pasa --user-data-dir (lo hereda el wrapper chromium-cdp).
|
||||
- user_data_dir custom -> SI se pasa --user-data-dir explicito.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
||||
|
||||
import browser.browser_profile_open as bpo
|
||||
from browser.browser_profile_open import browser_profile_open
|
||||
|
||||
|
||||
def _show_ret(user_data_dir=""):
|
||||
"""Construye una respuesta ok de browser_profile_show con cuentas."""
|
||||
return {
|
||||
"status": "ok",
|
||||
"profile": {"profile_dir": "Profile 1", "user_data_dir": user_data_dir,
|
||||
"label": "Maria", "status": "active"},
|
||||
"accounts": [
|
||||
{"id": "Profile 1:gmail:maria@example.com", "service": "gmail",
|
||||
"identity": "maria@example.com", "secret_ref": "pass show osint/p1/gmail",
|
||||
"role": "primary", "status": "active", "notes": ""},
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def test_dry_run_default_user_data_dir_no_pasa_user_data_dir(monkeypatch):
|
||||
# user_data_dir vacio en la fila -> default del wrapper -> NO --user-data-dir.
|
||||
monkeypatch.setattr(bpo, "browser_profile_show", lambda pd, base_url="": _show_ret(""))
|
||||
|
||||
res = browser_profile_open("Profile 1", url="https://mail.google.com", dry_run=True)
|
||||
|
||||
assert res["status"] == "ok"
|
||||
assert res["profile_dir"] == "Profile 1"
|
||||
cmd = res["cmd"]
|
||||
# Lanzamiento aislado via systemd-run --user --scope --.
|
||||
assert cmd[:5] == ["systemd-run", "--user", "--scope", "--", "chromium"]
|
||||
assert '--profile-directory=Profile 1' in cmd
|
||||
# Caso default: NO debe aparecer --user-data-dir (lo inyecta el wrapper).
|
||||
assert not any(a.startswith("--user-data-dir=") for a in cmd)
|
||||
# La URL va al final.
|
||||
assert cmd[-1] == "https://mail.google.com"
|
||||
# Las cuentas se exponen con su secret_ref (referencia, nunca el password).
|
||||
assert res["accounts"][0]["secret_ref"] == "pass show osint/p1/gmail"
|
||||
assert res["accounts"][0]["service"] == "gmail"
|
||||
|
||||
|
||||
def test_dry_run_custom_user_data_dir_pasa_flag_explicito(monkeypatch):
|
||||
custom = "/mnt/data/chromium-osint"
|
||||
monkeypatch.setattr(bpo, "browser_profile_show", lambda pd, base_url="": _show_ret(custom))
|
||||
|
||||
res = browser_profile_open("Profile 1", dry_run=True)
|
||||
|
||||
assert res["status"] == "ok"
|
||||
cmd = res["cmd"]
|
||||
# Caso custom: SI debe aparecer --user-data-dir explicito con el dir de la fila.
|
||||
assert f"--user-data-dir={custom}" in cmd
|
||||
assert '--profile-directory=Profile 1' in cmd
|
||||
# Sin url -> el ultimo arg NO es una URL.
|
||||
assert not cmd[-1].startswith("http")
|
||||
|
||||
|
||||
def test_dry_run_user_data_dir_default_explicito_no_se_pasa(monkeypatch):
|
||||
# Si la fila trae EXACTAMENTE el default (con ~), tampoco debe pasarse --user-data-dir.
|
||||
monkeypatch.setattr(
|
||||
bpo, "browser_profile_show",
|
||||
lambda pd, base_url="": _show_ret("~/.config/chromium-cdp"),
|
||||
)
|
||||
|
||||
res = browser_profile_open("Profile 1", dry_run=True)
|
||||
|
||||
assert res["status"] == "ok"
|
||||
cmd = res["cmd"]
|
||||
assert not any(a.startswith("--user-data-dir=") for a in cmd)
|
||||
|
||||
|
||||
def test_error_perfil_no_existe_propaga_sin_lanzar(monkeypatch):
|
||||
err = {"status": "error", "error": "perfil no encontrado: fantasma"}
|
||||
monkeypatch.setattr(bpo, "browser_profile_show", lambda pd, base_url="": err)
|
||||
|
||||
res = browser_profile_open("fantasma", dry_run=True)
|
||||
|
||||
assert res["status"] == "error"
|
||||
assert "no encontrado" in res["error"]
|
||||
# No hay cmd ni launched cuando el perfil no existe.
|
||||
assert "cmd" not in res
|
||||
assert "launched" not in res
|
||||
Reference in New Issue
Block a user