aboutsummaryrefslogtreecommitdiff
path: root/test/test_related.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_related.py')
-rw-r--r--test/test_related.py67
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)]