Merge branch 'dev' into fix-7807

This commit is contained in:
Trenton H
2024-10-01 08:39:15 -07:00
committed by GitHub
29 changed files with 429 additions and 143 deletions

View File

@@ -8,7 +8,7 @@ class TestMigrateWorkflow(TestMigrations):
dependencies = (
(
"paperless_mail",
"0025_alter_mailaccount_owner_alter_mailrule_owner_and_more",
"0026_mailrule_enabled",
),
)

View File

@@ -53,7 +53,7 @@ class MailRuleAdmin(GuardedModelAdmin):
}
fieldsets = (
(None, {"fields": ("name", "order", "account", "folder")}),
(None, {"fields": ("name", "order", "account", "enabled", "folder")}),
(
_("Filter"),
{

View File

@@ -544,6 +544,9 @@ class MailAccountHandler(LoggingMixin):
)
for rule in account.rules.order_by("order"):
if not rule.enabled:
self.log.debug(f"Rule {rule}: Skipping disabled rule")
continue
try:
total_processed_files += self._handle_mail_rule(
M,

View File

@@ -0,0 +1,21 @@
# Generated by Django 5.1.1 on 2024-09-30 15:17
from django.db import migrations
from django.db import models
class Migration(migrations.Migration):
dependencies = [
(
"paperless_mail",
"0025_alter_mailaccount_owner_alter_mailrule_owner_and_more",
),
]
operations = [
migrations.AddField(
model_name="mailrule",
name="enabled",
field=models.BooleanField(default=True, verbose_name="enabled"),
),
]

View File

@@ -115,6 +115,8 @@ class MailRule(document_models.ModelWithOwner):
verbose_name=_("account"),
)
enabled = models.BooleanField(_("enabled"), default=True)
folder = models.CharField(
_("folder"),
default="INBOX",

View File

@@ -74,6 +74,7 @@ class MailRuleSerializer(OwnedObjectSerializer):
"id",
"name",
"account",
"enabled",
"folder",
"filter_from",
"filter_to",

View File

@@ -1388,6 +1388,41 @@ class TestMail(
self.assertEqual(len(self.mailMocker.bogus_mailbox.fetch("UNSEEN", False)), 0)
self.assertEqual(len(self.mailMocker.bogus_mailbox.messages), 3)
def test_disabled_rule(self):
"""
GIVEN:
- Mail rule is disabled
WHEN:
- Mail account is handled
THEN:
- Should not process any messages
"""
account = MailAccount.objects.create(
name="test",
imap_server="",
username="admin",
password="secret",
)
MailRule.objects.create(
name="testrule",
account=account,
action=MailRule.MailAction.MARK_READ,
enabled=False,
)
self.mail_account_handler.handle_mail_account(account)
self.mailMocker.apply_mail_actions()
self.assertEqual(len(self.mailMocker.bogus_mailbox.messages), 3)
self.assertEqual(len(self.mailMocker.bogus_mailbox.fetch("UNSEEN", False)), 2)
self.mail_account_handler.handle_mail_account(account)
self.mailMocker.apply_mail_actions()
self.assertEqual(
len(self.mailMocker.bogus_mailbox.fetch("UNSEEN", False)),
2,
) # still 2
class TestManagementCommand(TestCase):
@mock.patch(

View File

@@ -497,6 +497,7 @@ class TestParser:
assert mail_parser.archive_path is not None
@pytest.mark.httpx_mock(can_send_already_matched_responses=True)
def test_generate_pdf_html_email(
self,
httpx_mock: HTTPXMock,
@@ -575,6 +576,7 @@ class TestParser:
with pytest.raises(ParseError):
mail_parser.parse(html_email_file, "message/rfc822")
@pytest.mark.httpx_mock(can_send_already_matched_responses=True)
def test_generate_pdf_html_email_merge_failure(
self,
httpx_mock: HTTPXMock,

View File

@@ -5,7 +5,6 @@ from pathlib import Path
import pytest
from httpx import codes
from httpx._multipart import DataField
from pytest_django.fixtures import SettingsWrapper
from pytest_httpx import HTTPXMock
@@ -128,11 +127,22 @@ class TestTikaParser:
tika_parser.convert_to_pdf(sample_odt_file, None)
request = httpx_mock.get_request()
found = False
for field in request.stream.fields:
if isinstance(field, DataField) and field.name == "pdfa":
assert field.value == expected_form_value
found = True
assert found, "pdfFormat was not found"
httpx_mock.reset(assert_all_responses_were_requested=False)
expected_field_name = "pdfa"
content_type = request.headers["Content-Type"]
assert "multipart/form-data" in content_type
boundary = content_type.split("boundary=")[1]
parts = request.content.split(f"--{boundary}".encode())
form_field_found = any(
f'name="{expected_field_name}"'.encode() in part
and expected_form_value.encode() in part
for part in parts
)
assert form_field_found
httpx_mock.reset()