From d091906315118beae5efbb8b4ed43ed4cbbfa68b Mon Sep 17 00:00:00 2001 From: stumpylog <797416+stumpylog@users.noreply.github.com> Date: Thu, 29 Oct 2026 14:55:25 -0700 Subject: [PATCH] Fix: match Apple Mail tag colors case-insensitively --- src/paperless_mail/mail.py | 4 ++-- src/paperless_mail/tests/test_mail.py | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index fb8568e8f..f5f3ffeef 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -169,9 +169,9 @@ class TagMailAction(BaseMailAction): # The custom tag should look like "apple:" if "apple:" in parameter.lower(): _, self.color = parameter.split(":") - self.color = self.color.strip() + self.color = self.color.strip().lower() - if self.color.lower() not in APPLE_MAIL_TAG_COLORS: + if self.color not in APPLE_MAIL_TAG_COLORS: raise MailError("Not a valid AppleMail tag color.") self.keyword = None diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 56c2da467..366fe0e64 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -23,6 +23,7 @@ from rest_framework.test import APITestCase from documents.models import Correspondent from documents.models import MatchingModel from paperless_mail import tasks +from paperless_mail.mail import APPLE_MAIL_TAG_COLORS from paperless_mail.mail import MailAccountHandler from paperless_mail.mail import MailError from paperless_mail.mail import TagMailAction @@ -1873,6 +1874,32 @@ class TestErrorCallback: assert processed_mails.get().owner == owner +class TestTagMailActionColor: + @pytest.mark.parametrize( + "parameter", + ["apple:green", "apple:Green", "APPLE: GREEN "], + ) + def test_color_case_is_ignored(self, parameter: str) -> None: + """ + GIVEN: + - An Apple Mail tag parameter in any letter case + WHEN: + - The action tags a message + THEN: + - The lowercase color's flag bits are set on the message + """ + action = TagMailAction(parameter, supports_gmail_labels=False) + mailbox = mock.Mock() + + action.post_consume(mailbox, "1", parameter) + + assert mailbox.flag.call_args_list[1] == mock.call( + "1", + APPLE_MAIL_TAG_COLORS["green"], + value=True, + ) + + class TestManagementCommand(TestCase): @mock.patch( "paperless_mail.management.commands.mail_fetcher.tasks.process_mail_accounts",