From d68988348f3c1308187b95c3a06720038df0a6f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20K=C3=BCnsem=C3=B6ller?=
 <jkuensem@physik.uni-bielefeld.de>
Date: Wed, 11 Jul 2018 16:33:05 +0000
Subject: [PATCH] Task LSMR-14: Reverted previously disimproved paths so that
 we have a working and contained package again; fixed model tests for new
 choices

---
 SAS/LSMR/src/lsmr/CMakeLists.txt              |  2 +-
 SAS/LSMR/src/lsmr/lsmrapp/CMakeLists.txt      |  2 +-
 .../lsmr/lsmrapp/migrations/CMakeLists.txt    |  2 +-
 .../src/lsmr/lsmrapp/models/CMakeLists.txt    |  2 +-
 .../src/lsmr/lsmrapp/models/specification.py  |  2 +-
 .../lsmr/lsmrapp/serializers/CMakeLists.txt   |  2 +-
 .../src/lsmr/lsmrapp/viewsets/CMakeLists.txt  |  2 +-
 SAS/LSMR/test/t_lsmrapp_models.py             | 55 +++++++++++--------
 8 files changed, 38 insertions(+), 31 deletions(-)

diff --git a/SAS/LSMR/src/lsmr/CMakeLists.txt b/SAS/LSMR/src/lsmr/CMakeLists.txt
index 4f8c3d83ba9..55ad4bf485a 100644
--- a/SAS/LSMR/src/lsmr/CMakeLists.txt
+++ b/SAS/LSMR/src/lsmr/CMakeLists.txt
@@ -9,6 +9,6 @@ set(_py_files
     )
 
 python_install(${_py_files}
-    DESTINATION lofar/sas/lsmr)
+    DESTINATION lofar/sas/lsmr/lsmr)
 
 add_subdirectory(lsmrapp)
diff --git a/SAS/LSMR/src/lsmr/lsmrapp/CMakeLists.txt b/SAS/LSMR/src/lsmr/lsmrapp/CMakeLists.txt
index 86a623341ff..4da7d6e44e2 100644
--- a/SAS/LSMR/src/lsmr/lsmrapp/CMakeLists.txt
+++ b/SAS/LSMR/src/lsmr/lsmrapp/CMakeLists.txt
@@ -9,7 +9,7 @@ set(_py_files
     )
 
 python_install(${_py_files}
-    DESTINATION lofar/sas/lsmr/lsmrapp)
+    DESTINATION lofar/sas/lsmr/lsmr/lsmrapp)
 
 
 add_subdirectory(migrations)
diff --git a/SAS/LSMR/src/lsmr/lsmrapp/migrations/CMakeLists.txt b/SAS/LSMR/src/lsmr/lsmrapp/migrations/CMakeLists.txt
index 2ac092bdd6d..9915ff16653 100644
--- a/SAS/LSMR/src/lsmr/lsmrapp/migrations/CMakeLists.txt
+++ b/SAS/LSMR/src/lsmr/lsmrapp/migrations/CMakeLists.txt
@@ -5,4 +5,4 @@ include(PythonInstall)
 FILE(GLOB _py_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.py)
 
 python_install(${_py_files}
-    DESTINATION lofar/sas/lsmr/lsmrapp/migrations)
\ No newline at end of file
+    DESTINATION lofar/sas/lsmr/lsmr/lsmrapp/migrations)
\ No newline at end of file
diff --git a/SAS/LSMR/src/lsmr/lsmrapp/models/CMakeLists.txt b/SAS/LSMR/src/lsmr/lsmrapp/models/CMakeLists.txt
index 0af75d8b170..ddb94230c05 100644
--- a/SAS/LSMR/src/lsmr/lsmrapp/models/CMakeLists.txt
+++ b/SAS/LSMR/src/lsmr/lsmrapp/models/CMakeLists.txt
@@ -7,4 +7,4 @@ set(_py_files
     )
 
 python_install(${_py_files}
-    DESTINATION lofar/sas/lsmr/lsmrapp/models)
+    DESTINATION lofar/sas/lsmr/lsmr/lsmrapp/models)
diff --git a/SAS/LSMR/src/lsmr/lsmrapp/models/specification.py b/SAS/LSMR/src/lsmr/lsmrapp/models/specification.py
index c3cb9aabbf3..933b8c8dc5d 100644
--- a/SAS/LSMR/src/lsmr/lsmrapp/models/specification.py
+++ b/SAS/LSMR/src/lsmr/lsmrapp/models/specification.py
@@ -123,7 +123,7 @@ class CopyReasonChoice(AbstractChoice):
 class WorkIORoles(Model):
     role = ForeignKey('RoleChoice', null=False, on_delete=CASCADE)
     datatype = ForeignKey('DatatypeChoice', null=False, on_delete=CASCADE)
-    dataformat = ForeignKey('DataformatChoice', null=False, on_delete=CASCADE)
+    dataformat = ForeignKey('DataformatChoice', null=False, on_delete=CASCADE)              # todo: <--- this needs to be an array of dataformats!
     outputs = ForeignKey("WorkRequestTemplate", related_name='role_output', on_delete=CASCADE, null=True)
     inputs = ForeignKey("WorkRequestTemplate", related_name='role_input', on_delete=CASCADE, null=True)
 
