Files
reyna-cli/tests/test_email_local.py
T
2026-06-15 18:59:43 -04:00

75 lines
2.6 KiB
Python

import json
import mailbox
from email.message import EmailMessage
from typer.testing import CliRunner
from reyna_cli.cli import app
from reyna_cli.email_local import ThunderbirdEmailClient
runner = CliRunner()
def make_profile(tmp_path):
profile = tmp_path / "profile"
inbox = profile / "ImapMail" / "imap.example.com" / "INBOX"
inbox.parent.mkdir(parents=True)
mbox = mailbox.mbox(str(inbox))
msg = EmailMessage()
msg["From"] = "The Home Depot Protection Plan Team <purchaseconfirmation@squaretrade.com>"
msg["To"] = "adolfo@example.com"
msg["Subject"] = "Thank You for Your The Home Depot Protection Plan Purchase"
msg["Date"] = "Mon, 01 Sep 2025 04:20:20 +0000"
msg["Message-ID"] = "<fridge@example.com>"
msg.set_content("Thank you for purchasing your new Whirlpool Refrigerator WRS321SDHZ Protection Plan.")
mbox.add(msg)
mbox.flush()
mbox.close()
return profile, inbox
def test_email_client_searches_local_thunderbird_mbox(tmp_path, monkeypatch):
profile, _ = make_profile(tmp_path)
monkeypatch.setenv("REYNA_THUNDERBIRD_PROFILE", str(profile))
result = ThunderbirdEmailClient().search("Whirlpool Refrigerator", limit=5)
assert result["results"]
first = result["results"][0]
assert first["subject"] == "Thank You for Your The Home Depot Protection Plan Purchase"
assert "Whirlpool Refrigerator" in " ".join(first["snippets"])
def test_email_cli_has_subcommands():
result = runner.invoke(app, ["email", "--help"])
assert result.exit_code == 0
assert "search" in result.stdout
assert "latest" in result.stdout
assert "find-receipts" in result.stdout
def test_email_cli_search_json(tmp_path, monkeypatch):
profile, _ = make_profile(tmp_path)
monkeypatch.setenv("REYNA_THUNDERBIRD_PROFILE", str(profile))
result = runner.invoke(app, ["email", "search", "Whirlpool Refrigerator", "--json"])
assert result.exit_code == 0
payload = json.loads(result.stdout)
assert payload["ok"] is True
assert payload["source"] == "local_thunderbird"
assert payload["result"]["results"][0]["message_id"] == "<fridge@example.com>"
def test_email_cli_show_by_id(tmp_path, monkeypatch):
profile, _ = make_profile(tmp_path)
monkeypatch.setenv("REYNA_THUNDERBIRD_PROFILE", str(profile))
search = runner.invoke(app, ["email", "search", "WRS321SDHZ", "--json"])
message_id = json.loads(search.stdout)["result"]["results"][0]["id"]
result = runner.invoke(app, ["email", "show", message_id, "--body", "--json"])
assert result.exit_code == 0
payload = json.loads(result.stdout)
assert "Whirlpool Refrigerator" in payload["result"]["body"]