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 423c148756a1c3a025b31c4fba1edce594ea1a91..917158fd804fb534db802f2ffb7c5db4d6d12ace 100755 --- a/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py +++ b/SAS/TMSS/backend/test/t_tmssapp_specification_REST_API.py @@ -2168,15 +2168,16 @@ class TaskBlueprintTestCase(unittest.TestCase): r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_blueprint/', test_data, 400, {}) self.assertTrue('This field may not be null' in str(r_dict['specifications_template'])) - def test_task_blueprint_allows_missing_draft(self): + def test_task_blueprint_prevents_missing_draft(self): tb_test_data = test_data_creator.TaskBlueprint(draft_url=self.draft_url, template_url=self.template_url, scheduling_unit_blueprint_url=self.scheduling_unit_blueprint_url) # test data test_data = dict(tb_test_data) test_data['draft'] = None - # POST data and assert response - r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_blueprint/', test_data, 201, {}) + # POST invalid data and assert response + r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_blueprint/', test_data, 400, {}) + self.assertTrue('This field may not be null' in str(r_dict['draft'])) def test_task_blueprint_prevents_missing_scheduling_unit_blueprint(self): tb_test_data = test_data_creator.TaskBlueprint(draft_url=self.draft_url, template_url=self.template_url, scheduling_unit_blueprint_url=self.scheduling_unit_blueprint_url) @@ -2205,7 +2206,7 @@ class TaskBlueprintTestCase(unittest.TestCase): # assert GET_and_assert_equal_expected_code(self, url, 404) - def test_task_blueprint_SETNULL_behavior_on_task_draft_deleted(self): + def test_task_blueprint_PROTECT_behavior_on_task_draft_deleted(self): draft_data = test_data_creator.TaskDraft() draft_url = test_data_creator.post_data_and_get_url(draft_data, '/task_draft/') tb_test_data = test_data_creator.TaskBlueprint(draft_url=draft_url, template_url=self.template_url, scheduling_unit_blueprint_url=self.scheduling_unit_blueprint_url) @@ -2219,9 +2220,11 @@ class TaskBlueprintTestCase(unittest.TestCase): # refresh draft_data, because it now has a reference to the blueprint draft_data = test_data_creator.get_response_as_json_object(draft_url) - # Try to DELETE dependency, verify that was successful + # Try to DELETE dependency, verify that was not successful + # Unfortunately we don't get a nice error in json, but a Django debug page on error 500... response = requests.delete(draft_url, auth=AUTH) - self.assertEqual(204, response.status_code) + self.assertEqual(500, response.status_code) + self.assertTrue("ProtectedError" in str(response.content)) def test_task_blueprint_CASCADE_behavior_on_scheduling_unit_blueprint_deleted(self): scheduling_unit_blueprint_url = test_data_creator.post_data_and_get_url(test_data_creator.SchedulingUnitBlueprint(), '/scheduling_unit_blueprint/') @@ -2506,15 +2509,16 @@ class TaskRelationBlueprintTestCase(unittest.TestCase): r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_relation_blueprint/', test_data, 400, {}) self.assertTrue('This field may not be null' in str(r_dict['selection_template'])) - def test_task_relation_blueprint_allows_missing_draft(self): - trb_test_data = test_data_creator.TaskRelationBlueprint(draft_url=self.draft_url, template_url=self.template_url, input_role_url=self.input_role_url, consumer_url=self.consumer_url, producer_url=self.producer_url) + def test_task_relation_blueprint_prevents_missing_draft(self): + trb_test_data = test_data_creator.TaskRelationBlueprint(draft_url=self.draft_url, template_url=self.template_url, input_role_url=self.input_role_url, consumer_url=self.consumer_url) # test data test_data = dict(trb_test_data) test_data['draft'] = None # POST invalid data and assert response - r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_relation_blueprint/', test_data, 201, {}) + r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_relation_blueprint/', test_data, 400, {}) + self.assertTrue('This field may not be null' in str(r_dict['draft'])) def test_task_relation_blueprint_prevents_missing_producer(self): trb_test_data = test_data_creator.TaskRelationBlueprint(draft_url=self.draft_url, template_url=self.template_url, input_role_url=self.input_role_url, consumer_url=self.consumer_url, producer_url=self.producer_url) @@ -2691,14 +2695,11 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): @classmethod def setUpClass(cls) -> None: - cls.task_blueprint = test_data_creator.post_data_and_get_response_as_json_object(test_data_creator.TaskBlueprint(), '/task_blueprint/') - - @classmethod - def fast_create_new_task_blueprint_url(cls): - '''create a new task_blueprint object, based on existing one, with only new name, returning new url''' - tbp = dict(cls.task_blueprint) - tbp['name'] = str(uuid.uuid4()) - return test_data_creator.post_data_and_get_url(tbp, '/task_blueprint/') + cls.task_draft1_url = test_data_creator.post_data_and_get_response_as_json_object(test_data_creator.TaskDraft(), '/task_draft/')['url'] + cls.task_draft2_url = test_data_creator.post_data_and_get_response_as_json_object(test_data_creator.TaskDraft(), '/task_draft/')['url'] + cls.sr_draft_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskSchedulingRelationDraft(first_url=cls.task_draft1_url, second_url=cls.task_draft2_url), '/task_scheduling_relation_draft/') + cls.task_blueprint1_url = test_data_creator.post_data_and_get_response_as_json_object(test_data_creator.TaskBlueprint(draft_url=cls.task_draft1_url), '/task_blueprint/')['url'] + cls.task_blueprint2_url = test_data_creator.post_data_and_get_response_as_json_object(test_data_creator.TaskBlueprint(draft_url=cls.task_draft2_url), '/task_blueprint/')['url'] def test_task_scheduling_relation_blueprint_list_apiformat(self): r = requests.get(BASE_URL + '/task_scheduling_relation_blueprint/?format=api', auth=AUTH) @@ -2709,25 +2710,25 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): GET_and_assert_equal_expected_code(self, BASE_URL + '/task_scheduling_relation_blueprint/1234321/', 404) def test_task_scheduling_relation_blueprint_POST_and_GET(self): - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=test_data_creator.post_data_and_get_response_as_json_object(test_data_creator.TaskBlueprint(draft_url=self.task_draft2_url), '/task_blueprint/')['url'], draft_url=self.sr_draft_url, placement="after") # POST and GET a new item and assert correctness r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/', tsrb_test_data, 201, tsrb_test_data) url = r_dict['url'] GET_OK_and_assert_equal_expected_response(self, url, tsrb_test_data) def test_task_scheduling_relation_blueprint_unique_constraint(self): - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=test_data_creator.post_data_and_get_response_as_json_object(test_data_creator.TaskBlueprint(draft_url=self.task_draft2_url), '/task_blueprint/')['url'], draft_url=self.sr_draft_url, placement="after") POST_and_assert_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/', tsrb_test_data, 201, tsrb_test_data) # again should raise a unique constraint error, resulting in http 500 POST_and_assert_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/', tsrb_test_data, 500, tsrb_test_data) def test_task_scheduling_relation_blueprint_PUT_invalid_raises_error(self): - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=self.task_blueprint2_url, draft_url=self.sr_draft_url, placement="after") PUT_and_assert_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/9876789876/', tsrb_test_data, 404, {}) def test_task_scheduling_relation_blueprint_PUT(self): - tsrb_test_data1 = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") - tsrb_test_data2 = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data1 = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=test_data_creator.post_data_and_get_response_as_json_object(test_data_creator.TaskBlueprint(draft_url=self.task_draft2_url), '/task_blueprint/')['url'], draft_url=self.sr_draft_url, placement="after") + tsrb_test_data2 = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=test_data_creator.post_data_and_get_response_as_json_object(test_data_creator.TaskBlueprint(draft_url=self.task_draft2_url), '/task_blueprint/')['url'], draft_url=self.sr_draft_url, placement="after") # POST new item, verify r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/', tsrb_test_data1, 201, tsrb_test_data1) @@ -2739,7 +2740,7 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): GET_OK_and_assert_equal_expected_response(self, url, tsrb_test_data2) def test_task_scheduling_relation_blueprint_PATCH(self): - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=self.task_blueprint2_url, draft_url=self.sr_draft_url, placement="after") # POST new item, verify r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/', tsrb_test_data, 201, tsrb_test_data) url = r_dict['url'] @@ -2754,7 +2755,7 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): GET_OK_and_assert_equal_expected_response(self, url, expected_data) def test_task_scheduling_relation_blueprint_DELETE(self): - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=self.task_blueprint2_url, draft_url=self.sr_draft_url, placement="after") # POST new item, verify r_dict = POST_and_assert_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/', tsrb_test_data, 201, tsrb_test_data) url = r_dict['url'] @@ -2764,7 +2765,7 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): DELETE_and_assert_gone(self, url) def test_task_scheduling_relation_blueprint_prevents_missing_time_offset(self): - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=self.task_blueprint2_url, draft_url=self.sr_draft_url, placement="after") # test data test_data = dict(tsrb_test_data) test_data['time_offset'] = None @@ -2774,7 +2775,7 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): self.assertTrue('This field may not be null' in str(r_dict['time_offset'])) def test_task_scheduling_relation_blueprint_prevents_missing_time_first(self): - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=self.task_blueprint2_url, draft_url=self.sr_draft_url, placement="after") # test data test_data = dict(tsrb_test_data) @@ -2785,7 +2786,7 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): self.assertTrue('This field may not be null' in str(r_dict['first'])) def test_task_scheduling_relation_blueprint_prevents_missing_second(self): - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=self.task_blueprint2_url, draft_url=self.sr_draft_url, placement="after") # test data test_data = dict(tsrb_test_data) @@ -2796,7 +2797,7 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): self.assertTrue('This field may not be null' in str(r_dict['second'])) def test_task_scheduling_relation_blueprint_prevents_missing_placement(self): - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.fast_create_new_task_blueprint_url(), second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=self.task_blueprint1_url, second_url=self.task_blueprint2_url, draft_url=self.sr_draft_url, placement="after") # test data test_data = dict(tsrb_test_data) @@ -2809,7 +2810,7 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): def test_task_scheduling_relation_blueprint_CASCADE_behavior_on_task_blueprint_deleted(self): #Create test data first_task_blueprint_url = test_data_creator.post_data_and_get_url(test_data_creator.TaskBlueprint(), '/task_blueprint/') - tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=first_task_blueprint_url, second_url=self.fast_create_new_task_blueprint_url(), placement="after") + tsrb_test_data = test_data_creator.TaskSchedulingRelationBlueprint(first_url=first_task_blueprint_url, second_url=self.task_blueprint2_url, draft_url=self.sr_draft_url, placement="after") # POST new item url = POST_and_assert_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/', tsrb_test_data, 201, tsrb_test_data)['url'] @@ -2823,24 +2824,6 @@ class TaskSchedulingRelationBlueprintTestCase(unittest.TestCase): # assert GET_and_assert_equal_expected_code(self, url, 404) - def test_GET_TaskSchedulingRelationBlueprint_list_view_shows_entry(self): - - test_data_1 = TaskSchedulingRelationBlueprint_test_data() - models.TaskSchedulingRelationBlueprint.objects.create(**test_data_1) - nbr_results = models.TaskSchedulingRelationBlueprint.objects.count() - GET_and_assert_in_expected_response_result_list(self, BASE_URL + '/task_scheduling_relation_blueprint/', test_data_1, nbr_results) - - def test_GET_TaskSchedulingRelationBlueprint_view_returns_correct_entry(self): - - # setup - test_data_1 = TaskSchedulingRelationBlueprint_test_data() - test_data_2 = TaskSchedulingRelationBlueprint_test_data() - id1 = models.TaskSchedulingRelationBlueprint.objects.create(**test_data_1).id - id2 = models.TaskSchedulingRelationBlueprint.objects.create(**test_data_2).id - # assert - GET_OK_and_assert_equal_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/%s/' % id1, test_data_1) - GET_OK_and_assert_equal_expected_response(self, BASE_URL + '/task_scheduling_relation_blueprint/%s/' % id2, test_data_2) - class TaskSchedulingRelationDraftTestCase(unittest.TestCase): diff --git a/SAS/TMSS/backend/test/t_tmssapp_specification_django_API.py b/SAS/TMSS/backend/test/t_tmssapp_specification_django_API.py index 3a0ca74d9d48e9bcff090432026020fbe7cf8e0a..a8b240cf27f2de37e89120a6e13f9d8302289df4 100755 --- a/SAS/TMSS/backend/test/t_tmssapp_specification_django_API.py +++ b/SAS/TMSS/backend/test/t_tmssapp_specification_django_API.py @@ -874,18 +874,17 @@ class TaskBlueprintTest(unittest.TestCase): with self.assertRaises(IntegrityError): models.TaskBlueprint.objects.create(**test_data) - def test_TaskBlueprint_allows_missing_draft(self): + def test_TaskBlueprint_prevents_missing_scheduling_unit_blueprint(self): # setup test_data = dict(TaskBlueprint_test_data(task_draft=self.task_draft, scheduling_unit_blueprint=self.scheduling_unit_blueprint)) test_data['draft'] = None - trb = models.TaskBlueprint.objects.create(**test_data) # assert - self.assertIsNotNone(trb) - self.assertIsNone(trb.draft) + with self.assertRaises(IntegrityError): + models.TaskBlueprint.objects.create(**test_data) - def test_TaskBlueprint_allows_draft_deletion(self): + def test_TaskBlueprint_prevents_draft_deletion(self): # setup test_data = dict(TaskBlueprint_test_data()) blueprint = models.TaskBlueprint.objects.create(**test_data) @@ -893,10 +892,9 @@ class TaskBlueprintTest(unittest.TestCase): self.assertIsNotNone(blueprint.draft) draft = blueprint.draft - draft.delete() + with self.assertRaises(IntegrityError): + draft.delete() - blueprint.refresh_from_db() - self.assertIsNone(blueprint.draft) def test_TaskBlueprint_prevents_missing_scheduling_unit_blueprint(self): @@ -993,14 +991,14 @@ class TaskRelationBlueprintTest(unittest.TestCase): with self.assertRaises(IntegrityError): models.TaskRelationBlueprint.objects.create(**test_data) - def test_TaskRelationBlueprint_allows_missing_draft(self): + def test_TaskRelationBlueprint_prevents_missing_draft(self): # setup test_data = dict(TaskRelationBlueprint_test_data(producer=self.producer, consumer=self.consumer)) test_data['draft'] = None - trb = models.TaskRelationBlueprint.objects.create(**test_data) - self.assertIsNotNone(trb) - self.assertIsNone(trb.draft) + # assert + with self.assertRaises(IntegrityError): + models.TaskRelationBlueprint.objects.create(**test_data) def test_TaskRelationBlueprint_prevents_missing_producer(self): # setup diff --git a/SAS/TMSS/backend/test/tmss_test_data_rest.py b/SAS/TMSS/backend/test/tmss_test_data_rest.py index 2965cb508e6192723e43f595e4a7f68dc21d9888..9e8e2178803461d2b9801e02799312267a431eca 100644 --- a/SAS/TMSS/backend/test/tmss_test_data_rest.py +++ b/SAS/TMSS/backend/test/tmss_test_data_rest.py @@ -555,15 +555,18 @@ class TMSSRESTTestDataCreator(): return self._subtask_template_url - def TaskSchedulingRelationBlueprint(self, first_url=None, second_url=None, placement="after"): - + def TaskSchedulingRelationBlueprint(self, first_url=None, second_url=None, placement="after", draft_url=None): if first_url is None: first_url = self.cached_task_blueprint_url if second_url is None: second_url = self.cached_task_blueprint_url + if draft_url is None: + self.draft_url = self.post_data_and_get_url(self.TaskSchedulingRelationDraft(), '/task_scheduling_relation_draft/') + return {"tags": [], + "draft": draft_url, "first": first_url, "second": second_url, "placement": self.django_api_url + '/scheduling_relation_placement/%s'%placement, @@ -576,6 +579,7 @@ class TMSSRESTTestDataCreator(): if second_url is None: second_url = self.cached_task_draft_url return {"tags": [], + "blueprints": [], "blueprints": [], "first": first_url, "second": second_url,