diff options
Diffstat (limited to 'test/test_related.py')
-rw-r--r-- | test/test_related.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/test/test_related.py b/test/test_related.py new file mode 100644 index 0000000..349edc0 --- /dev/null +++ b/test/test_related.py @@ -0,0 +1,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)] |