policies: change .form() and .serializer() to properties, add tests
This commit is contained in:
@ -31,6 +31,7 @@ class DummyPolicy(Policy):
|
||||
|
||||
return DummyPolicySerializer
|
||||
|
||||
@property
|
||||
def form(self) -> Type[ModelForm]:
|
||||
from passbook.policies.dummy.forms import DummyPolicyForm
|
||||
|
||||
|
||||
@ -50,7 +50,7 @@ class PolicyEngine:
|
||||
def __init__(
|
||||
self, pbm: PolicyBindingModel, user: User, request: HttpRequest = None
|
||||
):
|
||||
if not isinstance(pbm, PolicyBindingModel):
|
||||
if not isinstance(pbm, PolicyBindingModel): # pragma: no cover
|
||||
raise ValueError(f"{pbm} is not instance of PolicyBindingModel")
|
||||
self.__pbm = pbm
|
||||
self.request = PolicyRequest(user)
|
||||
|
||||
@ -28,6 +28,7 @@ class PasswordExpiryPolicy(Policy):
|
||||
|
||||
return PasswordExpiryPolicySerializer
|
||||
|
||||
@property
|
||||
def form(self) -> Type[ModelForm]:
|
||||
from passbook.policies.expiry.forms import PasswordExpiryPolicyForm
|
||||
|
||||
|
||||
@ -22,6 +22,7 @@ class ExpressionPolicy(Policy):
|
||||
|
||||
return ExpressionPolicySerializer
|
||||
|
||||
@property
|
||||
def form(self) -> Type[ModelForm]:
|
||||
from passbook.policies.expression.forms import ExpressionPolicyForm
|
||||
|
||||
|
||||
@ -24,6 +24,7 @@ class GroupMembershipPolicy(Policy):
|
||||
|
||||
return GroupMembershipPolicySerializer
|
||||
|
||||
@property
|
||||
def form(self) -> Type[ModelForm]:
|
||||
from passbook.policies.group_membership.forms import GroupMembershipPolicyForm
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ class HaveIBeenPwendPolicy(Policy):
|
||||
|
||||
return HaveIBeenPwendPolicySerializer
|
||||
|
||||
@property
|
||||
def form(self) -> Type[ModelForm]:
|
||||
from passbook.policies.hibp.forms import HaveIBeenPwnedPolicyForm
|
||||
|
||||
|
||||
@ -83,14 +83,15 @@ class Policy(SerializerModel, CreatedUpdatedModel):
|
||||
|
||||
objects = InheritanceAutoManager()
|
||||
|
||||
@property
|
||||
def form(self) -> Type[ModelForm]:
|
||||
"""Return Form class used to edit this object"""
|
||||
raise NotImplementedError
|
||||
|
||||
def __str__(self):
|
||||
return f"Policy {self.name}"
|
||||
return f"{self.__class__.__name__} {self.name}"
|
||||
|
||||
def passes(self, request: PolicyRequest) -> PolicyResult:
|
||||
def passes(self, request: PolicyRequest) -> PolicyResult: # pragma: no cover
|
||||
"""Check if user instance passes this policy"""
|
||||
raise PolicyException()
|
||||
|
||||
|
||||
@ -37,6 +37,7 @@ class PasswordPolicy(Policy):
|
||||
|
||||
return PasswordPolicySerializer
|
||||
|
||||
@property
|
||||
def form(self) -> Type[ModelForm]:
|
||||
from passbook.policies.password.forms import PasswordPolicyForm
|
||||
|
||||
|
||||
@ -29,6 +29,7 @@ class ReputationPolicy(Policy):
|
||||
|
||||
return ReputationPolicySerializer
|
||||
|
||||
@property
|
||||
def form(self) -> Type[ModelForm]:
|
||||
from passbook.policies.reputation.forms import ReputationPolicyForm
|
||||
|
||||
|
||||
0
passbook/policies/tests/__init__.py
Normal file
0
passbook/policies/tests/__init__.py
Normal file
30
passbook/policies/tests/test_models.py
Normal file
30
passbook/policies/tests/test_models.py
Normal file
@ -0,0 +1,30 @@
|
||||
"""flow model tests"""
|
||||
from typing import Callable, Type
|
||||
|
||||
from django.forms import ModelForm
|
||||
from django.test import TestCase
|
||||
|
||||
from passbook.lib.utils.reflection import all_subclasses
|
||||
from passbook.policies.models import Policy
|
||||
|
||||
|
||||
class TestPolicyProperties(TestCase):
|
||||
"""Generic model properties tests"""
|
||||
|
||||
|
||||
def policy_tester_factory(model: Type[Policy]) -> Callable:
|
||||
"""Test a form"""
|
||||
|
||||
def tester(self: TestPolicyProperties):
|
||||
model_inst = model()
|
||||
self.assertTrue(issubclass(model_inst.form, ModelForm))
|
||||
|
||||
return tester
|
||||
|
||||
|
||||
for policy_type in all_subclasses(Policy):
|
||||
setattr(
|
||||
TestPolicyProperties,
|
||||
f"test_policy_{policy_type.__name__}",
|
||||
policy_tester_factory(policy_type),
|
||||
)
|
||||
Reference in New Issue
Block a user