Fixes the matching of attachment files names to patterns

This commit is contained in:
Trenton Holmes 2022-04-08 13:42:42 -07:00
parent d4153607c9
commit 8f18b7fd6c
2 changed files with 18 additions and 10 deletions

View File

@ -253,7 +253,7 @@ class MailAccountHandler(LoggingMixin):
return total_processed_files return total_processed_files
def handle_message(self, message, rule): def handle_message(self, message, rule) -> int:
if not message.attachments: if not message.attachments:
return 0 return 0
@ -285,7 +285,12 @@ class MailAccountHandler(LoggingMixin):
continue continue
if rule.filter_attachment_filename: if rule.filter_attachment_filename:
if not fnmatch(att.filename, rule.filter_attachment_filename): # Force the filename and pattern to the lowercase
# as this is system dependent otherwise
if not fnmatch(
att.filename.lower(),
rule.filter_attachment_filename.lower(),
):
continue continue
title = self.get_title(message, att, rule) title = self.get_title(message, att, rule)

View File

@ -409,18 +409,21 @@ class TestMail(DirectoriesMixin, TestCase):
_AttachmentDef(filename="f2.pdf"), _AttachmentDef(filename="f2.pdf"),
_AttachmentDef(filename="f3.pdf"), _AttachmentDef(filename="f3.pdf"),
_AttachmentDef(filename="f2.png"), _AttachmentDef(filename="f2.png"),
_AttachmentDef(filename="file.PDf"),
_AttachmentDef(filename="f1.Pdf"),
], ],
) )
tests = [ tests = [
("*.pdf", ["f1.pdf", "f2.pdf", "f3.pdf"]), ("*.pdf", ["f1.pdf", "f1.Pdf", "f2.pdf", "f3.pdf", "file.PDf"]),
("f1.pdf", ["f1.pdf"]), ("f1.pdf", ["f1.pdf", "f1.Pdf"]),
("f1", []), ("f1", []),
("*", ["f1.pdf", "f2.pdf", "f3.pdf", "f2.png"]), ("*", ["f1.pdf", "f2.pdf", "f3.pdf", "f2.png", "f1.Pdf", "file.PDf"]),
("*.png", ["f2.png"]), ("*.png", ["f2.png"]),
] ]
for (pattern, matches) in tests: for (pattern, matches) in tests:
matches.sort()
self.async_task.reset_mock() self.async_task.reset_mock()
account = MailAccount() account = MailAccount()
rule = MailRule( rule = MailRule(
@ -431,11 +434,11 @@ class TestMail(DirectoriesMixin, TestCase):
result = self.mail_account_handler.handle_message(message, rule) result = self.mail_account_handler.handle_message(message, rule)
self.assertEqual(result, len(matches)) self.assertEqual(result, len(matches), f"Error with pattern: {pattern}")
filenames = [ filenames = sorted(
a[1]["override_filename"] for a in self.async_task.call_args_list [a[1]["override_filename"] for a in self.async_task.call_args_list],
] )
self.assertCountEqual(filenames, matches) self.assertListEqual(filenames, matches)
def test_handle_mail_account_mark_read(self): def test_handle_mail_account_mark_read(self):