From d9ff51f5622b2409075fc64c7f8d0af52b0a2768 Mon Sep 17 00:00:00 2001
From: Bryan Brancotte <bryan.brancotte@pasteur.fr>
Date: Mon, 30 Oct 2023 17:10:43 +0100
Subject: [PATCH] update python tests, raise 404 when initTable does not exist

---
 jass/server.py           |  5 ++++-
 jass/test/__init__.py    |  4 ++++
 jass/test/test_server.py | 34 ++++++++++++++++++++++++++++++----
 3 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/jass/server.py b/jass/server.py
index 27f6094e..da2feb99 100644
--- a/jass/server.py
+++ b/jass/server.py
@@ -55,7 +55,10 @@ async def read_index():
 @app.post("/api/phenotypes", response_model=List[Phenotype])
 def phenotypes_list(project_name: ProjectNameModel):
     """List phenotypes"""
-    return get_available_phenotypes(os.path.join(config["DATA_DIR"], project_name.initTableName))
+    try:
+        return get_available_phenotypes(os.path.join(config["DATA_DIR"], project_name.initTableName))
+    except FileNotFoundError as e:  # initTable does not exists
+        raise HTTPException(status_code=404, detail=str(e))
 
 @app.get("/api/initmeta")
 def inittable_meta():
diff --git a/jass/test/__init__.py b/jass/test/__init__.py
index 25cecd22..7f6ab04b 100644
--- a/jass/test/__init__.py
+++ b/jass/test/__init__.py
@@ -30,6 +30,10 @@ class JassWebClientTestCase(JassTestCase):
         self.test_dir = tempfile.mkdtemp()
         config["DATA_DIR"] = self.test_dir
         shutil.copy(self.get_file_path_fn("initTable.hdf5"), self.test_dir)
+        try:
+            shutil.copy(self.get_file_path_fn("initTableTest1.hdf5"), self.test_dir)
+        except FileNotFoundError:
+            pass
 
         from jass.server import app
         self.testing_client = TestClient(app)
diff --git a/jass/test/test_server.py b/jass/test/test_server.py
index 4bf6b023..6d5eec95 100644
--- a/jass/test/test_server.py
+++ b/jass/test/test_server.py
@@ -13,22 +13,48 @@ from . import JassWebClientTestCase
 class TestDefaultController(JassWebClientTestCase):
     """DefaultController integration test stubs"""
 
-    test_folder = "data_test1"
+    test_folder = "data_real"
 
-    def test_phenotypes_get(self):
+    def test_phenotypes_post(self):
         """
         Test case retrieving available phenotypes
         """
-        response = self.testing_client.get("/api/phenotypes")
+        response = self.testing_client.post("/api/phenotypes", json={})
         self.assert200(response, "Response body is : " + response.content.decode("utf-8"))
 
+        response = self.testing_client.post(
+            "/api/phenotypes",
+            json={"initTableName": "initTable.hdf5"},
+        )
+        self.assert200(response, "Response body is : " + response.content.decode("utf-8"))
+        json_response_main = json.loads(response.content.decode("utf-8"))
+        phenotypes_main = set(p["id"] for p in json_response_main)
+
+        response = self.testing_client.post(
+            "/api/phenotypes",
+            json={"initTableName": "initTableTest1.hdf5"},
+        )
+        self.assert200(response, "Response body is : " + response.content.decode("utf-8"))
+        json_response_t1 = json.loads(response.content.decode("utf-8"))
+        phenotypes_t1 = set(p["id"] for p in json_response_t1)
+
+        self.assertNotEqual(json_response_t1, json_response_main)
+        self.assertNotEqual(phenotypes_main, phenotypes_t1)
+        self.assertEqual(phenotypes_main.intersection(phenotypes_t1), set())
+
+        response = self.testing_client.post(
+            "/api/phenotypes",
+            json={"initTableName": "initTableMissing.hdf5"},
+        )
+        self.assertEqual(response.status_code, 404, response.content.decode("utf-8"))
+
     def test_create_project(self):
         """
         Test case for creating a project
         """
         response = self.testing_client.post(
             "/api/projects",
-            json={"phenotypeID": ["z_DISNEY_POCAHONT"]},
+            json={"phenotypeID": ["z_MAGIC_FAST-GLUCOSE"]},
         )
         self.assert200(response, "Response body is : " + response.content.decode("utf-8"))
 
-- 
GitLab