diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py index d6e3103bda259c597d78d8c54bd5c15a75c179f1..0fb5ff13224502ff167dab66fbc75725100b7415 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py @@ -911,6 +911,7 @@ class SchedulingUnitBlueprintPropertyFilter(property_filters.PropertyFilterSet): direction_type = filters.CharFilter(field_name='requirements_doc__tasks__Target Observation__specifications_doc__SAPs__0__digital_pointing__direction_type', lookup_expr='iexact') scheduling_set = property_filters.PropertyCharFilter(field_name='draft__scheduling_set', lookup_expr='icontains') # remove to filter based on list of options + observation_strategy_template = filters.ModelChoiceFilter(field_name='draft__observation_strategy_template', queryset=models.SchedulingUnitObservingStrategyTemplate.objects.all()) observation_strategy_template_name = filters.CharFilter(field_name='draft__observation_strategy_template__name', lookup_expr='icontains') observation_strategy_template_description = filters.CharFilter(field_name='draft__observation_strategy_template__description', lookup_expr='icontains') 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 bdf2770b43216d4b200cd9e49e308eabe76f1bea..1abe2b26896900fa7bfc9c36b3a7be3401fadf80 100755 --- a/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py +++ b/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py @@ -1628,8 +1628,8 @@ class SchedulingUnitDraftTestCase(unittest.TestCase): self.assertEqual(response_1['count'], 0) self.assertEqual(response_2['count'], 2) - self.assertEqual(response_2['results'][0]['name'], su_draft_1.name) - self.assertEqual(response_2['results'][1]['name'], su_draft_2.name) + self.assertEqual({result['name'] for result in response_2['results']}, + {su_draft_1.name, su_draft_2.name}) def test_GET_SchedulingUnitDraft_view_filters_for_pointing(self): """ @@ -1656,6 +1656,28 @@ class SchedulingUnitDraftTestCase(unittest.TestCase): self.assertEqual(response_2['count'], 1) self.assertEqual(response_2['results'][0]['name'], su_draft_2.name) + def test_GET_SchedulingUnitBlueprint_view_filters_for_strategy_template(self): + """ + Test we can filter on this field, which is explicitly named on the model-specific property filter + """ + # setup + template_1 = models.SchedulingUnitObservingStrategyTemplate.objects.create(**SchedulingUnitObservingStrategyTemplate_test_data(name='suost1_%s' % uuid.uuid4())) + template_2 = models.SchedulingUnitObservingStrategyTemplate.objects.create(**SchedulingUnitObservingStrategyTemplate_test_data(name='suost1_%s' % uuid.uuid4())) + su_draft_1 = models.SchedulingUnitDraft.objects.create(**SchedulingUnitDraft_test_data(name='sud1_%s' % uuid.uuid4(), observation_strategy_template=template_1)) + su_draft_2 = models.SchedulingUnitDraft.objects.create(**SchedulingUnitDraft_test_data(name='sud2_%s' % uuid.uuid4(), observation_strategy_template=template_2)) + + # assert + response_1 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_draft/?observation_strategy_template=%s' % template_1.id, 200) + response_2 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_draft/?observation_strategy_template_name=%s' % template_2.name[:-3], 200) + response_3 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_draft/?observation_strategy_template_name=%s' % 'gibberish', 200) + GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_draft/?observation_strategy_template=%s' % 999999, 400) + + self.assertEqual(response_1['count'], 1) + self.assertEqual(response_1['results'][0]['name'], su_draft_1.name) + self.assertEqual(response_2['count'], 1) + self.assertEqual(response_2['results'][0]['name'], su_draft_2.name) + self.assertEqual(response_3['count'], 0) + class TaskDraftTestCase(unittest.TestCase): @classmethod @@ -2287,6 +2309,31 @@ class SchedulingUnitBlueprintTestCase(unittest.TestCase): self.assertEqual(response_4['results'][1]['name'], su_blueprint_3.name) + def test_GET_SchedulingUnitBlueprint_view_filters_for_strategy_template(self): + """ + Test we can filter on this field, which is explicitly named on the model-specific property filter + """ + # setup + template_1 = models.SchedulingUnitObservingStrategyTemplate.objects.create(**SchedulingUnitObservingStrategyTemplate_test_data(name='suost1_%s' % uuid.uuid4())) + template_2 = models.SchedulingUnitObservingStrategyTemplate.objects.create(**SchedulingUnitObservingStrategyTemplate_test_data(name='suost1_%s' % uuid.uuid4())) + su_draft_1 = models.SchedulingUnitDraft.objects.create(**SchedulingUnitDraft_test_data(name='sud1_%s' % uuid.uuid4(), observation_strategy_template=template_1)) + su_draft_2 = models.SchedulingUnitDraft.objects.create(**SchedulingUnitDraft_test_data(name='sud2_%s' % uuid.uuid4(), observation_strategy_template=template_2)) + su_blueprint_1 = models.SchedulingUnitBlueprint.objects.create(**SchedulingUnitBlueprint_test_data(name='sub1_%s' % uuid.uuid4(), draft=su_draft_1)) + su_blueprint_2 = models.SchedulingUnitBlueprint.objects.create(**SchedulingUnitBlueprint_test_data(name='sub2_%s' % uuid.uuid4(), draft=su_draft_2)) + + # assert + response_1 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_blueprint/?observation_strategy_template=%s' % template_1.id, 200) + response_2 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_blueprint/?observation_strategy_template_name=%s' % template_2.name[:-3], 200) + response_3 = GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_blueprint/?observation_strategy_template_name=%s' % 'gibberish', 200) + GET_and_assert_equal_expected_code(self, BASE_URL + '/scheduling_unit_blueprint/?observation_strategy_template=%s' % 999999, 400) + + self.assertEqual(response_1['count'], 1) + self.assertEqual(response_1['results'][0]['name'], su_blueprint_1.name) + self.assertEqual(response_2['count'], 1) + self.assertEqual(response_2['results'][0]['name'], su_blueprint_2.name) + self.assertEqual(response_3['count'], 0) + + class TaskBlueprintTestCase(unittest.TestCase): @classmethod def setUpClass(cls) -> None: