diff --git a/src/paperless_mail/tests/test_mail.py b/src/paperless_mail/tests/test_mail.py index 429008575..c2838f8f4 100644 --- a/src/paperless_mail/tests/test_mail.py +++ b/src/paperless_mail/tests/test_mail.py @@ -1669,3 +1669,40 @@ class TestMailAccountTestView(APITestCase): } self.client.post(self.url, data, format="json") self.assertEqual(mock_post.call_args[1]["url"], GMAIL_OAUTH_ENDPOINT_TOKEN) + + @mock.patch("httpx.post") + def test_mail_account_test_view_refresh_token_fails( + self, + mock_post, + ): + existing_account = MailAccount.objects.create( + imap_server="imap.example.com", + imap_port=993, + imap_security=MailAccount.ImapSecurity.SSL, + username="admin", + password="secret", + account_type=MailAccount.MailAccountType.GMAIL_OAUTH, + refresh_token="oldtoken", + expiration=timezone.now() - timedelta(days=1), + is_token=True, + ) + + mock_post.return_value.status_code = status.HTTP_400_BAD_REQUEST + mock_post.return_value.json.return_value = { + "error": "invalid_grant", + } + data = { + "id": existing_account.id, + "imap_server": "imap.example.com", + "imap_port": 993, + "imap_security": MailAccount.ImapSecurity.SSL, + "username": "admin", + "password": "****", + "is_token": True, + } + with self.assertLogs("paperless_mail", level="ERROR") as cm: + response = self.client.post(self.url, data, format="json") + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + error_str = cm.output[0] + expected_str = "Failed to refresh oauth token for account" + self.assertIn(expected_str, error_str) diff --git a/src/paperless_mail/views.py b/src/paperless_mail/views.py index fa9c2c87b..d7f10eccc 100644 --- a/src/paperless_mail/views.py +++ b/src/paperless_mail/views.py @@ -92,9 +92,9 @@ class MailAccountTestView(GenericAPIView): mailbox_login(M, account) return Response({"success": True}) - except MailError: + except MailError as e: logger.error( - f"Mail account {account} test failed", + f"Mail account {account} test failed: {e}", ) return HttpResponseBadRequest("Unable to connect to server")