Cleanup and unit tests.

This commit is contained in:
Antoine Nguyen
2021-06-03 09:02:55 +02:00
parent d4868e33fc
commit ec737efc26
5 changed files with 68 additions and 25 deletions
@@ -97,11 +97,6 @@
hide-details
/>
</confirm-dialog>
<v-dialog v-model="showDNSdetail"
persistent
max-width="800px">
<dns-detail @close="showDNSdetail = false" :domain="selectedDomain" />
</v-dialog>
<v-dialog v-model="showAliasForm"
persistent
max-width="800px">
@@ -130,7 +125,6 @@ import { bus } from '@/main'
import domainApi from '@/api/domains'
import AdministratorList from './AdministratorList'
import ConfirmDialog from '@/components/layout/ConfirmDialog'
import DNSDetail from '@/components/domains/DNSDetail'
import DNSStatusChip from './DNSStatusChip'
import DomainAliasForm from '@/components/domains/DomainAliasForm'
import MenuItems from '@/components/tools/MenuItems'
@@ -139,7 +133,6 @@ export default {
components: {
AdministratorList,
ConfirmDialog,
'dns-detail': DNSDetail,
'dns-status-chip': DNSStatusChip,
DomainAliasForm,
MenuItems
@@ -168,7 +161,6 @@ export default {
showAdminList: false,
showConfirmDialog: false,
showAliasForm: false,
showDNSdetail: false,
search: '',
selected: [],
expanded: [],
@@ -226,10 +218,6 @@ export default {
this.$set(this.aliases, item.name, resp.data)
})
},
openDNSDetail (domain) {
this.selectedDomain = domain
this.showDNSdetail = true
},
openAdminList (domain) {
this.selectedDomain = domain
this.showAdminList = true
+65
View File
@@ -1,9 +1,11 @@
"""Core API related tests."""
import copy
from unittest import mock
from django.urls import reverse
from modoboa.core import models
from modoboa.lib.tests import ModoAPITestCase
CORE_SETTINGS = {
@@ -106,3 +108,66 @@ class ParametersAPITestCase(ModoAPITestCase):
})
resp = self.client.put(url, data, format="json")
self.assertEqual(resp.status_code, 200)
class AccountViewSetTestCase(ModoAPITestCase):
def test_me(self):
url = reverse("v2:account-me")
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
me = resp.json()
self.assertEqual(me["pk"], 1)
@mock.patch("django_otp.match_token")
def test_tfa_verify_code(self, match_mock):
user = models.User.objects.get(username="admin")
user.totpdevice_set.create(name="Device")
user.tfa_enabled = True
user.save()
url = reverse("v2:account-tfa-verify-code")
match_mock.side_effect = [user.totpdevice_set.first()]
data = {"code": "1234"}
resp = self.client.post(url, data, format="json")
self.assertEqual(resp.status_code, 200)
self.assertIn("access", resp.json())
class AuthenticationTestCase(ModoAPITestCase):
@mock.patch("django_otp.match_token")
def test_2fa(self, match_mock):
url = reverse("v2:token_obtain_pair")
me_url = reverse("v2:account-me")
data = {
"username": "admin",
"password": "password"
}
resp = self.client.post(url, data, format="json")
self.assertEqual(resp.status_code, 200)
self.client.credentials(
HTTP_AUTHORIZATION="Bearer {}".format(resp.json()["access"]))
resp = self.client.get(me_url)
self.assertEqual(resp.status_code, 200)
# Now we enable 2FA
user = models.User.objects.get(username="admin")
user.totpdevice_set.create(name="Device")
user.tfa_enabled = True
user.save()
resp = self.client.get(me_url)
self.assertEqual(resp.status_code, 418)
# Verify code
url = reverse("v2:account-tfa-verify-code")
match_mock.side_effect = [user.totpdevice_set.first()]
data = {"code": "1234"}
resp = self.client.post(url, data, format="json")
self.assertEqual(resp.status_code, 200)
self.client.credentials(
HTTP_AUTHORIZATION="Bearer {}".format(resp.json()["access"]))
resp = self.client.get(me_url)
self.assertEqual(resp.status_code, 200)
@@ -188,7 +188,7 @@ MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
'modoboa.core.drf_authentication.JWTAuthenticationWith2FA',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
+1 -12
View File
@@ -89,17 +89,6 @@ class Registry(object):
})
return result
def get_fields(self, level, for_app=None):
"""Return fields to include in serializer."""
result = []
for app, fields in list(self._registry2[level].items()):
if app and for_app != app:
continue
for section, sconfig in list(fields["structure"].items()):
for name, config in list(sconfig["params"].items()):
result.append(("{}-{}".format(app, name), config["field"]))
return result
def get_serializer_class(self, level, app):
"""Return serializer class for given level and app."""
if app not in self._registry2[level]:
@@ -169,7 +158,7 @@ class Registry(object):
registry = Registry()
class Manager(object):
class Manager:
"""A manager for parameters."""
def __init__(self, level, parameters):
+1
View File
@@ -184,6 +184,7 @@ MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'modoboa.core.drf_authentication.JWTAuthenticationWith2FA',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),