mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Added unit tests
This commit is contained in:
@@ -201,3 +201,44 @@ class AliasViewSetTestCase(ModoAPITestCase):
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn("address", resp.json())
|
||||
|
||||
|
||||
class UserAccountViewSetTestCase(ModoAPITestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(cls): # NOQA:N802
|
||||
"""Create test data."""
|
||||
super().setUpTestData()
|
||||
factories.populate_database()
|
||||
cls.da = core_models.User.objects.get(username="admin@test.com")
|
||||
cls.da_token = Token.objects.create(user=cls.da)
|
||||
|
||||
def test_forward(self):
|
||||
self.client.credentials(
|
||||
HTTP_AUTHORIZATION="Token " + self.da_token.key)
|
||||
url = reverse("v2:account-forward")
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertNotIn("recipients", resp.json())
|
||||
|
||||
data = {"recipients": "user@domain.ext"}
|
||||
resp = self.client.post(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(self.da.mailbox.aliasrecipient_set.count(), 1)
|
||||
|
||||
data = {"recipients": "user@domain.ext", "keepcopies": True}
|
||||
resp = self.client.post(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
self.assertEqual(
|
||||
models.Alias.objects.filter(address=self.da.username).count(),
|
||||
2
|
||||
)
|
||||
|
||||
data = {"keepcopies": False}
|
||||
resp = self.client.post(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(
|
||||
models.Alias.objects.filter(address=self.da.username).count(),
|
||||
1
|
||||
)
|
||||
|
||||
@@ -260,7 +260,7 @@ class UserAccountViewSet(viewsets.ViewSet):
|
||||
else:
|
||||
# Deactivate internal self-alias to avoid storing
|
||||
# local copies...
|
||||
models.AliasAlias.objects.filter(
|
||||
models.Alias.objects.filter(
|
||||
address=mb.full_address, internal=True
|
||||
).update(enabled=False)
|
||||
alias.set_recipients(recipients)
|
||||
|
||||
@@ -119,6 +119,13 @@ class AccountViewSetTestCase(ModoAPITestCase):
|
||||
me = resp.json()
|
||||
self.assertEqual(me["username"], "admin")
|
||||
|
||||
def test_me_password(self):
|
||||
url = reverse("v2:account-check-me-password")
|
||||
resp = self.client.post(url, {"password": "Toto1234"}, format="json")
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
resp = self.client.post(url, {"password": "password"}, format="json")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
@mock.patch("django_otp.match_token")
|
||||
def test_tfa_verify_code(self, match_mock):
|
||||
user = models.User.objects.get(username="admin")
|
||||
@@ -133,6 +140,43 @@ class AccountViewSetTestCase(ModoAPITestCase):
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn("access", resp.json())
|
||||
|
||||
def test_tfa_setup_get_qr_code(self):
|
||||
url = reverse("v2:account-tfa-setup-get-qr-code")
|
||||
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 404)
|
||||
|
||||
user = models.User.objects.get(username="admin")
|
||||
user.totpdevice_set.create(name="Device")
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(resp.content_type, "application/xml")
|
||||
|
||||
user.tfa_enabled = True
|
||||
user.save()
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 404)
|
||||
|
||||
@mock.patch("django_otp.plugins.otp_totp.models.TOTPDevice.verify_token")
|
||||
def test_tfa_setup_check(self, verify_mock):
|
||||
user = models.User.objects.get(username="admin")
|
||||
user.totpdevice_set.create(name="Device")
|
||||
|
||||
url = reverse("v2:account-tfa-setup-check")
|
||||
data = {"pin_code": 1234}
|
||||
verify_mock.side_effect = [False]
|
||||
resp = self.client.post(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
|
||||
verify_mock.side_effect = [True]
|
||||
resp = self.client.post(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertIn("tokens", resp.json())
|
||||
|
||||
verify_mock.side_effect = [True]
|
||||
resp = self.client.post(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
|
||||
|
||||
class AuthenticationTestCase(ModoAPITestCase):
|
||||
|
||||
@@ -171,3 +215,11 @@ class AuthenticationTestCase(ModoAPITestCase):
|
||||
HTTP_AUTHORIZATION="Bearer {}".format(resp.json()["access"]))
|
||||
resp = self.client.get(me_url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
|
||||
class LanguageViewSetTestCase(ModoAPITestCase):
|
||||
|
||||
def test_list(self):
|
||||
url = reverse("v2:language-list")
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
@@ -48,6 +48,7 @@ class AccountViewSetTestCase(ModoAPITestCase):
|
||||
# Display recovery tokens
|
||||
security_url = reverse("core:user_security")
|
||||
response = self.client.get(security_url)
|
||||
|
||||
self.assertIn("recovery codes", response.json()["content"])
|
||||
admin.refresh_from_db()
|
||||
self.assertTrue(admin.tfa_enabled)
|
||||
|
||||
@@ -189,10 +189,11 @@ REST_FRAMEWORK = {
|
||||
'rest_framework.authentication.SessionAuthentication',
|
||||
),
|
||||
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
|
||||
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning',
|
||||
}
|
||||
|
||||
SPECTACULAR_SETTINGS = {
|
||||
'SCHEMA_PATH_PREFIX': r'/api/v1',
|
||||
'SCHEMA_PATH_PREFIX': r'/api/v[0-9]',
|
||||
'TITLE': 'Modoboa API',
|
||||
'VERSION': None,
|
||||
'SERVE_PERMISSIONS': ['rest_framework.permissions.IsAuthenticated'],
|
||||
|
||||
Reference in New Issue
Block a user