def test_build_target_fields(self, mock_validate, mock_insts, mock_filters, mock_proposals): """Test _build_target_fields method.""" mock_validate.return_value = [] mock_insts.return_value = self.instrument_choices mock_filters.return_value = self.filter_choices mock_proposals.return_value = self.proposal_choices # Test correct population of target fields for a sidereal target with self.subTest(): form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) self.assertDictEqual({ 'name': self.st.name, 'type': 'ICRS', 'ra': self.st.ra, 'dec': self.st.dec, 'proper_motion_ra': self.st.pm_ra, 'proper_motion_dec': self.st.pm_dec, 'epoch': self.st.epoch }, form._build_target_fields()) # Test correct population of target fields for a non-sidereal target with self.subTest(): self.valid_form_data['target_id'] = self.nst.id form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) self.assertDictContainsSubset({ 'name': self.nst.name, 'type': 'ORBITAL_ELEMENTS', 'epochofel': self.nst.epoch_of_elements, 'orbinc': self.nst.inclination, 'longascnode': self.nst.lng_asc_node, 'argofperih': self.nst.arg_of_perihelion, 'meananom': self.nst.mean_anomaly, 'meandist': self.nst.semimajor_axis }, form._build_target_fields())
def test_observation_payload(self, mock_make_request, mock_build_configuration, mock_build_location, mock_validate, mock_insts, mock_filters, mock_proposals): """Test observation_payload method.""" mock_build_configuration.return_value = {} mock_build_location.return_value = {} mock_validate.return_value = [] mock_insts.return_value = self.instrument_choices mock_filters.return_value = self.filter_choices mock_proposals.return_value = self.proposal_choices # Test a non-static cadenced form with self.subTest(): form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) obs_payload = form.observation_payload() self.assertDictContainsSubset( {'name': 'test', 'proposal': 'sampleproposal', 'ipp_value': 0.5, 'operator': 'SINGLE', 'observation_type': 'NORMAL'}, obs_payload ) self.assertNotIn('cadence', obs_payload['requests'][0]) # Test a static cadence form with self.subTest(): mock_response = Response() mock_response._content = str.encode(json.dumps({'test': 'test_static_cadence'})) mock_response.status_code = 200 mock_make_request.return_value = mock_response self.valid_form_data['period'] = 60 self.valid_form_data['jitter'] = 15 form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) self.assertDictEqual({'test': 'test_static_cadence'}, form.observation_payload())
def test_clean_and_validate(self, mock_validate, mock_insts, mock_filters, mock_proposals): """Test clean_start, clean_end, and is_valid()""" mock_validate.return_value = [] mock_insts.return_value = self.instrument_choices mock_filters.return_value = self.filter_choices mock_proposals.return_value = self.proposal_choices # Test that a valid form returns True, and that start and end are cleaned properly form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) self.assertEqual('2020-11-03T00:00:00', form.cleaned_data['start']) self.assertEqual('2020-11-04T00:00:00', form.cleaned_data['end']) # Test that an invalid form returns False self.valid_form_data.pop('target_id') form = LCOBaseObservationForm(self.valid_form_data) self.assertFalse(form.is_valid())
def test_build_guiding_config(self, mock_validate, mock_insts, mock_filters, mock_proposals): """Test _build_guiding_config method.""" mock_validate.return_value = [] mock_insts.return_value = self.instrument_choices mock_filters.return_value = self.filter_choices mock_proposals.return_value = self.proposal_choices form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) self.assertDictEqual({}, form._build_guiding_config())
def test_build_location(self, mock_get_instruments, mock_validate, mock_insts, mock_filters, mock_proposals): """Test _build_location method.""" mock_get_instruments.return_value = generate_lco_instrument_choices() mock_validate.return_value = [] mock_insts.return_value = self.instrument_choices mock_filters.return_value = self.filter_choices mock_proposals.return_value = self.proposal_choices form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) self.assertDictEqual({'telescope_class': '0m4'}, form._build_location())
def test_build_configuration(self, mock_validate, mock_insts, mock_filters, mock_proposals): """Test _build_configuration method.""" mock_validate.return_value = [] mock_insts.return_value = self.instrument_choices mock_filters.return_value = self.filter_choices mock_proposals.return_value = self.proposal_choices form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) configuration = form._build_configuration() self.assertDictContainsSubset( {'type': 'EXPOSE', 'instrument_type': '0M4-SCICAM-SBIG', 'constraints': {'max_airmass': 3}}, configuration) for key in ['target', 'instrument_configs', 'acquisition_config', 'guiding_config']: self.assertIn(key, configuration)
def test_build_location(self, mock_get_instruments, mock_validate, mock_insts, mock_filters, mock_proposals): """Test _build_location method.""" mock_get_instruments.return_value = { k: v for k, v in instrument_response.items() if 'SOAR' not in k } mock_validate.return_value = [] mock_insts.return_value = self.instrument_choices mock_filters.return_value = self.filter_choices mock_proposals.return_value = self.proposal_choices form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) self.assertDictEqual({'telescope_class': '0m4'}, form._build_location())
def test_build_instrument_config(self, mock_validate, mock_insts, mock_filters, mock_proposals): """Test _build_instrument_config method.""" mock_validate.return_value = [] mock_insts.return_value = self.instrument_choices mock_filters.return_value = self.filter_choices mock_proposals.return_value = self.proposal_choices form = LCOBaseObservationForm(self.valid_form_data) self.assertTrue(form.is_valid()) self.assertEqual( [{'exposure_count': self.valid_form_data['exposure_count'], 'exposure_time': self.valid_form_data['exposure_time'], 'optical_elements': {'filter': self.valid_form_data['filter']} }], form._build_instrument_config() )