diff --git a/modoboa/admin/tests/test_api.py b/modoboa/admin/tests/test_api.py index a5205742a..c32260ead 100644 --- a/modoboa/admin/tests/test_api.py +++ b/modoboa/admin/tests/test_api.py @@ -8,7 +8,6 @@ import copy import json import dns.resolver -from mock import patch from django.test import override_settings from django.urls import reverse @@ -21,6 +20,13 @@ from modoboa.lib.tests import ModoAPITestCase from . import utils from .. import factories, models +try: + # mock is part of the Python (>= 3.3) standard library + from unittest import mock +except ImportError: + # fall back to the mock backport + import mock + class DomainAPITestCase(ModoAPITestCase): """Check API.""" @@ -71,8 +77,8 @@ class DomainAPITestCase(ModoAPITestCase): url, {"name": "test4.com", "default_mailbox_quota": 10}) self.assertEqual(response.status_code, 403) - @patch.object(dns.resolver.Resolver, "query") - @patch("socket.getaddrinfo") + @mock.patch.object(dns.resolver.Resolver, "query") + @mock.patch("socket.getaddrinfo") def test_create_domain_with_mx_check(self, mock_getaddrinfo, mock_query): """Check domain creation when MX check is activated.""" self.set_global_parameter("enable_admin_limits", False, app="limits") diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index dc5529698..ad985f323 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -9,7 +9,6 @@ import shutil import tempfile import dns.resolver -from mock import patch from testfixtures import compare from django.core.management import call_command @@ -24,6 +23,13 @@ from . import utils from .. import factories from ..models import Alias, Domain +try: + # mock is part of the Python (>= 3.3) standard library + from unittest import mock +except ImportError: + # fall back to the mock backport + import mock + class DomainTestCase(ModoTestCase): """Test case for Domain.""" @@ -205,8 +211,8 @@ class DomainTestCase(ModoTestCase): self.assertContains(response, "value=\"500\"") self.assertContains(response, "value=\"50\"") - @patch.object(dns.resolver.Resolver, "query") - @patch("socket.getaddrinfo") + @mock.patch.object(dns.resolver.Resolver, "query") + @mock.patch("socket.getaddrinfo") def test_create_and_check_mx(self, mock_getaddrinfo, mock_query): """Check for authorized MX record.""" reseller = core_factories.UserFactory( diff --git a/modoboa/admin/tests/test_import_.py b/modoboa/admin/tests/test_import_.py index 540fede38..148b288a3 100644 --- a/modoboa/admin/tests/test_import_.py +++ b/modoboa/admin/tests/test_import_.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals import dns.resolver -from mock import patch from django.core.files.base import ContentFile from django.urls import reverse @@ -15,6 +14,13 @@ from . import utils from .. import factories from ..models import Alias, Domain, DomainAlias +try: + # mock is part of the Python (>= 3.3) standard library + from unittest import mock +except ImportError: + # fall back to the mock backport + import mock + class ImportTestCase(ModoTestCase): @@ -78,8 +84,8 @@ domainalias; domalias1.com; domain1.com; True response, "Default mailbox quota cannot be greater than domain quota") - @patch.object(dns.resolver.Resolver, "query") - @patch("socket.getaddrinfo") + @mock.patch.object(dns.resolver.Resolver, "query") + @mock.patch("socket.getaddrinfo") def test_domain_import_with_mx_check(self, mock_getaddrinfo, mock_query): """Check domain import when MX check is enabled.""" reseller = core_factories.UserFactory( diff --git a/modoboa/admin/tests/test_mailbox_operations.py b/modoboa/admin/tests/test_mailbox_operations.py index d2ee501cc..6e598bb57 100644 --- a/modoboa/admin/tests/test_mailbox_operations.py +++ b/modoboa/admin/tests/test_mailbox_operations.py @@ -8,8 +8,6 @@ import os import shutil import tempfile -import mock - from django.core.management import call_command from django.test import override_settings from django.urls import reverse @@ -17,6 +15,13 @@ from django.urls import reverse from modoboa.lib.tests import ModoTestCase from .. import factories, models +try: + # mock is part of the Python (>= 3.3) standard library + from unittest import mock +except ImportError: + # fall back to the mock backport + import mock + @override_settings( DOVECOT_LOOKUP_PATH=["{}/dovecot".format(os.path.dirname(__file__))]) diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index 276afd990..fea42ee53 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -5,7 +5,6 @@ from __future__ import unicode_literals import dns.resolver -from mock import patch from testfixtures import LogCapture from django.core import mail, management @@ -19,6 +18,13 @@ from . import utils from .. import factories, models from ..lib import get_domain_mx_list +try: + # mock is part of the Python (>= 3.3) standard library + from unittest import mock +except ImportError: + # fall back to the mock backport + import mock + class MXTestCase(ModoTestCase): """TestCase for DNSBL related features.""" @@ -49,9 +55,9 @@ class MXTestCase(ModoTestCase): cls.localconfig.save() models.MXRecord.objects.all().delete() - @patch("gevent.socket.gethostbyname") - @patch("socket.getaddrinfo") - @patch.object(dns.resolver.Resolver, "query") + @mock.patch("gevent.socket.gethostbyname") + @mock.patch("socket.getaddrinfo") + @mock.patch.object(dns.resolver.Resolver, "query") def test_management_command( self, mock_query, mock_getaddrinfo, mock_g_gethostbyname): """Check that command works fine.""" @@ -77,9 +83,9 @@ class MXTestCase(ModoTestCase): qs = models.MXRecord.objects.filter(domain=self.domain) self.assertEqual(id_, qs[0].id) - @patch("gevent.socket.gethostbyname") - @patch("socket.getaddrinfo") - @patch.object(dns.resolver.Resolver, "query") + @mock.patch("gevent.socket.gethostbyname") + @mock.patch("socket.getaddrinfo") + @mock.patch.object(dns.resolver.Resolver, "query") def test_single_domain_update( self, mock_query, mock_getaddrinfo, mock_g_gethostbyname): """Update only one domain.""" @@ -102,8 +108,8 @@ class MXTestCase(ModoTestCase): management.call_command( "modo", "check_mx", "--domain", "toto.com") - @patch("socket.getaddrinfo") - @patch.object(dns.resolver.Resolver, "query") + @mock.patch("socket.getaddrinfo") + @mock.patch.object(dns.resolver.Resolver, "query") def test_get_domain_mx_list_logging(self, mock_query, mock_getaddrinfo): mock_query.side_effect = utils.mock_dns_query_result mock_getaddrinfo.side_effect = utils.mock_ip_query_result @@ -149,9 +155,9 @@ class DNSBLTestCase(ModoTestCase): name="modoboa.com", enable_dns_checks=False) models.DNSBLResult.objects.all().delete() - @patch("gevent.socket.gethostbyname") - @patch("socket.getaddrinfo") - @patch.object(dns.resolver.Resolver, "query") + @mock.patch("gevent.socket.gethostbyname") + @mock.patch("socket.getaddrinfo") + @mock.patch.object(dns.resolver.Resolver, "query") def test_management_command( self, mock_query, mock_getaddrinfo, mock_g_gethostbyname): """Check that command works fine.""" @@ -170,9 +176,9 @@ class DNSBLTestCase(ModoTestCase): self.assertFalse(self.domain.uses_a_reserved_tld) self.assertTrue(self.domain2.uses_a_reserved_tld) - @patch("gevent.socket.gethostbyname") - @patch("socket.getaddrinfo") - @patch.object(dns.resolver.Resolver, "query") + @mock.patch("gevent.socket.gethostbyname") + @mock.patch("socket.getaddrinfo") + @mock.patch.object(dns.resolver.Resolver, "query") def test_notifications( self, mock_query, mock_getaddrinfo, mock_g_gethostbyname): """Check notifications.""" @@ -186,9 +192,9 @@ class DNSBLTestCase(ModoTestCase): print(message.subject) self.assertEqual(len(mail.outbox), 2) - @patch("gevent.socket.gethostbyname") - @patch("socket.getaddrinfo") - @patch.object(dns.resolver.Resolver, "query") + @mock.patch("gevent.socket.gethostbyname") + @mock.patch("socket.getaddrinfo") + @mock.patch.object(dns.resolver.Resolver, "query") def test_management_command_no_dnsbl( self, mock_query, mock_getaddrinfo, mock_g_gethostbyname): """Check that command works fine without dnsbl.""" diff --git a/modoboa/core/tests/test_authentication.py b/modoboa/core/tests/test_authentication.py index 7d99c4e3f..020f3015b 100644 --- a/modoboa/core/tests/test_authentication.py +++ b/modoboa/core/tests/test_authentication.py @@ -7,8 +7,6 @@ from __future__ import unicode_literals import smtplib from unittest import skipIf -from mock import patch - from django.core import mail from django.test import override_settings from django.urls import reverse @@ -16,6 +14,13 @@ from django.urls import reverse from modoboa.lib.tests import NO_SMTP, ModoTestCase from .. import factories, models +try: + # mock is part of the Python (>= 3.3) standard library + from unittest import mock +except ImportError: + # fall back to the mock backport + import mock + class AuthenticationTestCase(ModoTestCase): """Validate authentication scenarios.""" @@ -123,24 +128,24 @@ class SMTPAuthenticationTestCase(ModoTestCase): self.assertTrue( models.User.objects.filter(username=username).exists()) - @patch("smtplib.SMTP") + @mock.patch("smtplib.SMTP") def test_smtp_authentication(self, mock_smtp): """Check simple SMTP authentication.""" self._test_smtp_authentication(mock_smtp) - @patch("smtplib.SMTP_SSL") + @mock.patch("smtplib.SMTP_SSL") @override_settings(AUTH_SMTP_SECURED_MODE="ssl") def test_smtp_authentication_over_ssl(self, mock_smtp): """Check SMTP authentication over SSL.""" self._test_smtp_authentication(mock_smtp) - @patch("smtplib.SMTP") + @mock.patch("smtplib.SMTP") @override_settings(AUTH_SMTP_SECURED_MODE="starttls") def test_smtp_authentication_over_starttls(self, mock_smtp): """Check SMTP authentication over STARTTLS.""" self._test_smtp_authentication(mock_smtp) - @patch("smtplib.SMTP") + @mock.patch("smtplib.SMTP") def test_smtp_authentication_failure(self, mock_smtp): """Check SMTP authentication failure.""" instance = mock_smtp.return_value diff --git a/test-requirements.txt b/test-requirements.txt index 45bb850f1..80d2ae99c 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,5 +1,5 @@ factory-boy>=2.4 -mock==2.0.0 +mock==2.0.0; python_version < '3.3' httmock==1.2.5 testfixtures==4.7.0 tox