From ac1f34119722a23c44c749bb5b2d02a7f217c3fe Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 22 Aug 2019 17:19:39 +0200
Subject: [PATCH] proper handling for undefined project id when searching for
 drugs

---
 .../api/projects/drugs/DrugController.java    |  7 ++--
 .../api/projects/drugs/DrugRestImpl.java      | 13 ++++---
 .../web/DrugControllerIntegrationTest.java    | 36 +++++++++++++++++++
 3 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/drugs/DrugController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/drugs/DrugController.java
index fe9519beb2..544e491001 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/drugs/DrugController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/drugs/DrugController.java
@@ -8,8 +8,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import lcsb.mapviewer.annotation.services.DrugSearchException;
-import lcsb.mapviewer.api.BaseController;
-import lcsb.mapviewer.api.QueryException;
+import lcsb.mapviewer.api.*;
 
 @RestController
 @RequestMapping(value = "/projects/{projectId}/", produces = MediaType.APPLICATION_JSON_VALUE)
@@ -28,7 +27,7 @@ public class DrugController extends BaseController {
       @PathVariable(value = "projectId") String projectId,
       @RequestParam(value = "columns", defaultValue = "") String columns,
       @RequestParam(value = "query", defaultValue = "") String query,
-      @RequestParam(value = "target", defaultValue = "") String target) throws QueryException {
+      @RequestParam(value = "target", defaultValue = "") String target) throws QueryException, ObjectNotFoundException {
     if (!query.equals("")) {
       return drugController.getDrugsByQuery(projectId, columns, query);
     } else if (target.contains(":")) {
@@ -43,7 +42,7 @@ public class DrugController extends BaseController {
   @PreAuthorize("hasAnyAuthority('IS_ADMIN', 'READ_PROJECT:' + #projectId)")
   @GetMapping(value = "drugs/suggestedQueryList")
   public List<String> getSuggestedQueryList(@PathVariable(value = "projectId") String projectId)
-      throws DrugSearchException {
+      throws DrugSearchException, ObjectNotFoundException {
     return drugController.getSuggestedQueryList(projectId);
   }
 
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/drugs/DrugRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/drugs/DrugRestImpl.java
index 420e788f38..0966b33218 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/drugs/DrugRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/drugs/DrugRestImpl.java
@@ -41,10 +41,10 @@ public class DrugRestImpl extends BaseRestImpl {
   }
 
   public List<Map<String, Object>> getDrugsByQuery(String projectId, String columns, String query)
-      throws QueryException {
+      throws QueryException, ObjectNotFoundException {
     Model model = getModelService().getLastModelByProjectId(projectId);
     if (model == null) {
-      throw new QueryException("Project with given id doesn't exist");
+      throw new ObjectNotFoundException("Project with given id doesn't exist");
     }
     Project project = getProjectService().getProjectByProjectId(projectId);
 
@@ -128,10 +128,10 @@ public class DrugRestImpl extends BaseRestImpl {
   }
 
   public List<Map<String, Object>> getDrugsByTarget(String projectId, String targetType, String targetId,
-      String columns) throws QueryException {
+      String columns) throws QueryException, ObjectNotFoundException {
     Model model = getModelService().getLastModelByProjectId(projectId);
     if (model == null) {
-      throw new QueryException("Project with given id doesn't exist");
+      throw new ObjectNotFoundException("Project with given id doesn't exist");
     }
     Project project = getProjectService().getProjectByProjectId(projectId);
 
@@ -176,8 +176,11 @@ public class DrugRestImpl extends BaseRestImpl {
     return targets;
   }
 
-  public List<String> getSuggestedQueryList(String projectId) throws DrugSearchException {
+  public List<String> getSuggestedQueryList(String projectId) throws DrugSearchException, ObjectNotFoundException {
     Project project = getProjectService().getProjectByProjectId(projectId);
+    if (project == null) {
+      throw new ObjectNotFoundException("Project with given id doesn't exist");
+    }
     return drugService.getSuggestedQueryList(project, project.getOrganism());
   }
 
diff --git a/web/src/test/java/lcsb/mapviewer/web/DrugControllerIntegrationTest.java b/web/src/test/java/lcsb/mapviewer/web/DrugControllerIntegrationTest.java
index c4ed2e324c..63d46b9800 100644
--- a/web/src/test/java/lcsb/mapviewer/web/DrugControllerIntegrationTest.java
+++ b/web/src/test/java/lcsb/mapviewer/web/DrugControllerIntegrationTest.java
@@ -50,6 +50,30 @@ public class DrugControllerIntegrationTest extends ControllerIntegrationTest {
         .andExpect(status().is2xxSuccessful());
   }
 
+  @Test
+  public void testSearchDrugsInUndefinedProject() throws Exception {
+    MockHttpSession session = createSession(TEST_ADMIN_LOGIN, TEST_ADMIN_PASSWORD);
+
+    RequestBuilder request = get("/projects/*/drugs:search?query=xyz")
+        .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+        .session(session);
+
+    mockMvc.perform(request)
+        .andExpect(status().isNotFound());
+  }
+
+  @Test
+  public void testSearchDrugsByTargetInUndefinedProject() throws Exception {
+    MockHttpSession session = createSession(TEST_ADMIN_LOGIN, TEST_ADMIN_PASSWORD);
+
+    RequestBuilder request = get("/projects/*/drugs:search?target=ALIAS:123")
+        .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+        .session(session);
+
+    mockMvc.perform(request)
+        .andExpect(status().isNotFound());
+  }
+
   @Test
   public void testGetSuggestedList() throws Exception {
     MockHttpSession session = createSession(TEST_ADMIN_LOGIN, TEST_ADMIN_PASSWORD);
@@ -62,4 +86,16 @@ public class DrugControllerIntegrationTest extends ControllerIntegrationTest {
         .andExpect(status().is2xxSuccessful());
   }
 
+  @Test
+  public void testGetSuggestedListWithUndefinedProject() throws Exception {
+    MockHttpSession session = createSession(TEST_ADMIN_LOGIN, TEST_ADMIN_PASSWORD);
+
+    RequestBuilder request = get("/projects/*/drugs/suggestedQueryList")
+        .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+        .session(session);
+
+    mockMvc.perform(request)
+        .andExpect(status().isNotFound());
+  }
+
 }
-- 
GitLab