From ef31604c4d986dd8d9550490236979e92a13b945 Mon Sep 17 00:00:00 2001
From: Christopher Rhodes <christopher.rhodes@embl.de>
Date: Fri, 25 Oct 2024 11:02:09 +0200
Subject: [PATCH] ilastik and pipeline tests now all use TestServer request
 assertions

---
 tests/test_ilastik/test_ilastik.py         | 108 ++++++++-------------
 tests/test_ilastik/test_roiset_workflow.py |  33 +++----
 2 files changed, 57 insertions(+), 84 deletions(-)

diff --git a/tests/test_ilastik/test_ilastik.py b/tests/test_ilastik/test_ilastik.py
index 4e45dfb7..40ba7e0b 100644
--- a/tests/test_ilastik/test_ilastik.py
+++ b/tests/test_ilastik/test_ilastik.py
@@ -209,11 +209,11 @@ class TestServerTestCase(conf.TestServerBaseClass):
 
 class TestIlastikOverApi(TestServerTestCase):
     def test_httpexception_if_incorrect_project_file_loaded(self):
-        resp_load = self.assertPutSuccess(
+        self.assertPutFailure(
             'ilastik/seg/load/',
+            500,
             body={'project_file': 'improper.ilp'},
         )
-        self.assertEqual(resp_load.status_code, 500)
 
 
     def test_load_ilastik_pixel_model(self):
@@ -226,21 +226,18 @@ class TestIlastikOverApi(TestServerTestCase):
         return mid
 
     def test_load_another_ilastik_pixel_model(self):
-        model_id = self.test_load_ilastik_pixel_model()
-        resp_list_1st = self.assertGetSuccess('models').json()
-        self.assertEqual(len(resp_list_1st), 1, resp_list_1st)
-        resp_load_2nd = self.assertPutSuccess(
+        self.test_load_ilastik_pixel_model()
+        self.assertEqual(len(self.assertGetSuccess('models')), 1)
+        self.assertPutSuccess(
             'ilastik/seg/load/',
             body={'project_file': str(ilastik_classifiers['px']['path']), 'duplicate': True},
         )
-        resp_list_2nd = self.assertGetSuccess('models').json()
-        self.assertEqual(len(resp_list_2nd), 2, resp_list_2nd)
-        resp_load_3rd = self.assertPutSuccess(
+        self.assertEqual(len(self.assertGetSuccess('models')), 2)
+        self.assertPutSuccess(
             'ilastik/seg/load/',
             body={'project_file': str(ilastik_classifiers['px']['path']), 'duplicate': False},
         )
-        resp_list_3rd = self.assertGetSuccess('models').json()
-        self.assertEqual(len(resp_list_3rd), 2, resp_list_3rd)
+        self.assertEqual(len(self.assertGetSuccess('models')), 2)
 
     def test_load_ilastik_pixel_model_with_params(self):
         params = {
@@ -248,67 +245,55 @@ class TestIlastikOverApi(TestServerTestCase):
             'px_class': 0,
             'px_prob_threshold': 0.5
         }
-        resp_load = self.assertPutSuccess(
+        mid = self.assertPutSuccess(
             'ilastik/seg/load/',
             body=params,
-        )
-        self.assertEqual(resp_load.status_code, 200, resp_load.json())
-        model_id = resp_load.json()['model_id']
-        mods = self.assertGetSuccess('models').json()
+        )['model_id']
+        mods = self.assertGetSuccess('models')
         self.assertEqual(len(mods), 1)
-        self.assertEqual(mods[model_id]['params']['px_prob_threshold'], 0.5)
+        self.assertEqual(mods[mid]['params']['px_prob_threshold'], 0.5)
 
 
     def test_load_ilastik_pxmap_to_obj_model(self):
-        resp_load = self.assertPutSuccess(
+        mid = self.assertPutSuccess(
             'ilastik/pxmap_to_obj/load/',
             body={'project_file': str(ilastik_classifiers['pxmap_to_obj']['path'])},
-        )
-        model_id = resp_load.json()['model_id']
-
-        self.assertEqual(resp_load.status_code, 200, resp_load.json())
-        resp_list = self.assertGetSuccess('models')
-        self.assertEqual(resp_list.status_code, 200)
-        rj = resp_list.json()
-        self.assertEqual(rj[model_id]['class'], 'IlastikObjectClassifierFromPixelPredictionsModel')
-        return model_id
+        )['model_id']
+        rl = self.assertGetSuccess('models')
+        self.assertEqual(rl[mid]['class'], 'IlastikObjectClassifierFromPixelPredictionsModel')
+        return mid
 
     def test_load_ilastik_model_with_model_id(self):
-        mid = 'new_model_id'
-        resp_load = self.assertPutSuccess(
+        nmid = 'new_model_id'
+        rmid = self.assertPutSuccess(
             'ilastik/pxmap_to_obj/load/',
+            query={
+                'model_id': nmid,
+            },
             body={
                 'project_file': str(ilastik_classifiers['pxmap_to_obj']['path']),
-                'model_id': mid,
             },
-        )
-        res_mid = resp_load.json()['model_id']
-        self.assertEqual(res_mid, mid)
+        )['model_id']
+        self.assertEqual(rmid, nmid)
 
     def test_load_ilastik_seg_to_obj_model(self):
-        resp_load = self.assertPutSuccess(
+        mid = self.assertPutSuccess(
             'ilastik/seg_to_obj/load/',
             body={'project_file': str(ilastik_classifiers['seg_to_obj']['path'])},
-        )
-        model_id = resp_load.json()['model_id']
-
-        self.assertEqual(resp_load.status_code, 200, resp_load.json())
-        resp_list = self.assertGetSuccess('models')
-        self.assertEqual(resp_list.status_code, 200)
-        rj = resp_list.json()
-        self.assertEqual(rj[model_id]['class'], 'IlastikObjectClassifierFromSegmentationModel')
-        return model_id
+        )['model_id']
+        rl = self.assertGetSuccess('models')
+        self.assertEqual(rl[mid]['class'], 'IlastikObjectClassifierFromSegmentationModel')
+        return mid
 
     def test_ilastik_infer_pixel_probability(self):
         fname = self.copy_input_file_to_server()
-        model_id = self.test_load_ilastik_pixel_model()
-        in_acc_id = self.assertPutSuccess(f'accessors/read_from_file/{fname}').json()
+        mid = self.test_load_ilastik_pixel_model()
+        acc_id = self.assertPutSuccess(f'accessors/read_from_file/{fname}')
 
-        resp_infer = self.assertPutSuccess(
+        self.assertPutSuccess(
             f'pipelines/segment',
-            body={'model_id': model_id, 'accessor_id': in_acc_id, 'channel': 0},
+            body={'model_id': mid, 'accessor_id': acc_id, 'channel': 0},
         )
-        self.assertEqual(resp_infer.status_code, 200, resp_infer.content.decode())
 
 
     def test_ilastik_infer_px_then_ob(self):
@@ -316,9 +301,9 @@ class TestIlastikOverApi(TestServerTestCase):
         px_model_id = self.test_load_ilastik_pixel_model()
         ob_model_id = self.test_load_ilastik_pxmap_to_obj_model()
 
-        in_acc_id = self.assertPutSuccess(f'accessors/read_from_file/{fname}').json()
+        in_acc_id = self.assertPutSuccess(f'accessors/read_from_file/{fname}')
 
-        resp_infer = self.assertPutSuccess(
+        self.assertPutSuccess(
             'ilastik/pipelines/pixel_then_object_classification/infer/',
             body={
                 'px_model_id': px_model_id,
@@ -327,7 +312,6 @@ class TestIlastikOverApi(TestServerTestCase):
                 'channel': 0,
             }
         )
-        self.assertEqual(resp_infer.status_code, 200, resp_infer.content.decode())
 
 
 class TestIlastikOnMultichannelInputs(TestServerTestCase):
@@ -394,38 +378,32 @@ class TestIlastikOnMultichannelInputs(TestServerTestCase):
         """
         copyfile(
             self.pa_input_image,
-            Path(self.assertGetSuccess('paths').json()['inbound_images']) / self.pa_input_image.name
+            Path(self.assertGetSuccess('paths')['inbound_images']) / self.pa_input_image.name
         )
 
-        in_acc_id = self.assertPutSuccess(f'accessors/read_from_file/{self.pa_input_image.name}').json()
+        in_acc_id = self.assertPutSuccess(f'accessors/read_from_file/{self.pa_input_image.name}')
 
-        resp_load_px = self.assertPutSuccess(
+        px_model_id = self.assertPutSuccess(
             'ilastik/seg/load/',
             body={'project_file': str(self.pa_px_classifier)},
-        )
-        self.assertEqual(resp_load_px.status_code, 200, resp_load_px.json())
-        px_model_id = resp_load_px.json()['model_id']
+        )['model_id']
 
-        resp_load_ob = self.assertPutSuccess(
+        ob_model_id  = self.assertPutSuccess(
             'ilastik/pxmap_to_obj/load/',
             body={'project_file': str(self.pa_ob_pxmap_classifier)},
-        )
-        self.assertEqual(resp_load_ob.status_code, 200, resp_load_ob.json())
-        ob_model_id = resp_load_ob.json()['model_id']
+        )['model_id']
 
         # run the pipeline
-        resp_infer = self.assertPutSuccess(
+        obmap_id = self.assertPutSuccess(
             'ilastik/pipelines/pixel_then_object_classification/infer/',
             body={
                 'accessor_id': in_acc_id,
                 'px_model_id': px_model_id,
                 'ob_model_id': ob_model_id,
             }
-        )
-        self.assertEqual(resp_infer.status_code, 200, resp_infer.content.decode())
+        )['output_accessor_id']
 
         # save output object map to file and compare
-        obmap_id = resp_infer.json()['output_accessor_id']
         obmap_acc = self.get_accessor(obmap_id)
         self.assertEqual(obmap_acc.shape_dict['C'], 1)
 
diff --git a/tests/test_ilastik/test_roiset_workflow.py b/tests/test_ilastik/test_roiset_workflow.py
index 1b824fee..5f799089 100644
--- a/tests/test_ilastik/test_roiset_workflow.py
+++ b/tests/test_ilastik/test_roiset_workflow.py
@@ -136,33 +136,30 @@ class TestRoiSetWorkflowOverApi(conf.TestServerBaseClass, BaseTestRoiSetMonoProd
         return conf.TestServerBaseClass.setUp(self)
 
     def test_trivial_api_response(self):
-        resp = self.assertGetSuccess('')
-        self.assertEqual(resp.status_code, 200)
+        self.assertGetSuccess('')
 
     def test_load_input_accessor(self):
         fname = self.copy_input_file_to_server()
-        return self.assertPutSuccess(f'accessors/read_from_file/{fname}').json()
+        return self.assertPutSuccess(f'accessors/read_from_file/{fname}')
 
     def test_load_pixel_classifier(self):
-        resp = self.assertPutSuccess(
+        mid = self.assertPutSuccess(
             'ilastik/seg/load/',
             body={'project_file': self._get_models()['pixel_classifier_segmentation']['project_file']},
-        )
-        model_id = resp.json()['model_id']
-        self.assertTrue(model_id.startswith('IlastikPixelClassifierModel'))
-        return model_id
+        )['model_id']
+        self.assertTrue(mid.startswith('IlastikPixelClassifierModel'))
+        return mid
 
     def test_load_object_classifier(self):
-        resp = self.assertPutSuccess(
+        mid = self.assertPutSuccess(
             'ilastik/seg_to_obj/load/',
             body={'project_file': self._get_models()['object_classifier']['project_file']},
-        )
-        model_id = resp.json()['model_id']
-        self.assertTrue(model_id.startswith('IlastikObjectClassifierFromSegmentationModel'))
-        return model_id
+        )['model_id']
+        self.assertTrue(mid.startswith('IlastikObjectClassifierFromSegmentationModel'))
+        return mid
 
     def _object_map_workflow(self, ob_classifer_id):
-        resp = self.assertPutSuccess(
+        oid = self.assertPutSuccess(
             'pipelines/roiset_to_obmap/infer',
             body={
                 'accessor_id': self.test_load_input_accessor(),
@@ -173,11 +170,9 @@ class TestRoiSetWorkflowOverApi(conf.TestServerBaseClass, BaseTestRoiSetMonoProd
                 'roi_params': self._get_roi_params(),
                 'export_params': self._get_export_params(),
             },
-        )
-        self.assertEqual(resp.status_code, 200, resp.json())
-        oid = resp.json()['output_accessor_id']
-        obmap_fn = self.assertPutSuccess(f'/accessors/write_to_file/{oid}').json()
-        where_out = self.assertGetSuccess('paths').json()['outbound_images']
+        )['output_accessor_id']
+        obmap_fn = self.assertPutSuccess(f'/accessors/write_to_file/{oid}')
+        where_out = self.assertGetSuccess('paths')['outbound_images']
         obmap_fp = Path(where_out) / obmap_fn
         self.assertTrue(obmap_fp.exists())
         return generate_file_accessor(obmap_fp)
-- 
GitLab