From 3cec0ef7956c6b99cc87773ca0652d8b96498f1d Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Sun, 17 Jan 2021 20:01:36 +0100
Subject: [PATCH] Bug #3612 - Fixed method getParentPath() in
 CreateNodeController class. Passes testSubPath() test in
 CreateNodeControllerTest now.

---
 .../oats/vospace/CreateNodeController.java    | 23 +++++++++++++++----
 .../vospace/CreateNodeControllerTest.java     |  2 +-
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/main/java/it/inaf/oats/vospace/CreateNodeController.java b/src/main/java/it/inaf/oats/vospace/CreateNodeController.java
index 1641824..1979ee7 100644
--- a/src/main/java/it/inaf/oats/vospace/CreateNodeController.java
+++ b/src/main/java/it/inaf/oats/vospace/CreateNodeController.java
@@ -63,8 +63,8 @@ public class CreateNodeController extends BaseNodeController {
         List<String> nodeGroups
                 = Arrays.asList(groupWritePropValues.get(0).split(" ", -1));
 
-        if (userGroups == null || 
-                !nodeGroups.stream().anyMatch((i) -> userGroups.contains(i))) {
+        if (userGroups == null
+                || !nodeGroups.stream().anyMatch((i) -> userGroups.contains(i))) {
             // If groups don't match check ownership at least
             List<String> nodeOwner
                     = getNodePropertyByURI(parentNode, "ivo://ivoa.net/vospace/core#creator");
@@ -114,13 +114,26 @@ public class CreateNodeController extends BaseNodeController {
 
     }
 
+    // This method assumes that URL is in the format /node1/node2/...
+    // multiple slashes as a single separator are allowed
+    // But the output has only single slash separators
     private String getParentPath(String path) {
-        String[] parsedPath = path.split("/");
+
+        String[] parsedPath = path.split("[/]+");
+
+        if (parsedPath.length < 2 || !parsedPath[0].isEmpty()) {
+            throw new IllegalArgumentException();
+        }
 
         StringBuilder sb = new StringBuilder();
+        sb.append("/");
 
-        for (int i = 0; i < parsedPath.length - 1; i++) {
-            sb.append("/").append(parsedPath[i]);
+        System.out.println(parsedPath.length);
+        for (int i = 1; i < parsedPath.length - 1; i++) {
+            sb.append(parsedPath[i]);
+            if (i < parsedPath.length - 2) {
+                sb.append("/");
+            }
         }
 
         return sb.toString();
diff --git a/src/test/java/it/inaf/oats/vospace/CreateNodeControllerTest.java b/src/test/java/it/inaf/oats/vospace/CreateNodeControllerTest.java
index 7439a9a..d812ef1 100644
--- a/src/test/java/it/inaf/oats/vospace/CreateNodeControllerTest.java
+++ b/src/test/java/it/inaf/oats/vospace/CreateNodeControllerTest.java
@@ -278,7 +278,7 @@ public class CreateNodeControllerTest {
         verifyArguments();
     }
     
-    //@Test
+    @Test
     public void testSubPath() throws Exception {
 
         String requestBody = getResourceFileContent("create-unstructured-data-node.xml")
-- 
GitLab