diff --git a/modoboa/admin/tests/test_account.py b/modoboa/admin/tests/test_account.py index b5010e9a3..f5df49a44 100644 --- a/modoboa/admin/tests/test_account.py +++ b/modoboa/admin/tests/test_account.py @@ -74,7 +74,7 @@ class AccountTestCase(ModoTestCase): values.update({ "username": "pouet@test.com", "language": "en", "secondary_email": "homer@simpson.com", - "phone_number": "123456789" + "phone_number": "+33612345678" }) self.ajax_post( reverse("admin:account_change", args=[account.id]), values diff --git a/modoboa/admin/tests/test_api.py b/modoboa/admin/tests/test_api.py index 0baf0be38..e68b11f63 100644 --- a/modoboa/admin/tests/test_api.py +++ b/modoboa/admin/tests/test_api.py @@ -563,6 +563,38 @@ class AccountAPITestCase(ModoAPITestCase): account.refresh_from_db() self.assertTrue(account.check_password("Toto1234")) + @mock.patch("ovh.Client.get") + @mock.patch("ovh.Client.post") + def test_reset_password(self, client_post, client_get): + url = reverse("api:account-reset-password") + # SMS password recovery not enabled + response = self.client.post(url) + self.assertEqual(response.status_code, 404) + + self.set_global_parameters({ + "sms_password_recovery": True, + "sms_provider": "ovh", + "sms_ovh_application_key": "key", + "sms_ovh_application_secret": "secret", + "sms_ovh_consumer_key": "consumer" + }, app="core") + # No email provided + response = self.client.post(url) + self.assertEqual(response.status_code, 400) + + account = core_models.User.objects.get(username="user@test.com") + data = {"email": account.email} + # No phone number + response = self.client.post(url, data, format="json") + self.assertEqual(response.status_code, 404) + + account.phone_number = "+33612345678" + account.save() + response = self.client.post(url, data, format="json") + client_get.return_value = ["service"] + client_post.return_value = {"totalCreditsRemoved": 1} + self.assertEqual(response.status_code, 200) + class AliasAPITestCase(ModoAPITestCase): """Check Alias API.""" diff --git a/modoboa/core/tests/test_authentication.py b/modoboa/core/tests/test_authentication.py index e16f800a1..0816e099c 100644 --- a/modoboa/core/tests/test_authentication.py +++ b/modoboa/core/tests/test_authentication.py @@ -221,9 +221,10 @@ class PasswordResetTestCase(ModoTestCase): "We've emailed you instructions for setting your password") self.assertEqual(len(mail.outbox), 0) + @mock.patch("oath.accept_totp") @mock.patch("ovh.Client.get") @mock.patch("ovh.Client.post") - def test_reset_password_sms(self, client_post, client_get): + def test_reset_password_sms(self, client_post, client_get, accept_totp): """Test reset password by SMS.""" client_get.return_value = ["service"] client_post.return_value = {"totalCreditsRemoved": 1} @@ -241,6 +242,15 @@ class PasswordResetTestCase(ModoTestCase): self.assertEqual(response.status_code, 302) self.assertEqual(response.url, reverse("password_reset_confirm_code")) + data = {"code": "123456"} + url = reverse("password_reset_confirm_code") + accept_totp.return_value = (False, "") + response = self.client.post(url, data) + self.assertEqual(response.status_code, 200) + accept_totp.return_value = (True, "") + response = self.client.post(url, data) + self.assertEqual(response.status_code, 302) + @skipIf(NO_SMTP, "No SMTP server available") @override_settings(AUTHENTICATION_BACKENDS=( diff --git a/modoboa/core/tests/test_core.py b/modoboa/core/tests/test_core.py index f2c5f5d9f..5585d2644 100644 --- a/modoboa/core/tests/test_core.py +++ b/modoboa/core/tests/test_core.py @@ -112,7 +112,7 @@ class ProfileTestCase(ModoTestCase): """Update profile without password.""" data = { "first_name": "Homer", "last_name": "Simpson", - "phone_number": "123445", "language": "en" + "phone_number": "+33612345678", "language": "en" } self.ajax_post(reverse("core:user_profile"), data) admin = models.User.objects.get(username="admin")