import django.test as dtest import rest_framework.test as rtest import unittest.mock from django.contrib.auth.models import User import rest_framework.status as response_status from lofardata.models import WorkSpecification, DataProduct import lofardata.tasks as tasks class TestWorkSpecificationRequest(rtest.APITestCase): def setUp(self): self.user = User.objects.create_superuser('admin') self.client.force_authenticate(self.user) @unittest.mock.patch('lofardata.tasks.define_work_specification.delay') def test_insert_work_request(self, mocked_task): # Mocking business mocked_task.return_value = unittest.mock.MagicMock() mocked_task.return_value.id = 'asyncresultid' # ---------------------------------- # Insert test data DataProduct.insert_dataproduct(12345, 'lta', 'myniceinstrument', 'ms', 'blubby', 'pipline', 'srm://lofarlta/mynice_file.tar.gz', 123456, {'dysco_compression': False}) response = self.client.post('/ldvspec/api/v1/workspecification/', data={'filters': {'obs_id': 12345}}, format='json') self.assertEqual(201, response.status_code) inserted_work_specification = response.json() mocked_task.assert_called_with(inserted_work_specification['id']) self.assertEqual('asyncresultid', inserted_work_specification['async_task_result']) tasks.define_work_specification(inserted_work_specification['id']) work_spec_object = WorkSpecification.objects.get(pk=inserted_work_specification['id']) self.assertTrue(work_spec_object.is_ready) self.assertEqual({'surls': ['srm://lofarlta/mynice_file.tar.gz']}, work_spec_object.inputs) @unittest.mock.patch('lofardata.tasks.define_work_specification.delay') def test_insert_work_request_nested_fields(self, mocked_task): # Mocking business mocked_task.return_value = unittest.mock.MagicMock() mocked_task.return_value.id = 'asyncresultid' # ---------------------------------- # Insert test data DataProduct.insert_dataproduct(12345, 'lta', 'myniceinstrument', 'ms', 'blubby', 'pipline', 'srm://lofarlta/mynice_file.tar.gz', 123456, {'dysco_compression': False}) DataProduct.insert_dataproduct(12345, 'lta', 'myniceinstrument', 'ms', 'blubby', 'pipline', 'srm://lofarlta/mynice_file_with_rhythm.tar.gz', 123456, {'dysco_compression': True}) response = self.client.post('/ldvspec/api/v1/workspecification/', data={'filters': {'obs_id': 12345, 'additional_meta__dysco_compression': True}}, format='json') self.assertEqual(201, response.status_code) inserted_work_specification = response.json() mocked_task.assert_called_with(inserted_work_specification['id']) self.assertEqual('asyncresultid', inserted_work_specification['async_task_result']) tasks.define_work_specification(inserted_work_specification['id']) work_spec_object = WorkSpecification.objects.get(pk=inserted_work_specification['id']) self.assertTrue(work_spec_object.is_ready) self.assertEqual({'surls': ['srm://lofarlta/mynice_file_with_rhythm.tar.gz']}, work_spec_object.inputs)