Skip to content

Commit dff741c

Browse files
committed
feat: [AAP-22893] add filtering by activation instance name to audit rules list view
1 parent a5d3a20 commit dff741c

File tree

5 files changed

+46
-39
lines changed

5 files changed

+46
-39
lines changed

poetry.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,13 @@ cryptography = ">=42,<43"
4141
kubernetes = "26.1.*"
4242
podman = "4.9.*"
4343
rq-scheduler = "^0.10"
44-
django-ansible-base = { git = "https://github.com/ansible/django-ansible-base.git", branch = "devel", extras = [
44+
django-ansible-base = { git = "https://github.com/ansible/django-ansible-base.git", tag = "2024.12.13", extras = [
4545
"channel-auth",
4646
"rbac",
4747
"redis-client",
4848
"resource-registry",
4949
"jwt-consumer",
50+
"rest-filters",
5051
] }
5152
jinja2 = ">=3.1.3,<3.2"
5253
django-split-settings = "^1.2.0"

src/aap_eda/api/views/rulebook.py

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
)
2525
from rest_framework import status, viewsets
2626
from rest_framework.decorators import action
27-
from rest_framework.filters import OrderingFilter
2827
from rest_framework.response import Response
2928

3029
from aap_eda.api import exceptions as api_exc, filters, serializers
@@ -152,15 +151,6 @@ class AuditRuleViewSet(
152151
viewsets.ReadOnlyModelViewSet,
153152
):
154153
queryset = models.AuditRule.objects.all()
155-
filter_backends = (defaultfilters.DjangoFilterBackend, OrderingFilter)
156-
filterset_class = filters.AuditRuleFilter
157-
ordering_fields = [
158-
"id",
159-
"name",
160-
"status",
161-
"activation_instance__name",
162-
"fired_at",
163-
]
164154

165155
def filter_queryset(self, queryset):
166156
if queryset.model is models.AuditRule:
@@ -200,13 +190,6 @@ def get_serializer_class(self):
200190
@action(
201191
detail=False,
202192
queryset=models.AuditAction.objects.order_by("id"),
203-
filterset_class=filters.AuditRuleActionFilter,
204-
ordering_fields=[
205-
"name",
206-
"status",
207-
"url",
208-
"fired_at",
209-
],
210193
rbac_action=Action.READ,
211194
url_path="(?P<id>[^/.]+)/actions",
212195
)
@@ -243,12 +226,6 @@ def actions(self, _request, id):
243226
@action(
244227
detail=False,
245228
queryset=models.AuditEvent.objects.order_by("-received_at"),
246-
filterset_class=filters.AuditRuleEventFilter,
247-
ordering_fields=[
248-
"source_name",
249-
"source_type",
250-
"received_at",
251-
],
252229
rbac_action=Action.READ,
253230
url_path="(?P<id>[^/.]+)/events",
254231
)

src/aap_eda/settings/default.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ def _get_boolean(name: str, default=False) -> bool:
194194
"ansible_base.rbac",
195195
"ansible_base.resource_registry",
196196
"ansible_base.jwt_consumer",
197+
"ansible_base.rest_filters",
197198
# Local apps
198199
"aap_eda.api",
199200
"aap_eda.core",

tests/integration/api/test_rulebook.py

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ def test_list_audit_rules_ordering(
302302
ordering_field,
303303
):
304304
response = admin_client.get(
305-
f"{api_url_v1}/audit-rules/?ordering={ordering_field}"
305+
f"{api_url_v1}/audit-rules/?order={ordering_field}"
306306
)
307307
assert response.status_code == status.HTTP_200_OK
308308
audit_rules = response.data["results"]
@@ -312,7 +312,7 @@ def test_list_audit_rules_ordering(
312312
)
313313

314314
response = admin_client.get(
315-
f"{api_url_v1}/audit-rules/?ordering=-{ordering_field}"
315+
f"{api_url_v1}/audit-rules/?order=-{ordering_field}"
316316
)
317317
assert response.status_code == status.HTTP_200_OK
318318
audit_rules = response.data["results"]
@@ -330,7 +330,7 @@ def test_list_audit_rules_ordering_activation_name(
330330
):
331331
ordering_field = "activation_instance__name"
332332
response = admin_client.get(
333-
f"{api_url_v1}/audit-rules/?ordering={ordering_field}"
333+
f"{api_url_v1}/audit-rules/?order={ordering_field}"
334334
)
335335
assert response.status_code == status.HTTP_200_OK
336336
audit_rules = response.data["results"]
@@ -341,7 +341,7 @@ def test_list_audit_rules_ordering_activation_name(
341341
)
342342

343343
response = admin_client.get(
344-
f"{api_url_v1}/audit-rules/?ordering=-{ordering_field}"
344+
f"{api_url_v1}/audit-rules/?order=-{ordering_field}"
345345
)
346346
assert response.status_code == status.HTTP_200_OK
347347
audit_rules = response.data["results"]
@@ -352,6 +352,34 @@ def test_list_audit_rules_ordering_activation_name(
352352
)
353353

354354

355+
@pytest.mark.django_db
356+
def test_list_audit_rules_filter_activation_instance_name(
357+
audit_rule_1: models.AuditRule,
358+
audit_rule_2: models.AuditRule,
359+
admin_client: APIClient,
360+
):
361+
filter_name = audit_rule_1.activation_instance.name
362+
response = admin_client.get(
363+
f"{api_url_v1}/audit-rules/?activation_instance__name={filter_name}"
364+
)
365+
assert response.status_code == status.HTTP_200_OK
366+
audit_rules = response.data["results"]
367+
368+
assert len(audit_rules) == 1
369+
assert (
370+
audit_rules[0]["activation_instance"]["name"]
371+
== audit_rule_1.activation_instance.name
372+
)
373+
assert list(audit_rules[0]) == [
374+
"id",
375+
"name",
376+
"status",
377+
"activation_instance",
378+
"organization",
379+
"fired_at",
380+
]
381+
382+
355383
@pytest.mark.django_db
356384
def test_retrieve_audit_rule(
357385
audit_rule_1: models.AuditRule, admin_client: APIClient
@@ -426,7 +454,7 @@ def test_list_actions_from_audit_rule_ordering(
426454
ordering_field,
427455
):
428456
response = admin_client.get(
429-
f"{api_url_v1}/audit-rules/{audit_rule_2.id}/actions/?ordering="
457+
f"{api_url_v1}/audit-rules/{audit_rule_2.id}/actions/?order="
430458
f"{ordering_field}"
431459
)
432460
assert response.status_code == status.HTTP_200_OK
@@ -437,7 +465,7 @@ def test_list_actions_from_audit_rule_ordering(
437465
)
438466

439467
response = admin_client.get(
440-
f"{api_url_v1}/audit-rules/{audit_rule_2.id}/actions/?ordering="
468+
f"{api_url_v1}/audit-rules/{audit_rule_2.id}/actions/?order="
441469
f"-{ordering_field}"
442470
)
443471
assert response.status_code == status.HTTP_200_OK
@@ -495,7 +523,7 @@ def test_list_events_from_audit_rule_ordering(
495523
ordering_field,
496524
):
497525
response = admin_client.get(
498-
f"{api_url_v1}/audit-rules/{audit_rule_2.id}/events/?ordering="
526+
f"{api_url_v1}/audit-rules/{audit_rule_2.id}/events/?order="
499527
f"{ordering_field}"
500528
)
501529
assert response.status_code == status.HTTP_200_OK
@@ -504,7 +532,7 @@ def test_list_events_from_audit_rule_ordering(
504532
assert events[0][ordering_field] == getattr(audit_event_2, ordering_field)
505533

506534
response = admin_client.get(
507-
f"{api_url_v1}/audit-rules/{audit_rule_2.id}/events/?ordering="
535+
f"{api_url_v1}/audit-rules/{audit_rule_2.id}/events/?order="
508536
f"-{ordering_field}"
509537
)
510538
assert response.status_code == status.HTTP_200_OK

0 commit comments

Comments
 (0)