aboutsummaryrefslogtreecommitdiff
path: root/test/test_related.py
blob: 349edc0c15b1b63b45ff0bdff120c1f392a66ddc (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
from email.message import EmailMessage
from email.parser import BytesParser
from glob import glob
import email.policy
import os
import os.path
from datetime import datetime, timezone, timedelta
from typing import cast
import sqlite3
from tempfile import TemporaryDirectory
from mu4web.tree import (
    parse_msg_ids,
    setup_relation_data,
    Tree,
    TreeEntry,
    fetch_relation_tree
)


def test_parse_msg_ids() -> None:
    assert parse_msg_ids("<id1>, <id2>") == ["id1", "id2"]


parser = BytesParser(policy=email.policy.default)


def test_relation_data(tmpdir: TemporaryDirectory[str], maildir: str) -> None:
    db = os.path.join(tmpdir.name, 'mail.db')
    setup_relation_data(db, maildir)

    con = sqlite3.connect(db)
    cur = con.cursor()

    CEST = timezone(timedelta(seconds=7200))

    tree1 = Tree(data=TreeEntry(entry='ZM2CNjF0jRjd1H4x@lysator.liu.se',
                                ref='',
                                subject='Initial email',
                                from_='Hugo <hugo@example.com>',
                                date=datetime(2023, 8, 5, 0, 56, 54, tzinfo=CEST)),
                 children=[Tree(data=TreeEntry(entry='ZM2CTjoCe8dwaoAg@lysator.liu.se',
                                               ref='ZM2CNjF0jRjd1H4x@lysator.liu.se',
                                               subject='Re: Initial email',
                                               from_='Hugo <hugo@example.com>',
                                               date=datetime(2023, 8, 5, 0, 57, 18, tzinfo=CEST)))
                           ])
    tree2 = Tree(data=TreeEntry(entry='ZM9pUTtYOHiPevlg@lysator.liu.se',
                                ref='',
                                subject='FWD: Initial email',
                                from_='Hugo <hugo@example.com>',
                                date=datetime(2023, 8, 6, 11, 35, 13, tzinfo=CEST)))

    data = {
        '1691189956.3013485_5.gandalf:2,RS': tree1,
        '1691189958.3013485_7.gandalf:2,S': tree1,
        '1691314589.3192599_3.gandalf:2,S': tree2,
    }

    msg: EmailMessage

    # os.system(f"cp {os.path.join(tmpdir.name, 'mail.db')} /tmp/mail.db")

    for mailfile in glob(os.path.join(maildir, 'cur', '*')):
        with open(mailfile, 'rb') as f:
            msg = cast(EmailMessage, parser.parse(f))

        assert fetch_relation_tree(cur, msg) == data[os.path.basename(mailfile)]