]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Adds testing for test mail account 2949/head
authorshamoon <4887959+shamoon@users.noreply.github.com>
Fri, 24 Mar 2023 17:39:35 +0000 (10:39 -0700)
committershamoon <4887959+shamoon@users.noreply.github.com>
Fri, 24 Mar 2023 22:14:02 +0000 (15:14 -0700)
src/paperless_mail/tests/test_api.py

index e52838809737a70ddddaa80d0df4c1aa65d99526..64b6519704d53863bbf354a3ba9405f424658f9e 100644 (file)
@@ -1,3 +1,6 @@
+import json
+from unittest import mock
+
 from django.contrib.auth.models import User
 from documents.models import Correspondent
 from documents.models import DocumentType
@@ -5,6 +8,7 @@ from documents.models import Tag
 from documents.tests.utils import DirectoriesMixin
 from paperless_mail.models import MailAccount
 from paperless_mail.models import MailRule
+from paperless_mail.tests.test_mail import BogusMailBox
 from rest_framework import status
 from rest_framework.test import APITestCase
 
@@ -13,6 +17,13 @@ class TestAPIMailAccounts(DirectoriesMixin, APITestCase):
     ENDPOINT = "/api/mail_accounts/"
 
     def setUp(self):
+        self.bogus_mailbox = BogusMailBox()
+
+        patcher = mock.patch("paperless_mail.mail.MailBox")
+        m = patcher.start()
+        m.return_value = self.bogus_mailbox
+        self.addCleanup(patcher.stop)
+
         super().setUp()
 
         self.user = User.objects.create_superuser(username="temp_admin")
@@ -166,6 +177,94 @@ class TestAPIMailAccounts(DirectoriesMixin, APITestCase):
         self.assertEqual(returned_account2.name, "Updated Name 2")
         self.assertEqual(returned_account2.password, "123xyz")
 
+    def test_mail_account_test_fail(self):
+        """
+        GIVEN:
+            - Errnoeous mail account details
+        WHEN:
+            - API call is made to test account
+        THEN:
+            - API returns 400 bad request
+        """
+
+        response = self.client.post(
+            f"{self.ENDPOINT}test/",
+            json.dumps(
+                {
+                    "imap_server": "server.example.com",
+                    "imap_port": 443,
+                    "imap_security": MailAccount.ImapSecurity.SSL,
+                    "username": "admin",
+                    "password": "notcorrect",
+                },
+            ),
+            content_type="application/json",
+        )
+
+        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+    def test_mail_account_test_success(self):
+        """
+        GIVEN:
+            - Working mail account details
+        WHEN:
+            - API call is made to test account
+        THEN:
+            - API returns success
+        """
+
+        response = self.client.post(
+            f"{self.ENDPOINT}test/",
+            json.dumps(
+                {
+                    "imap_server": "server.example.com",
+                    "imap_port": 443,
+                    "imap_security": MailAccount.ImapSecurity.SSL,
+                    "username": "admin",
+                    "password": "secret",
+                },
+            ),
+            content_type="application/json",
+        )
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        self.assertEqual(response.data["success"], True)
+
+    def test_mail_account_test_existing(self):
+        """
+        GIVEN:
+            - Testing server details for an existing account with obfuscated password (***)
+        WHEN:
+            - API call is made to test account
+        THEN:
+            - API returns success
+        """
+        account = MailAccount.objects.create(
+            name="Email1",
+            username="admin",
+            password="secret",
+            imap_server="server.example.com",
+            imap_port=443,
+            imap_security=MailAccount.ImapSecurity.SSL,
+            character_set="UTF-8",
+        )
+
+        response = self.client.post(
+            f"{self.ENDPOINT}test/",
+            json.dumps(
+                {
+                    "id": account.pk,
+                    "imap_server": "server.example.com",
+                    "imap_port": 443,
+                    "imap_security": MailAccount.ImapSecurity.SSL,
+                    "username": "admin",
+                    "password": "******",
+                },
+            ),
+            content_type="application/json",
+        )
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+        self.assertEqual(response.data["success"], True)
+
 
 class TestAPIMailRules(DirectoriesMixin, APITestCase):
     ENDPOINT = "/api/mail_rules/"