admin: add generic form tests
This commit is contained in:
parent
b30b58924f
commit
1d9c92d548
|
@ -58,7 +58,9 @@ class SeleniumTestCase(StaticLiveServerTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.driver.save_screenshot(f"selenium_screenshots/{self.__class__.__name__}_{time()}.png")
|
self.driver.save_screenshot(
|
||||||
|
f"selenium_screenshots/{self.__class__.__name__}_{time()}.png"
|
||||||
|
)
|
||||||
for line in self.driver.get_log("browser"):
|
for line in self.driver.get_log("browser"):
|
||||||
self.logger.warning(
|
self.logger.warning(
|
||||||
line["message"], source=line["source"], level=line["level"]
|
line["message"], source=line["source"], level=line["level"]
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
"""admin tests"""
|
"""admin tests"""
|
||||||
|
from importlib import import_module
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
|
from django.forms import ModelForm
|
||||||
from django.shortcuts import reverse
|
from django.shortcuts import reverse
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
from django.urls.exceptions import NoReverseMatch
|
from django.urls.exceptions import NoReverseMatch
|
||||||
|
|
||||||
from passbook.admin.urls import urlpatterns
|
from passbook.admin.urls import urlpatterns
|
||||||
from passbook.core.models import User
|
from passbook.core.models import User
|
||||||
|
from passbook.lib.utils.reflection import get_apps
|
||||||
|
|
||||||
|
|
||||||
class TestAdmin(TestCase):
|
class TestAdmin(TestCase):
|
||||||
|
@ -34,4 +37,28 @@ def generic_view_tester(view_name: str) -> Callable:
|
||||||
|
|
||||||
for url in urlpatterns:
|
for url in urlpatterns:
|
||||||
method_name = url.name.replace("-", "_")
|
method_name = url.name.replace("-", "_")
|
||||||
setattr(TestAdmin, f"test_{method_name}", generic_view_tester(url.name))
|
setattr(TestAdmin, f"test_view_{method_name}", generic_view_tester(url.name))
|
||||||
|
|
||||||
|
|
||||||
|
def generic_form_tester(form: ModelForm) -> Callable:
|
||||||
|
"""Test a form"""
|
||||||
|
|
||||||
|
def tester(self: TestAdmin):
|
||||||
|
form_inst = form()
|
||||||
|
self.assertFalse(form_inst.is_valid())
|
||||||
|
|
||||||
|
return tester
|
||||||
|
|
||||||
|
|
||||||
|
# Load the forms module from every app, so we have all forms loaded
|
||||||
|
for app in get_apps():
|
||||||
|
module = app.__module__.replace(".apps", ".forms")
|
||||||
|
try:
|
||||||
|
import_module(module)
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
for form_class in ModelForm.__subclasses__():
|
||||||
|
setattr(
|
||||||
|
TestAdmin, f"test_form_{form_class.__name__}", generic_form_tester(form_class)
|
||||||
|
)
|
||||||
|
|
|
@ -4,7 +4,6 @@ from django.urls import path
|
||||||
from drf_yasg import openapi
|
from drf_yasg import openapi
|
||||||
from drf_yasg.views import get_schema_view
|
from drf_yasg.views import get_schema_view
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
from structlog import get_logger
|
|
||||||
|
|
||||||
from passbook.api.permissions import CustomObjectPermissions
|
from passbook.api.permissions import CustomObjectPermissions
|
||||||
from passbook.audit.api import EventViewSet
|
from passbook.audit.api import EventViewSet
|
||||||
|
@ -16,7 +15,6 @@ from passbook.core.api.providers import ProviderViewSet
|
||||||
from passbook.core.api.sources import SourceViewSet
|
from passbook.core.api.sources import SourceViewSet
|
||||||
from passbook.core.api.users import UserViewSet
|
from passbook.core.api.users import UserViewSet
|
||||||
from passbook.flows.api import FlowStageBindingViewSet, FlowViewSet, StageViewSet
|
from passbook.flows.api import FlowStageBindingViewSet, FlowViewSet, StageViewSet
|
||||||
from passbook.lib.utils.reflection import get_apps
|
|
||||||
from passbook.policies.api import PolicyBindingViewSet, PolicyViewSet
|
from passbook.policies.api import PolicyBindingViewSet, PolicyViewSet
|
||||||
from passbook.policies.dummy.api import DummyPolicyViewSet
|
from passbook.policies.dummy.api import DummyPolicyViewSet
|
||||||
from passbook.policies.expiry.api import PasswordExpiryPolicyViewSet
|
from passbook.policies.expiry.api import PasswordExpiryPolicyViewSet
|
||||||
|
@ -48,15 +46,8 @@ from passbook.stages.user_login.api import UserLoginStageViewSet
|
||||||
from passbook.stages.user_logout.api import UserLogoutStageViewSet
|
from passbook.stages.user_logout.api import UserLogoutStageViewSet
|
||||||
from passbook.stages.user_write.api import UserWriteStageViewSet
|
from passbook.stages.user_write.api import UserWriteStageViewSet
|
||||||
|
|
||||||
LOGGER = get_logger()
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
|
|
||||||
for _passbook_app in get_apps():
|
|
||||||
if hasattr(_passbook_app, "api_mountpoint"):
|
|
||||||
for prefix, viewset in _passbook_app.api_mountpoint:
|
|
||||||
router.register(prefix, viewset)
|
|
||||||
LOGGER.debug("Mounted API URLs", app_name=_passbook_app.name)
|
|
||||||
|
|
||||||
router.register("core/applications", ApplicationViewSet)
|
router.register("core/applications", ApplicationViewSet)
|
||||||
router.register("core/groups", GroupViewSet)
|
router.register("core/groups", GroupViewSet)
|
||||||
router.register("core/users", UserViewSet)
|
router.register("core/users", UserViewSet)
|
||||||
|
|
Reference in New Issue