From c6729fb93c9f2d8c6a3d1cf2e2efe8b34409cd87 Mon Sep 17 00:00:00 2001
From: goei <JsXLRu>
Date: Mon, 29 Jun 2020 14:16:04 +0200
Subject: [PATCH] TMSS-166: Fix error during creation of TaskDraft test object
 for REST

---
 .../tmss/tmssapp/migrations/0001_initial.py   |  8 +++---
 .../src/tmss/tmssapp/models/specification.py  |  8 +++---
 .../tmss/tmssapp/serializers/specification.py |  4 +--
 SAS/TMSS/test/tmss_test_data_rest.py          | 28 +++++++++++++------
 4 files changed, 30 insertions(+), 18 deletions(-)

diff --git a/SAS/TMSS/src/tmss/tmssapp/migrations/0001_initial.py b/SAS/TMSS/src/tmss/tmssapp/migrations/0001_initial.py
index 84b3bfd3cc9..fb7a36f795f 100644
--- a/SAS/TMSS/src/tmss/tmssapp/migrations/0001_initial.py
+++ b/SAS/TMSS/src/tmss/tmssapp/migrations/0001_initial.py
@@ -697,12 +697,12 @@ class Migration(migrations.Migration):
         migrations.AddField(
             model_name='taskschedulingrelationdraft',
             name='first',
-            field=models.ForeignKey(help_text='Name of first Task Draft', on_delete=django.db.models.deletion.CASCADE, related_name='first_scheduling', to='tmssapp.TaskDraft'),
+            field=models.ForeignKey(help_text='Name of first Task Draft', on_delete=django.db.models.deletion.CASCADE, related_name='scheduling_relation_first', to='tmssapp.TaskDraft'),
         ),
         migrations.AddField(
             model_name='taskschedulingrelationdraft',
             name='second',
-            field=models.ForeignKey(help_text='Name of second Task Draft.', on_delete=django.db.models.deletion.CASCADE, related_name='second_scheduling', to='tmssapp.TaskDraft'),
+            field=models.ForeignKey(help_text='Name of second Task Draft.', on_delete=django.db.models.deletion.CASCADE, related_name='scheduling_relation_second', to='tmssapp.TaskDraft'),
         ),
         migrations.AddField(
             model_name='taskschedulingrelationblueprint',
@@ -712,12 +712,12 @@ class Migration(migrations.Migration):
         migrations.AddField(
             model_name='taskschedulingrelationblueprint',
             name='first',
-            field=models.ForeignKey(help_text='Name of first Task Blueprint', on_delete=django.db.models.deletion.CASCADE, related_name='first_scheduling', to='tmssapp.TaskBlueprint'),
+            field=models.ForeignKey(help_text='Name of first Task Blueprint', on_delete=django.db.models.deletion.CASCADE, related_name='scheduling_relation_first', to='tmssapp.TaskBlueprint'),
         ),
         migrations.AddField(
             model_name='taskschedulingrelationblueprint',
             name='second',
-            field=models.ForeignKey(help_text='Name of second Task Blueprint.', on_delete=django.db.models.deletion.CASCADE, related_name='second_scheduling', to='tmssapp.TaskBlueprint'),
+            field=models.ForeignKey(help_text='Name of second Task Blueprint.', on_delete=django.db.models.deletion.CASCADE, related_name='scheduling_relation_second', to='tmssapp.TaskBlueprint'),
         ),
         migrations.AddConstraint(
             model_name='taskrelationselectiontemplate',
diff --git a/SAS/TMSS/src/tmss/tmssapp/models/specification.py b/SAS/TMSS/src/tmss/tmssapp/models/specification.py
index cd064b2d63d..fb390765da0 100644
--- a/SAS/TMSS/src/tmss/tmssapp/models/specification.py
+++ b/SAS/TMSS/src/tmss/tmssapp/models/specification.py
@@ -415,12 +415,12 @@ class TaskRelationBlueprint(BasicCommon):
 class TaskSchedulingRelationDraft(BasicCommon):
     placement = ForeignKey('Placement', null=False, on_delete=PROTECT, help_text='Placement of first and second Task Draft')
     time_offset = FloatField(help_text='Time Offset between first and second Task Draft')
-    first = ForeignKey('TaskDraft', related_name='first_scheduling', on_delete=CASCADE, help_text='Name of first Task Draft')
-    second = ForeignKey('TaskDraft', related_name='second_scheduling', on_delete=CASCADE, help_text='Name of second Task Draft.')
+    first = ForeignKey('TaskDraft', related_name='scheduling_relation_first', on_delete=CASCADE, help_text='Name of first Task Draft')
+    second = ForeignKey('TaskDraft', related_name='scheduling_relation_second', on_delete=CASCADE, help_text='Name of second Task Draft.')
 
 
 class TaskSchedulingRelationBlueprint(BasicCommon):
     placement = ForeignKey('Placement', null=False, on_delete=PROTECT, help_text='Placement of first and second Task Blueprint')
     time_offset = FloatField(help_text='Time Offset between first and second Task Blueprint')
-    first = ForeignKey('TaskBlueprint', related_name='first_scheduling', on_delete=CASCADE, help_text='Name of first Task Blueprint')
-    second = ForeignKey('TaskBlueprint', related_name='second_scheduling', on_delete=CASCADE, help_text='Name of second Task Blueprint.')
+    first = ForeignKey('TaskBlueprint', related_name='scheduling_relation_first', on_delete=CASCADE, help_text='Name of first Task Blueprint')
+    second = ForeignKey('TaskBlueprint', related_name='scheduling_relation_second', on_delete=CASCADE, help_text='Name of second Task Blueprint.')
diff --git a/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py b/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py
index 5af5c637d46..a8b74f8dbfd 100644
--- a/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py
+++ b/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py
@@ -274,7 +274,7 @@ class TaskDraftSerializer(RelationalHyperlinkedModelSerializer):
     class Meta:
         model = models.TaskDraft
         fields = '__all__'
-        extra_fields = ['task_blueprints', 'produced_by', 'consumed_by', 'first_scheduling', 'second_scheduling']
+        extra_fields = ['task_blueprints', 'produced_by', 'consumed_by', 'scheduling_relation_first', 'scheduling_relation_second']
 
 
 class TaskBlueprintSerializer(RelationalHyperlinkedModelSerializer):
@@ -291,7 +291,7 @@ class TaskBlueprintSerializer(RelationalHyperlinkedModelSerializer):
     class Meta:
         model = models.TaskBlueprint
         fields = '__all__'
-        extra_fields = ['subtasks', 'produced_by', 'consumed_by', 'first_scheduling', 'second_scheduling']
+        extra_fields = ['subtasks', 'produced_by', 'consumed_by', 'scheduling_relation_first', 'scheduling_relation_second']
 
 
 class TaskRelationDraftSerializer(RelationalHyperlinkedModelSerializer):
diff --git a/SAS/TMSS/test/tmss_test_data_rest.py b/SAS/TMSS/test/tmss_test_data_rest.py
index 0a769de5fcd..865e74c738d 100644
--- a/SAS/TMSS/test/tmss_test_data_rest.py
+++ b/SAS/TMSS/test/tmss_test_data_rest.py
@@ -45,7 +45,13 @@ class TMSSRESTTestDataCreator():
 
     def post_data_and_get_url(self, data, url_postfix):
         """POST the given data the self.django_api_url+url_postfix, and return the response's url"""
-        return self.post_data_and_get_response_as_json_object(data, url_postfix)['url']
+        result = self.post_data_and_get_response_as_json_object(data, url_postfix)
+        try:
+            url = result['url']
+        except KeyError:
+            # Because I don't like 'Bad Request' errors, I want more content if it goes wrong
+            raise Exception("Error during POST request of '%s' result is '%s'" % (url_postfix, result))
+        return url
    
     #######################################################
     # the methods below can be used to create test data
@@ -219,9 +225,11 @@ class TMSSRESTTestDataCreator():
                 "specifications_template": template_url,
                 'task_blueprints': [],
                 'produced_by': [],
-                'consumed_by': []}
-    
-    
+                'consumed_by': [],
+                'scheduling_relation_first': [],
+                'scheduling_relation_second': []}
+
+
     def TaskRelationDraft(self, producer_url=None, consumer_url=None, template_url=None, input_role_url=None, output_role_url=None):
         if producer_url is None:
             producer_url = self.post_data_and_get_url(self.TaskDraft(), '/task_draft/')
