diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py index df3ad8fd6f368667d392a03c8f0be4d60741dba5..823ce7ae1e14aedce2ea6ac1fc38bea13f9f3982 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py @@ -1221,9 +1221,9 @@ class TaskBlueprintPropertyFilter(property_filters.PropertyFilterSet): start_time = property_filters.PropertyIsoDateTimeFromToRangeFilter(field_name='start_time') stop_time = property_filters.PropertyIsoDateTimeFromToRangeFilter(field_name='stop_time') status = property_filters.PropertyChoiceFilter(field_name='status', choices=tuple((i.value, i.value) for i in models.SubtaskState.Choices), lookup_expr='iexact') - subtask_id = NumberInFilter(field_name='subtasks__id', lookup_expr='in') - subtask_id_min = filters.NumberFilter(field_name='subtasks__id', lookup_expr='gte') - subtask_id_max = filters.NumberFilter(field_name='subtasks__id', lookup_expr='lte') + subtasks = filters.ModelMultipleChoiceFilter(field_name='subtasks', queryset=models.Subtask.objects.all()) + subtasks_min = filters.NumberFilter(field_name='subtasks__id', lookup_expr='gte') + subtasks_max = filters.NumberFilter(field_name='subtasks__id', lookup_expr='lte') class Meta: model = models.TaskBlueprint diff --git a/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py b/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py index 70a2c5eed405fc3d406ba705e624e21288a1c705..33efd0f079e851f83e3a300b22032f4ec09e98d0 100755 --- a/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py +++ b/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py @@ -2621,9 +2621,48 @@ class TaskBlueprintTestCase(unittest.TestCase): self.assertNotIn(task_blueprint_2.name, str(response_3)) self.assertIn(task_blueprint_3.name, str(response_3)) - # todo: control ID + def test_TaskBlueprint_filters_for_Subtask(self): - # todo: status + # setup + task_blueprint_1 = models.TaskBlueprint.objects.create(**TaskBlueprint_test_data(name="tb_%s" % uuid.uuid4())) + task_blueprint_2 = models.TaskBlueprint.objects.create(**TaskBlueprint_test_data(name="tb_%s" % uuid.uuid4())) + task_blueprint_3 = models.TaskBlueprint.objects.create(**TaskBlueprint_test_data(name="tb_%s" % uuid.uuid4())) + subtask_1 = models.Subtask.objects.create(**Subtask_test_data()) + subtask_2 = models.Subtask.objects.create(**Subtask_test_data()) + subtask_3 = models.Subtask.objects.create(**Subtask_test_data()) + subtask_1.task_blueprints.set([task_blueprint_1]) + subtask_2.task_blueprints.set([task_blueprint_2]) + subtask_3.task_blueprints.set([task_blueprint_3]) + subtask_1.save() + subtask_2.save() + subtask_3.save() + + # assert + response_1 = GET_and_assert_equal_expected_code(self, BASE_URL + '/task_blueprint/?subtasks=%s' % subtask_1.id, 200) + response_2 = GET_and_assert_equal_expected_code(self, BASE_URL + '/task_blueprint/?subtasks_min=%s&subtasks_max=%s' % (subtask_2.id, subtask_2.id), 200) + response_3 = GET_and_assert_equal_expected_code(self, BASE_URL + '/task_blueprint/?subtasks=%s&subtasks=%s' % (subtask_1.id, subtask_3.id), 200) + GET_and_assert_equal_expected_code(self, BASE_URL + '/task_blueprint/?subtasks=%s' % 9999999, 400) + self.assertIn(task_blueprint_1.name, str(response_1)) + self.assertNotIn(task_blueprint_2.name, str(response_1)) + self.assertNotIn(task_blueprint_3.name, str(response_1)) + self.assertNotIn(task_blueprint_1.name, str(response_2)) + self.assertIn(task_blueprint_2.name, str(response_2)) + self.assertNotIn(task_blueprint_3.name, str(response_2)) + self.assertIn(task_blueprint_1.name, str(response_3)) + self.assertNotIn(task_blueprint_2.name, str(response_3)) + self.assertIn(task_blueprint_3.name, str(response_3)) + + def test_TaskBlueprint_filters_for_status(self): + + # setup + task_blueprint_1 = models.TaskBlueprint.objects.create(**TaskBlueprint_test_data(name="tb_%s" % uuid.uuid4())) + + # assert + response_1 = GET_and_assert_equal_expected_code(self, BASE_URL + '/task_blueprint/?status=defined', 200) + response_2 = GET_and_assert_equal_expected_code(self, BASE_URL + '/task_blueprint/?status=obsolete', 200) + GET_and_assert_equal_expected_code(self, BASE_URL + '/task_blueprint/?status=gibberish', 400) + self.assertGreater(response_1['count'], 0) + self.assertEqual(response_2['count'], 0) class TaskRelationBlueprintTestCase(unittest.TestCase):