Added unit tests

This commit is contained in:
Antoine Nguyen
2022-02-04 12:03:35 +01:00
parent 233f514316
commit d4b3366ff3
5 changed files with 97 additions and 2 deletions
+41
View File
@@ -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
)
+1 -1
View File
@@ -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)
+52
View File
@@ -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)
+1
View File
@@ -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)
+2 -1
View File
@@ -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'],