mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 19:17:13 -05:00 
			
		
		
		
	Fix: only check workflow trigger source if not empty (#5701)
This commit is contained in:
		
							parent
							
								
									6587470033
								
							
						
					
					
						commit
						4855f4b8b1
					
				@ -258,7 +258,9 @@ def consumable_document_matches_workflow(
 | 
				
			|||||||
    reason = ""
 | 
					    reason = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Document source vs trigger source
 | 
					    # Document source vs trigger source
 | 
				
			||||||
    if document.source not in [int(x) for x in list(trigger.sources)]:
 | 
					    if len(trigger.sources) > 0 and document.source not in [
 | 
				
			||||||
 | 
					        int(x) for x in list(trigger.sources)
 | 
				
			||||||
 | 
					    ]:
 | 
				
			||||||
        reason = (
 | 
					        reason = (
 | 
				
			||||||
            f"Document source {document.source.name} not in"
 | 
					            f"Document source {document.source.name} not in"
 | 
				
			||||||
            f" {[DocumentSource(int(x)).name for x in trigger.sources]}",
 | 
					            f" {[DocumentSource(int(x)).name for x in trigger.sources]}",
 | 
				
			||||||
 | 
				
			|||||||
@ -1410,9 +1410,6 @@ class WorkflowTriggerSerializer(serializers.ModelSerializer):
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def validate(self, attrs):
 | 
					    def validate(self, attrs):
 | 
				
			||||||
        if ("filter_mailrule") in attrs and attrs["filter_mailrule"] is not None:
 | 
					 | 
				
			||||||
            attrs["sources"] = {DocumentSource.MailFetch.value}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Empty strings treated as None to avoid unexpected behavior
 | 
					        # Empty strings treated as None to avoid unexpected behavior
 | 
				
			||||||
        if (
 | 
					        if (
 | 
				
			||||||
            "filter_filename" in attrs
 | 
					            "filter_filename" in attrs
 | 
				
			||||||
 | 
				
			|||||||
@ -15,8 +15,6 @@ from documents.models import Workflow
 | 
				
			|||||||
from documents.models import WorkflowAction
 | 
					from documents.models import WorkflowAction
 | 
				
			||||||
from documents.models import WorkflowTrigger
 | 
					from documents.models import WorkflowTrigger
 | 
				
			||||||
from documents.tests.utils import DirectoriesMixin
 | 
					from documents.tests.utils import DirectoriesMixin
 | 
				
			||||||
from paperless_mail.models import MailAccount
 | 
					 | 
				
			||||||
from paperless_mail.models import MailRule
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestApiWorkflows(DirectoriesMixin, APITestCase):
 | 
					class TestApiWorkflows(DirectoriesMixin, APITestCase):
 | 
				
			||||||
@ -344,56 +342,6 @@ class TestApiWorkflows(DirectoriesMixin, APITestCase):
 | 
				
			|||||||
        self.assertEqual(trigger2.filter_path, "*/test/*")
 | 
					        self.assertEqual(trigger2.filter_path, "*/test/*")
 | 
				
			||||||
        self.assertIsNone(trigger2.filter_filename)
 | 
					        self.assertIsNone(trigger2.filter_filename)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_api_create_workflow_trigger_with_mailrule(self):
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        GIVEN:
 | 
					 | 
				
			||||||
            - API request to create a workflow trigger with a mail rule but no MailFetch source
 | 
					 | 
				
			||||||
        WHEN:
 | 
					 | 
				
			||||||
            - API is called
 | 
					 | 
				
			||||||
        THEN:
 | 
					 | 
				
			||||||
            - New trigger is created with MailFetch as source
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        account1 = MailAccount.objects.create(
 | 
					 | 
				
			||||||
            name="Email1",
 | 
					 | 
				
			||||||
            username="username1",
 | 
					 | 
				
			||||||
            password="password1",
 | 
					 | 
				
			||||||
            imap_server="server.example.com",
 | 
					 | 
				
			||||||
            imap_port=443,
 | 
					 | 
				
			||||||
            imap_security=MailAccount.ImapSecurity.SSL,
 | 
					 | 
				
			||||||
            character_set="UTF-8",
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        rule1 = MailRule.objects.create(
 | 
					 | 
				
			||||||
            name="Rule1",
 | 
					 | 
				
			||||||
            account=account1,
 | 
					 | 
				
			||||||
            folder="INBOX",
 | 
					 | 
				
			||||||
            filter_from="from@example.com",
 | 
					 | 
				
			||||||
            filter_to="someone@somewhere.com",
 | 
					 | 
				
			||||||
            filter_subject="subject",
 | 
					 | 
				
			||||||
            filter_body="body",
 | 
					 | 
				
			||||||
            filter_attachment_filename_include="file.pdf",
 | 
					 | 
				
			||||||
            maximum_age=30,
 | 
					 | 
				
			||||||
            action=MailRule.MailAction.MARK_READ,
 | 
					 | 
				
			||||||
            assign_title_from=MailRule.TitleSource.FROM_SUBJECT,
 | 
					 | 
				
			||||||
            assign_correspondent_from=MailRule.CorrespondentSource.FROM_NOTHING,
 | 
					 | 
				
			||||||
            order=0,
 | 
					 | 
				
			||||||
            attachment_type=MailRule.AttachmentProcessing.ATTACHMENTS_ONLY,
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        response = self.client.post(
 | 
					 | 
				
			||||||
            self.ENDPOINT_TRIGGERS,
 | 
					 | 
				
			||||||
            json.dumps(
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "type": WorkflowTrigger.WorkflowTriggerType.CONSUMPTION,
 | 
					 | 
				
			||||||
                    "sources": [DocumentSource.ApiUpload],
 | 
					 | 
				
			||||||
                    "filter_mailrule": rule1.pk,
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
            ),
 | 
					 | 
				
			||||||
            content_type="application/json",
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
 | 
					 | 
				
			||||||
        self.assertEqual(WorkflowTrigger.objects.count(), 2)
 | 
					 | 
				
			||||||
        trigger = WorkflowTrigger.objects.get(id=response.data["id"])
 | 
					 | 
				
			||||||
        self.assertEqual(trigger.sources, [int(DocumentSource.MailFetch).__str__()])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def test_api_update_workflow_nested_triggers_actions(self):
 | 
					    def test_api_update_workflow_nested_triggers_actions(self):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        GIVEN:
 | 
					        GIVEN:
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user