@@ -266,7 +274,8 @@ class TMSSRESTTestDataCreator():
     
     def TaskBlueprint(self, name="my_TaskBlueprint", draft_url=None, template_url=None, scheduling_unit_blueprint_url=None):
         if draft_url is None:
-            draft_url = self.post_data_and_get_url(self.TaskDraft(), '/task_draft/')
+            task_draft = self.TaskDraft()
+            draft_url = self.post_data_and_get_url(task_draft, '/task_draft/')
     
         if template_url is None:
             template_url = self.post_data_and_get_url(self.TaskTemplate(), '/task_template/')
@@ -284,8 +293,10 @@ class TMSSRESTTestDataCreator():
                 "scheduling_unit_blueprint": scheduling_unit_blueprint_url,
                 "subtasks": [],
                 "produced_by": [],
-                "consumed_by": []}
-    
+                "consumed_by": [],
+                'scheduling_relation_first': [],
+                'scheduling_relation_second': []}
+
     def TaskRelationBlueprint(self, draft_url=None, template_url=None, input_role_url=None, output_role_url=None, consumer_url=None, producer_url=None):
         if draft_url is None:
             draft_url = self.post_data_and_get_url(self.TaskRelationDraft(), '/task_relation_draft/')
@@ -374,7 +385,8 @@ class TMSSRESTTestDataCreator():
             cluster_url = self.post_data_and_get_url(self.Cluster(), '/cluster/')
     
         if task_blueprint_url is None:
-            task_blueprint_url = self.post_data_and_get_url(self.TaskBlueprint(), '/task_blueprint/')
+            task_blueprint = self.TaskBlueprint()
+            task_blueprint_url = self.post_data_and_get_url(task_blueprint, '/task_blueprint/')
     
         if specifications_template_url is None:
             specifications_template_url = self.post_data_and_get_url(self.SubtaskTemplate(), '/subtask_template/')
-- 
GitLab