from __future__ import annotations import unittest from govoplan_mail.backend.sending.imap import ( _detect_sent_folder, _extract_mailbox_name, _paged_descending_sequences, _parse_fetch_sequence, _sequence_set, ) class ImapFolderParserTests(unittest.TestCase): def test_extracts_quoted_mailbox_after_quoted_delimiter(self): self.assertEqual( _extract_mailbox_name(b'(\\HasNoChildren \\Sent) "/" "Sent Items"'), ("Sent Items", {"\\hasnochildren", "\\sent"}), ) def test_extracts_atom_mailbox(self): self.assertEqual( _extract_mailbox_name('(\\HasNoChildren) "/" INBOX'), ("INBOX", {"\\hasnochildren"}), ) def test_extracts_nil_delimiter_mailbox(self): self.assertEqual( _extract_mailbox_name('(\\HasNoChildren) NIL "INBOX.Sent"'), ("INBOX.Sent", {"\\hasnochildren"}), ) def test_detects_sent_by_flag_before_name(self): self.assertEqual( _detect_sent_folder([("Archive", {"\\sent"}), ("Sent", set())]), "Archive", ) def test_detects_common_sent_name(self): self.assertEqual( _detect_sent_folder([("INBOX", set()), ("Gesendet", set())]), "Gesendet", ) class ImapMessagePaginationTests(unittest.TestCase): def test_paginates_sequence_numbers_newest_first(self): self.assertEqual( _paged_descending_sequences(120, offset=0, limit=5), ["120", "119", "118", "117", "116"], ) self.assertEqual(_paged_descending_sequences(120, offset=118, limit=5), ["2", "1"]) self.assertEqual(_paged_descending_sequences(120, offset=120, limit=5), []) def test_compacts_contiguous_sequence_sets(self): self.assertEqual(_sequence_set(["5", "4", "3"]), "3:5") self.assertEqual(_sequence_set(["9", "7", "5"]), "5,7,9") def test_extracts_fetch_sequence_number(self): self.assertEqual( _parse_fetch_sequence("42 (UID 123 FLAGS (\\Seen) RFC822.SIZE 100)"), "42", ) self.assertIsNone(_parse_fetch_sequence("UID 123 FLAGS ()")) if __name__ == "__main__": unittest.main()