"""Tests pour la commande CLI parse."""
import tempfile
from pathlib import Path
import pytest
from typer.testing import CliRunner
from pricewatch.app.cli.main import app
runner = CliRunner()
class TestParseCommand:
"""Tests pour la commande parse."""
@pytest.fixture
def amazon_html_file(self, tmp_path: Path) -> Path:
"""Cree un fichier HTML Amazon temporaire."""
html = """
Test Product
299,99 €
En stock
"""
file_path = tmp_path / "amazon_test.html"
file_path.write_text(html, encoding="utf-8")
return file_path
@pytest.fixture
def cdiscount_html_file(self, tmp_path: Path) -> Path:
"""Cree un fichier HTML Cdiscount temporaire."""
html = """
Produit Cdiscount
"""
file_path = tmp_path / "cdiscount_test.html"
file_path.write_text(html, encoding="utf-8")
return file_path
def test_parse_amazon_success(self, amazon_html_file: Path):
"""Parse doit extraire les donnees d'un HTML Amazon."""
result = runner.invoke(
app, ["parse", "amazon", "--in", str(amazon_html_file)]
)
assert result.exit_code == 0
assert "Test Product" in result.stdout
assert "299" in result.stdout
def test_parse_cdiscount_success(self, cdiscount_html_file: Path):
"""Parse doit extraire les donnees d'un HTML Cdiscount."""
result = runner.invoke(
app, ["parse", "cdiscount", "--in", str(cdiscount_html_file)]
)
assert result.exit_code == 0
assert "Produit Cdiscount" in result.stdout
assert "199" in result.stdout
def test_parse_unknown_store(self, amazon_html_file: Path):
"""Parse doit echouer pour un store inconnu."""
result = runner.invoke(
app, ["parse", "unknown_store", "--in", str(amazon_html_file)]
)
assert result.exit_code == 1
assert "inconnu" in result.stdout.lower()
def test_parse_with_debug(self, amazon_html_file: Path):
"""Parse doit fonctionner avec --debug."""
result = runner.invoke(
app, ["parse", "amazon", "--in", str(amazon_html_file), "--debug"]
)
assert result.exit_code == 0
def test_parse_shows_fields(self, amazon_html_file: Path):
"""Parse doit afficher les champs extraits."""
result = runner.invoke(
app, ["parse", "amazon", "--in", str(amazon_html_file)]
)
assert result.exit_code == 0
assert "Titre" in result.stdout
assert "Prix" in result.stdout
assert "Stock" in result.stdout