Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions users/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import uuid
from typing import Optional, TYPE_CHECKING

from auditlog.registry import auditlog
from django.contrib.auth.models import Group
from django.db import models
from django.db.models import Q
Expand Down Expand Up @@ -95,3 +96,6 @@ def has_responsible_entity_permission(self, responsible_entity: Optional["Respon
class Meta:
verbose_name = _("User")
verbose_name_plural = _("Users")


auditlog.register(User, m2m_fields={"operational_areas", "responsible_entities", "groups", "ad_groups"})
19 changes: 15 additions & 4 deletions users/tests/test_user_model.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import pytest
from auditlog.models import LogEntry
from django.conf import settings
from django.contrib.auth.models import Group
from django.contrib.gis.geos import MultiPolygon, Point, Polygon
Expand Down Expand Up @@ -26,50 +27,60 @@
@pytest.mark.django_db
def test__user_operational_area__contains_location(location, expected):
user = get_user()
assert LogEntry.objects.get_for_object(user).filter(action=LogEntry.Action.CREATE).count() == 1

oa = get_operational_area(area=area)
user.operational_areas.add(oa)
assert LogEntry.objects.get_for_object(user).filter(action=LogEntry.Action.UPDATE).count() == 1

in_area = user.location_is_in_operational_area(location)

assert in_area == expected


@pytest.mark.parametrize("location", (point_inside_area, point_outside_area))
@pytest.mark.django_db
def test__superuser_operational_area(location):
user = get_user(admin=True)
assert LogEntry.objects.get_for_object(user).filter(action=LogEntry.Action.CREATE).count() == 1

oa = get_operational_area(area=area)
user.operational_areas.add(oa)
assert LogEntry.objects.get_for_object(user).filter(action=LogEntry.Action.UPDATE).count() == 1

in_area = user.location_is_in_operational_area(location)

assert in_area


@pytest.mark.parametrize("location", (point_inside_area, point_outside_area))
@pytest.mark.django_db
def test__user_operational_area__bypass_operational_area(location):
user = get_user(admin=True)
assert LogEntry.objects.get_for_object(user).filter(action=LogEntry.Action.CREATE).count() == 1

user.bypass_operational_area = True
user.save(update_fields=["bypass_operational_area"])
oa = get_operational_area(area=area)
assert LogEntry.objects.get_for_object(user).filter(action=LogEntry.Action.UPDATE).count() == 1
user.operational_areas.add(oa)
assert LogEntry.objects.get_for_object(user).filter(action=LogEntry.Action.UPDATE).count() == 2

in_area = user.location_is_in_operational_area(location)

assert in_area


@pytest.mark.parametrize("location,expected", ((point_inside_area, True), (point_outside_area, False)))
@pytest.mark.django_db
def test__user_group_operational_area__contains_location(location, expected):
user = get_user()
assert LogEntry.objects.get_for_object(user).filter(action=LogEntry.Action.CREATE).count() == 1

group = Group.objects.create(name="test group")
user.groups.add(group)
assert LogEntry.objects.get_for_object(user).filter(action=LogEntry.Action.UPDATE).count() == 1

oa = get_operational_area(area)
group_oa = GroupOperationalArea.objects.create(group=group)
group_oa.areas.add(oa)

in_area = user.location_is_in_operational_area(location)

assert in_area == expected
Loading