From 73e50836cc2a8b864e33746b05c6cf74b4f9434c Mon Sep 17 00:00:00 2001 From: Elisabeth Heinrich-Josties Date: Wed, 12 Feb 2020 22:30:52 +0000 Subject: [PATCH] Add validation to make sure there is at least one instrument configuration --- observation_portal/requestgroups/serializers.py | 2 ++ observation_portal/requestgroups/test/test_api.py | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/observation_portal/requestgroups/serializers.py b/observation_portal/requestgroups/serializers.py index 59016df0..87fcffe6 100644 --- a/observation_portal/requestgroups/serializers.py +++ b/observation_portal/requestgroups/serializers.py @@ -236,6 +236,8 @@ def to_representation(self, instance): def validate_instrument_configs(self, value): if len(set([instrument_config.get('rotator_mode', '') for instrument_config in value])) > 1: raise serializers.ValidationError(_('Rotator modes within the same configuration must be the same')) + if len(value) < 1: + raise serializers.ValidationError(_('A configuration must have at least one instrument configuration')) return value def validate_instrument_type(self, value): diff --git a/observation_portal/requestgroups/test/test_api.py b/observation_portal/requestgroups/test/test_api.py index 351148b5..a98d69ac 100644 --- a/observation_portal/requestgroups/test/test_api.py +++ b/observation_portal/requestgroups/test/test_api.py @@ -1287,6 +1287,13 @@ def setUp(self): self.generic_payload['proposal'] = self.proposal.id self.extra_configuration = copy.deepcopy(self.generic_payload['requests'][0]['configurations'][0]) + def test_must_have_at_least_one_instrument_config(self): + bad_data = self.generic_payload.copy() + bad_data['requests'][0]['configurations'][0]['instrument_configs'] = [] + response = self.client.post(reverse('api:request_groups-list'), data=bad_data) + self.assertEqual(response.status_code, 400) + self.assertIn('must have at least one instrument configuration', str(response.content)) + def test_default_guide_mode_for_spectrograph(self): good_data = self.generic_payload.copy() response = self.client.post(reverse('api:request_groups-list'), data=good_data)