aboutsummaryrefslogtreecommitdiff
path: root/docs/scripts/tests/test_integration_stdout.py
blob: d87478ea34781bdac81a5b4f0f061ef84a2bd69d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
"""Integration tests for backwards-compatible stdout mode (no --output-dir)."""

import os
import shutil
import sys

sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

import importlib.util
spec = importlib.util.spec_from_file_location(
    "eml_script",
    os.path.join(os.path.dirname(__file__), '..', 'eml-view-and-extract-attachments.py')
)
eml_script = importlib.util.module_from_spec(spec)
spec.loader.exec_module(eml_script)

print_email = eml_script.print_email

FIXTURES = os.path.join(os.path.dirname(__file__), 'fixtures')


class TestPlainTextStdout:
    def test_metadata_and_body_printed(self, tmp_path, capsys):
        eml_src = os.path.join(FIXTURES, 'plain-text.eml')
        working_eml = tmp_path / "message.eml"
        shutil.copy2(eml_src, working_eml)

        print_email(str(working_eml))
        captured = capsys.readouterr()

        assert "From: Jonathan Smith <jsmith@example.com>" in captured.out
        assert "To: Craig Jennings <craig@example.com>" in captured.out
        assert "Subject: Re: Fw: 4319 Danneel Street" in captured.out
        assert "Date:" in captured.out
        assert "Sent:" in captured.out
        assert "Received:" in captured.out
        assert "4319 Danneel Street" in captured.out


class TestHtmlFallbackStdout:
    def test_html_converted_on_stdout(self, tmp_path, capsys):
        eml_src = os.path.join(FIXTURES, 'html-only.eml')
        working_eml = tmp_path / "message.eml"
        shutil.copy2(eml_src, working_eml)

        print_email(str(working_eml))
        captured = capsys.readouterr()

        # Should see converted text, not raw HTML
        assert "HTML" in captured.out
        assert "<p>" not in captured.out


class TestAttachmentsStdout:
    def test_attachment_extracted_alongside_eml(self, tmp_path, capsys):
        eml_src = os.path.join(FIXTURES, 'with-attachment.eml')
        working_eml = tmp_path / "message.eml"
        shutil.copy2(eml_src, working_eml)

        print_email(str(working_eml))
        captured = capsys.readouterr()

        assert "Extracted attachment:" in captured.out
        assert "Ltr Carrollton.pdf" in captured.out

        # File should exist alongside the EML
        extracted = tmp_path / "Ltr Carrollton.pdf"
        assert extracted.exists()