"""Tests for TargetEmailParser.""" from pathlib import Path from receiptwitness.parsers.email.base import EmailReceipt from receiptwitness.parsers.email.target import TargetEmailParser FIXTURE_PATH = Path(__file__).parent.parent.parent / "fixtures" / "target_email_receipt.html" class TestTargetEmailParser: """Tests for TargetEmailParser.""" def setup_method(self) -> None: self.parser = TargetEmailParser() self.fixture_html = FIXTURE_PATH.read_text() def test_can_parse_target_sender(self) -> None: email = EmailReceipt( sender="receipts@target.com", recipient="user@example.com", subject="Your Target Order Confirmation", body_html=self.fixture_html, ) assert self.parser.can_parse(email) is True def test_can_parse_circle_in_body(self) -> None: email = EmailReceipt( sender="someone@unknown.com", recipient="user@example.com", subject="Your Receipt", body_html="Target Circle savings offer", ) assert self.parser.can_parse(email) is True def test_cannot_parse_unrelated(self) -> None: email = EmailReceipt( sender="noreply@walmart.com", recipient="user@example.com", subject="Your Receipt", body_html="Walmart receipt", ) assert self.parser.can_parse(email) is False def test_parse_items(self) -> None: email = EmailReceipt( sender="orders@target.com", recipient="user@example.com", subject="Your Target Order", body_html=self.fixture_html, ) result = self.parser.parse(email) items = result.get("items", []) assert len(items) >= 3 product_names = [item["product_name_raw"] for item in items] assert any("Whole Milk" in name for name in product_names) assert any("Arborio" in name for name in product_names) for item in items: assert "unit_price" in item assert "extended_price" in item def test_parse_totals(self) -> None: email = EmailReceipt( sender="orders@target.com", recipient="user@example.com", subject="Your Target Order", body_html=self.fixture_html, ) result = self.parser.parse(email) total = result.get("total", 0) assert total > 0 def test_parse_receipt_id(self) -> None: email = EmailReceipt( sender="orders@target.com", recipient="user@example.com", subject="Your Target Order", body_html=self.fixture_html, ) result = self.parser.parse(email) receipt_id = result.get("receipt_id", "") assert "TGT-2026" in receipt_id or "CNF" in receipt_id def test_parse_date(self) -> None: email = EmailReceipt( sender="orders@target.com", recipient="user@example.com", subject="Your Target Order", body_html=self.fixture_html, ) result = self.parser.parse(email) purchase_date = result.get("purchase_date", "") assert purchase_date == "2026-03-18"