From ef48d3fef30d0793035f3bd0feea806db1afc062 Mon Sep 17 00:00:00 2001 From: Alex Dusenbery Date: Tue, 2 Jan 2024 16:26:14 -0500 Subject: [PATCH] fix: filter cancel/remind-all querysets explicitly ENT-8156 | Previous related change didn't include calls to `self.filter_queryset()`. --- .../apps/api/v1/tests/test_assignment_views.py | 4 ++++ .../v1/views/content_assignments/assignments_admin.py | 10 ++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/enterprise_access/apps/api/v1/tests/test_assignment_views.py b/enterprise_access/apps/api/v1/tests/test_assignment_views.py index fbe18ae9..88ed3bda 100644 --- a/enterprise_access/apps/api/v1/tests/test_assignment_views.py +++ b/enterprise_access/apps/api/v1/tests/test_assignment_views.py @@ -1140,6 +1140,7 @@ def test_cancel_all_filter_multiple_learner_states(self): [mock.call(assignment.uuid) for assignment in expected_cancelled_assignments], any_order=True, ) + assert mock_cancel_task.delay.call_count == len(expected_cancelled_assignments) for assignment in expected_cancelled_assignments: assignment.refresh_from_db() self.assertEqual(assignment.state, LearnerContentAssignmentStateChoices.CANCELLED) @@ -1170,6 +1171,7 @@ def test_cancel_all_filter_single_learner_state(self): [mock.call(assignment.uuid) for assignment in expected_cancelled_assignments], any_order=True, ) + assert mock_cancel_task.delay.call_count == len(expected_cancelled_assignments) for assignment in expected_cancelled_assignments: assignment.refresh_from_db() self.assertEqual(assignment.state, LearnerContentAssignmentStateChoices.CANCELLED) @@ -1207,6 +1209,7 @@ def test_remind_all_filter_multiple_learner_states(self): [mock.call(assignment.uuid) for assignment in expected_reminded_assignments], any_order=True, ) + assert mock_remind_task.delay.call_count == len(expected_reminded_assignments) for assignment in expected_reminded_assignments: assignment.refresh_from_db() self.assertEqual(assignment.state, LearnerContentAssignmentStateChoices.ALLOCATED) @@ -1237,6 +1240,7 @@ def test_remind_all_filter_single_learner_state(self): [mock.call(assignment.uuid) for assignment in expected_reminded_assignments], any_order=True, ) + assert mock_remind_task.delay.call_count == len(expected_reminded_assignments) for assignment in expected_reminded_assignments: assignment.refresh_from_db() self.assertEqual(assignment.state, LearnerContentAssignmentStateChoices.ALLOCATED) diff --git a/enterprise_access/apps/api/v1/views/content_assignments/assignments_admin.py b/enterprise_access/apps/api/v1/views/content_assignments/assignments_admin.py index 4ab553af..0e6c798b 100644 --- a/enterprise_access/apps/api/v1/views/content_assignments/assignments_admin.py +++ b/enterprise_access/apps/api/v1/views/content_assignments/assignments_admin.py @@ -237,13 +237,14 @@ def cancel_all(self, request, *args, **kwargs): ``` Raises: - 404 if any of the assignments were not found + 404 if no cancelable assignments were found 422 if any of the assignments threw an error (not found or not cancelable) ``` """ - assignments = self.get_queryset().filter( + base_queryset = self.get_queryset().filter( state__in=LearnerContentAssignmentStateChoices.CANCELABLE_STATES, ) + assignments = self.filter_queryset(base_queryset) if not assignments: return Response(status=status.HTTP_404_NOT_FOUND) @@ -320,13 +321,14 @@ def remind_all(self, request, *args, **kwargs): ``` Raises: - 404 if any of the assignments were not found + 404 if no cancelable assignments were found 422 if any of the assignments threw an error (not found or not remindable) ``` """ - assignments = self.get_queryset().filter( + base_queryset = self.get_queryset().filter( state__in=LearnerContentAssignmentStateChoices.REMINDABLE_STATES, ) + assignments = self.filter_queryset(base_queryset) if not assignments: return Response(status=status.HTTP_404_NOT_FOUND)