diff --git a/SAS/LSMR/src/lsmr/lsmrapp/serializers/CMakeLists.txt b/SAS/LSMR/src/lsmr/lsmrapp/serializers/CMakeLists.txt
index f4158794d56..c1cdf544c20 100644
--- a/SAS/LSMR/src/lsmr/lsmrapp/serializers/CMakeLists.txt
+++ b/SAS/LSMR/src/lsmr/lsmrapp/serializers/CMakeLists.txt
@@ -8,4 +8,4 @@ set(_py_files
     )
 
 python_install(${_py_files}
-    DESTINATION lofar/sas/lsmr/lsmrapp/serializers)
+    DESTINATION lofar/sas/lsmr/lsmr/lsmrapp/serializers)
diff --git a/SAS/LSMR/src/lsmr/lsmrapp/viewsets/CMakeLists.txt b/SAS/LSMR/src/lsmr/lsmrapp/viewsets/CMakeLists.txt
index 7c551c2273d..65ce74a51a2 100644
--- a/SAS/LSMR/src/lsmr/lsmrapp/viewsets/CMakeLists.txt
+++ b/SAS/LSMR/src/lsmr/lsmrapp/viewsets/CMakeLists.txt
@@ -7,4 +7,4 @@ set(_py_files
     )
 
 python_install(${_py_files}
-    DESTINATION lofar/sas/lsmr/lsmrapp/viewsets)
+    DESTINATION lofar/sas/lsmr/lsmr/lsmrapp/viewsets)
diff --git a/SAS/LSMR/test/t_lsmrapp_models.py b/SAS/LSMR/test/t_lsmrapp_models.py
index c906eecf115..f29f619c98d 100755
--- a/SAS/LSMR/test/t_lsmrapp_models.py
+++ b/SAS/LSMR/test/t_lsmrapp_models.py
@@ -21,8 +21,10 @@
 
 import unittest
 import rest_framework.test
+from lsmr.lsmrapp.populate import populate_choices
 from lsmr.lsmrapp import models
 
+
 from django.utils import timezone # can't use datetime due to offset-awareness
 
 client = rest_framework.test.APIClient()
@@ -360,35 +362,42 @@ class WorkIORolesTest(rest_framework.test.APITransactionTestCase):
 
     reset_sequences = True
 
-    # test data
-    test_data_1 = {"role": "CALIBRATOR",
-                   "datatype": "INSTRUMENT_MODEL",
-                   "dataformat": ['HDF5'],
-                   "outputs": None,
-                   "inputs": None,
-                   }
-
-    test_data_2 = {"role": "TARGET",
-                   "datatype": "VISIBILITIES",
-                   "dataformat": ['MEASUREMENTSET'],
-                   "outputs": None,
-                   "inputs": None,
-                   }
-
     def setUp(self):
-        pass
-
+        populate_choices(None, None)
+
+        # test data
+        self.test_data_1 = {"role": models.RoleChoice.objects.get(value='calibrator'),
+                            "datatype": models.DatatypeChoice.objects.get(value='instrument model'),
+                            "dataformat": models.DataformatChoice.objects.get(value='HDF5'),
+                            "outputs": None,
+                            "inputs": None}
+
+        self.test_data_2 = {"role": models.RoleChoice.objects.get(value='target'),
+                            "datatype": models.DatatypeChoice.objects.get(value='image'),
+                            "dataformat": models.DataformatChoice.objects.get(value='MeasurementSet'),
+                            "outputs": None,
+                            "inputs": None}
+
+    def assertDataWithUrls(self, data, expected):
+        """
+        object instances get returned as urls, check that the value is part of that url
+        """
+        for k, v in expected.items():
+            if isinstance(v, models.AbstractChoice):
+                v = v.value.replace(' ', '%20')
+                self.assertTrue(v in data[k])
+            else:
+                self.assertEqual(v, data[k])
 
     def test_GET_WorkIORoles_list_view_shows_entry(self):
 
         # setup
-        entry = models.WorkIORoles.objects.create(**self.test_data_1)
+        models.WorkIORoles.objects.create(**self.test_data_1)
 
         # assert
         response = client.get('/work_io_roles/', format='json', follow=True)
         self.assertEqual(response.status_code, 200)
-        for item in self.test_data_1.items():
-            self.assertIn(item, response.data[0].items())
+        self.assertDataWithUrls(response.data[0], self.test_data_1)
 
     def test_GET_WorkIORoles_view_returns_correct_entry(self):
 
@@ -401,10 +410,8 @@ class WorkIORolesTest(rest_framework.test.APITransactionTestCase):
         response2 = client.get('/work_io_roles/%s/' % id2, format='json', follow=True)
         self.assertEqual(response1.status_code, 200)
         self.assertEqual(response2.status_code, 200)
-        for item in self.test_data_1.items():
-            self.assertIn(item, response1.data.items())
-        for item in self.test_data_2.items():
-            self.assertIn(item, response2.data.items())
+        self.assertDataWithUrls(response1.data, self.test_data_1)
+        self.assertDataWithUrls(response2.data, self.test_data_2)
 
     @unittest.skip("Database does not enforce choices currently")
     def test_WorkIORoles_prevents_invalid_role(self):
-- 
GitLab