summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-server
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2023-03-30 22:58:30 +0100
committerGitHub <noreply@github.com>2023-03-30 22:58:30 +0100
commit0db9d47d2b3062ca867e0a7aa33ba7205307d062 (patch)
tree3d6fc9128dd9ff82434c8ad112a01d023791cba5 /opendc-web/opendc-web-server
parent526d6cd6b48b30cf7bbe40478d57bbc67e7027cc (diff)
parente7d5c086832a24f3c6b98258b0b8eb1fbbd3336a (diff)
merge: Address issues with web UI (#145)
This pull request addresses several issues that have been reported for the OpenDC web UI. ## Implementation Notes :hammer_and_pick: * Update dependencies for web UI * Inform user when deleted topology is still used * Do not offset hover layer after dragging * Fix access to machines on lower shelves * Do not allow selection of empty unit * Fix rack deletion Fixes #135, #136, #137, #138, #139
Diffstat (limited to 'opendc-web/opendc-web-server')
-rw-r--r--opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java10
-rw-r--r--opendc-web/opendc-web-server/src/test/java/org/opendc/web/server/rest/user/TopologyResourceTest.java16
2 files changed, 26 insertions, 0 deletions
diff --git a/opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java b/opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java
index 2b66b64b..71491801 100644
--- a/opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java
+++ b/opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java
@@ -22,10 +22,12 @@
package org.opendc.web.server.rest.user;
+import io.quarkus.hibernate.orm.panache.Panache;
import io.quarkus.security.identity.SecurityIdentity;
import java.time.Instant;
import java.util.List;
import javax.annotation.security.RolesAllowed;
+import javax.persistence.PersistenceException;
import javax.transaction.Transactional;
import javax.validation.Valid;
import javax.ws.rs.Consumes;
@@ -193,6 +195,14 @@ public final class TopologyResource {
entity.updatedAt = Instant.now();
entity.delete();
+
+ try {
+ // Flush the results, so we can check whether the constraints are not violated
+ Panache.flush();
+ } catch (PersistenceException e) {
+ throw new WebApplicationException("Topology is still in use", 403);
+ }
+
return UserProtocol.toDto(entity, auth);
}
}
diff --git a/opendc-web/opendc-web-server/src/test/java/org/opendc/web/server/rest/user/TopologyResourceTest.java b/opendc-web/opendc-web-server/src/test/java/org/opendc/web/server/rest/user/TopologyResourceTest.java
index 21e35b09..c0746e7a 100644
--- a/opendc-web/opendc-web-server/src/test/java/org/opendc/web/server/rest/user/TopologyResourceTest.java
+++ b/opendc-web/opendc-web-server/src/test/java/org/opendc/web/server/rest/user/TopologyResourceTest.java
@@ -355,4 +355,20 @@ public final class TopologyResourceTest {
.statusCode(200)
.contentType(ContentType.JSON);
}
+
+ /**
+ * Test to delete a topology that is still being used by a scenario.
+ */
+ @Test
+ @TestSecurity(
+ user = "owner",
+ roles = {"openid"})
+ public void testDeleteUsed() {
+ given().pathParam("project", "1")
+ .when()
+ .delete("/1") // Topology 1 is still used by scenario 1 and 2
+ .then()
+ .statusCode(403)
+ .contentType(ContentType.JSON);
+ }
}