* events: initial alerting implementation * policies: move error handling to process, ensure policy UUID is saved * policies: add tests for error handling in PolicyProcess * events: improve loop detection * events: add API for action and trigger * policies: ensure http_request is not used in context * events: adjust unittests for user handling * policies/event_matcher: add policy type * events: add API tests * events: add middleware tests * core: make application's provider not required * outposts: allow blank kubeconfig * outposts: validate kubeconfig before saving * api: fix formatting * stages/invitation: remove invitation_created signal as model_created functions the same * stages/invitation: ensure created_by is set when creating from API * events: rebase migrations on master * events: fix missing Alerts from API * policies: fix unittests * events: add tests for alerts * events: rename from alerting to notifications * events: add ability to specify severity of notification created * policies/event_matcher: Add app field to match on event app * policies/event_matcher: fix EventMatcher not being included in API * core: use objects.none() when get_queryset is used * events: use m2m for multiple transports, create notification object in task * events: add default triggers * events: fix migrations return value * events: fix notification_transport not being in the correct queue * stages/email: allow sending of email without backend * events: implement sending via webhook + slack/discord + email
63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
"""evaluator tests"""
|
|
from django.core.exceptions import ValidationError
|
|
from django.test import TestCase
|
|
from guardian.shortcuts import get_anonymous_user
|
|
|
|
from authentik.policies.exceptions import PolicyException
|
|
from authentik.policies.expression.evaluator import PolicyEvaluator
|
|
from authentik.policies.expression.models import ExpressionPolicy
|
|
from authentik.policies.types import PolicyRequest
|
|
|
|
|
|
class TestEvaluator(TestCase):
|
|
"""Evaluator tests"""
|
|
|
|
def setUp(self):
|
|
self.request = PolicyRequest(user=get_anonymous_user())
|
|
|
|
def test_full(self):
|
|
"""Test full with Policy instance"""
|
|
policy = ExpressionPolicy(name="test", expression="return 'test'")
|
|
policy.save()
|
|
request = PolicyRequest(get_anonymous_user())
|
|
result = policy.passes(request)
|
|
self.assertTrue(result.passing)
|
|
|
|
def test_valid(self):
|
|
"""test simple value expression"""
|
|
template = "return True"
|
|
evaluator = PolicyEvaluator("test")
|
|
evaluator.set_policy_request(self.request)
|
|
self.assertEqual(evaluator.evaluate(template).passing, True)
|
|
|
|
def test_messages(self):
|
|
"""test expression with message return"""
|
|
template = 'ak_message("some message");return False'
|
|
evaluator = PolicyEvaluator("test")
|
|
evaluator.set_policy_request(self.request)
|
|
result = evaluator.evaluate(template)
|
|
self.assertEqual(result.passing, False)
|
|
self.assertEqual(result.messages, ("some message",))
|
|
|
|
def test_invalid_syntax(self):
|
|
"""test invalid syntax"""
|
|
template = ";"
|
|
evaluator = PolicyEvaluator("test")
|
|
evaluator.set_policy_request(self.request)
|
|
with self.assertRaises(PolicyException):
|
|
evaluator.evaluate(template)
|
|
|
|
def test_validate(self):
|
|
"""test validate"""
|
|
template = "True"
|
|
evaluator = PolicyEvaluator("test")
|
|
result = evaluator.validate(template)
|
|
self.assertEqual(result, True)
|
|
|
|
def test_validate_invalid(self):
|
|
"""test validate"""
|
|
template = ";"
|
|
evaluator = PolicyEvaluator("test")
|
|
with self.assertRaises(ValidationError):
|
|
evaluator.validate(template)
|