diff --git a/test_data/all_data/anything-data.ttl b/test_data/all_data/anything-data.ttl index 2ca73a175e..b9f016eaad 100644 --- a/test_data/all_data/anything-data.ttl +++ b/test_data/all_data/anything-data.ttl @@ -1892,7 +1892,20 @@ knora-base:listNodeName "List014"; knora-base:hasRootNode ; knora-base:listNodePosition 3; - rdfs:label "List014"@en . + rdfs:label "List014"@en ; + knora-base:hasSubListNode , . + + a knora-base:ListNode; + knora-base:listNodeName "first child of node 014"; + knora-base:hasRootNode ; + knora-base:listNodePosition 0; + rdfs:label "first child of node 014"@en . + + a knora-base:ListNode; + knora-base:listNodeName "second child of node 014"; + knora-base:hasRootNode ; + knora-base:listNodePosition 0; + rdfs:label "second child of node 014"@en . a knora-base:ListNode; knora-base:listNodeName "List015"; diff --git a/webapi/src/main/scala/org/knora/webapi/responders/admin/ListsResponderADM.scala b/webapi/src/main/scala/org/knora/webapi/responders/admin/ListsResponderADM.scala index aa3dbe9151..abcef8929c 100644 --- a/webapi/src/main/scala/org/knora/webapi/responders/admin/ListsResponderADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/responders/admin/ListsResponderADM.scala @@ -1794,7 +1794,7 @@ class ListsResponderADM(responderData: ResponderData) extends Responder(responde } // shift the siblings that were positioned after the deleted node, one place to left. - updatedChildren <- if (remainingChildren.size > 1) { + updatedChildren <- if (remainingChildren.size > 0) { for { shiftedChildren <- shiftNodes( startPos = positionOfDeletedNode + 1, diff --git a/webapi/src/test/scala/org/knora/webapi/e2e/admin/lists/DeleteListItemsRouteADME2ESpec.scala b/webapi/src/test/scala/org/knora/webapi/e2e/admin/lists/DeleteListItemsRouteADME2ESpec.scala index 53aea57f5e..2be4eef75d 100644 --- a/webapi/src/test/scala/org/knora/webapi/e2e/admin/lists/DeleteListItemsRouteADME2ESpec.scala +++ b/webapi/src/test/scala/org/knora/webapi/e2e/admin/lists/DeleteListItemsRouteADME2ESpec.scala @@ -97,6 +97,21 @@ class DeleteListItemsRouteADME2ESpec response.status should be(StatusCodes.Forbidden) } + "delete first of two child node and remaining child" in { + val encodedNodeUrl = java.net.URLEncoder.encode("http://rdfh.ch/lists/0001/notUsedList0141", "utf-8") + val request = Delete(baseApiUrl + s"/admin/lists/" + encodedNodeUrl) ~> addCredentials( + BasicHttpCredentials(anythingAdminUserCreds.user.email, anythingAdminUserCreds.password)) + val response: HttpResponse = singleAwaitingRequest(request) + response.status should be(StatusCodes.OK) + val node = AkkaHttpUtils.httpResponseToJson(response).fields("node").convertTo[ListNodeADM] + node.getNodeId should be("http://rdfh.ch/lists/0001/notUsedList014") + val children = node.getChildren + children.size should be(1) + // last child must be shifted one place to left + val leftChild = children.head + leftChild.id should be("http://rdfh.ch/lists/0001/notUsedList0142") + leftChild.position should be(0) + } "delete a middle node and shift its siblings" in { val encodedNodeUrl = java.net.URLEncoder.encode("http://rdfh.ch/lists/0001/notUsedList02", "utf-8") val request = Delete(baseApiUrl + s"/admin/lists/" + encodedNodeUrl) ~> addCredentials(