From 8d6f6457103150b083b42643a960d2b66a837d1a Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Wed, 25 Jun 2025 14:31:48 -0700 Subject: [PATCH 01/37] Add basic version of StatusResponse class --- .../cwms/cda/data/dto/StatusResponse.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java diff --git a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java new file mode 100644 index 000000000..ee099c0c6 --- /dev/null +++ b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java @@ -0,0 +1,31 @@ +package cwms.cda.data.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public final class StatusResponse extends CwmsDTO{ + + @JsonProperty("response-message") + private final String response; + private final String identifier; + + public StatusResponse(String officeId, String response) { + super(officeId); + this.response = response; + // or should I change to null? Only occurs when there is no identifier + this.identifier = ""; + } + + public StatusResponse(String officeId, String response, String identifier) { + super(officeId); + this.response = response; + this.identifier = identifier; + } + + public String getResponse() { + return response; + } + + public String getIdentifier() { + return identifier; + } +} From 6a96c9d53376bb052d3bce231f0a4879237a38a4 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Wed, 25 Jun 2025 16:21:37 -0700 Subject: [PATCH 02/37] Add serialization/deserialization unit tests for StatusResponse --- .../cwms/cda/data/dto/StatusResponse.java | 18 +++++- .../cwms/cda/data/dto/StatusResponseTest.java | 58 +++++++++++++++++++ .../cwms/cda/data/dto/status_response.json | 5 ++ 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java create mode 100644 cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json diff --git a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java index ee099c0c6..ed05d173e 100644 --- a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java +++ b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java @@ -1,11 +1,22 @@ package cwms.cda.data.dto; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import cwms.cda.formatters.Formats; +import cwms.cda.formatters.annotations.FormattableWith; +import cwms.cda.formatters.json.JsonV1; + +@FormattableWith(contentType = Formats.JSONV1, formatter = JsonV1.class, aliases = {Formats.DEFAULT, Formats.JSON}) +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonNaming(PropertyNamingStrategies.KebabCaseStrategy.class) +@JsonPropertyOrder({"office-id", "response", "identifier"}) public final class StatusResponse extends CwmsDTO{ - @JsonProperty("response-message") + @JsonProperty(required = true) private final String response; + private final String identifier; public StatusResponse(String officeId, String response) { @@ -15,7 +26,8 @@ public StatusResponse(String officeId, String response) { this.identifier = ""; } - public StatusResponse(String officeId, String response, String identifier) { + @JsonCreator + public StatusResponse(@JsonProperty("office-id") String officeId, @JsonProperty("response") String response, @JsonProperty("identifier") String identifier) { super(officeId); this.response = response; this.identifier = identifier; diff --git a/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java b/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java new file mode 100644 index 000000000..8e4c40734 --- /dev/null +++ b/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java @@ -0,0 +1,58 @@ +package cwms.cda.data.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import cwms.cda.formatters.ContentType; +import cwms.cda.formatters.Formats; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +import static org.junit.jupiter.api.Assertions.*; + +final class StatusResponseTest { + + @Test + void createStatusResponse_allFieldsProvided_Success() { + // all three fields provided + StatusResponse item = new StatusResponse("TestOffice", "TestMessage", "TestIdentifier123"); + assertAll(() -> assertEquals("TestOffice", item.getOfficeId(), "The office ID does not match the provided value"), + () -> assertEquals("TestMessage", item.getResponse(), "The response message does not match the provided value"), + () -> assertEquals("TestIdentifier123", item.getIdentifier(), "The identifier does not match the provided value")); + // only officeId and response message provided + StatusResponse item2 = new StatusResponse("TestOffice2", "TestMessage2"); + assertAll(() -> assertEquals("TestOffice2", item2.getOfficeId(), "The office ID does not match the provided value"), + () -> assertEquals("TestMessage2", item2.getResponse(), "The response message does not match the provided value")); + } + + + @Test + void createStatusResponse_serialize_roundtrip() { + StatusResponse statusResponse = new StatusResponse("Office123", "Message123", "Identifier123"); + ContentType contentType = new ContentType(Formats.JSON); + String json = Formats.format(contentType, statusResponse); + StatusResponse deserialized = Formats.parseContent(contentType, json, StatusResponse.class); + assertAll( + () -> assertEquals(statusResponse.getOfficeId(), deserialized.getOfficeId(), "deserialized Office ID does not match provided value"), + () -> assertEquals(statusResponse.getResponse(), deserialized.getResponse(), "deserialized response does not match provided value"), + () -> assertEquals(statusResponse.getIdentifier(), deserialized.getIdentifier(), "deserialized identifier does not match provided value") + ); + } + + @Test + void createStatusResponse_deserialize_roundtrip() throws IOException { + StatusResponse statusResponse = new StatusResponse("Office123", "Message123", "Identifier123"); + InputStream resource = this.getClass().getResourceAsStream("/cwms/cda/data/dto/status_response.json"); + assertNotNull(resource); + String json = IOUtils.toString(resource, StandardCharsets.UTF_8); + ContentType contentType = new ContentType(Formats.JSON); + StatusResponse deserialized = Formats.parseContent(contentType, json, StatusResponse.class); + assertAll( + () -> assertEquals(statusResponse.getOfficeId(), deserialized.getOfficeId(), "deserialized Office ID does not match provided value"), + () -> assertEquals(statusResponse.getResponse(), deserialized.getResponse(), "deserialized response does not match provided value"), + () -> assertEquals(statusResponse.getIdentifier(), deserialized.getIdentifier(), "deserialized identifier does not match provided value") + ); + } +} diff --git a/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json b/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json new file mode 100644 index 000000000..9df8af83d --- /dev/null +++ b/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json @@ -0,0 +1,5 @@ +{ + "office-id": "Office123", + "response": "Message123", + "identifier": "Identifier123" +} \ No newline at end of file From 83ca1e8683ba941ec2f4a64e7d483941eebbc5e9 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Tue, 1 Jul 2025 10:49:12 -0700 Subject: [PATCH 03/37] Get rid of harcoded vars in StatusResponse --- .../java/cwms/cda/data/dto/StatusResponse.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java index ed05d173e..b0708142b 100644 --- a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java +++ b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java @@ -11,23 +11,25 @@ @FormattableWith(contentType = Formats.JSONV1, formatter = JsonV1.class, aliases = {Formats.DEFAULT, Formats.JSON}) @JsonInclude(JsonInclude.Include.NON_NULL) @JsonNaming(PropertyNamingStrategies.KebabCaseStrategy.class) -@JsonPropertyOrder({"office-id", "response", "identifier"}) public final class StatusResponse extends CwmsDTO{ @JsonProperty(required = true) - private final String response; + private String response; - private final String identifier; + private String identifier; + + // NOT FOR USE, only for Jackson deserialization + public StatusResponse() { + super(""); + } public StatusResponse(String officeId, String response) { super(officeId); this.response = response; - // or should I change to null? Only occurs when there is no identifier this.identifier = ""; } - @JsonCreator - public StatusResponse(@JsonProperty("office-id") String officeId, @JsonProperty("response") String response, @JsonProperty("identifier") String identifier) { + public StatusResponse(String officeId, String response, String identifier) { super(officeId); this.response = response; this.identifier = identifier; From 277eea033dd200e4f4532e159e10401e6bdb6d74 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Tue, 1 Jul 2025 13:17:45 -0700 Subject: [PATCH 04/37] Make tests more realistic --- .../java/cwms/cda/data/dto/StatusResponse.java | 4 +++- .../cwms/cda/data/dto/StatusResponseTest.java | 16 ++++++++-------- .../cwms/cda/data/dto/status_response.json | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java index b0708142b..8da1ddc07 100644 --- a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java +++ b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java @@ -7,7 +7,9 @@ import cwms.cda.formatters.annotations.FormattableWith; import cwms.cda.formatters.json.JsonV1; - +/** + * Class for creating a JSON message for when there is a successful (non-error) response + */ @FormattableWith(contentType = Formats.JSONV1, formatter = JsonV1.class, aliases = {Formats.DEFAULT, Formats.JSON}) @JsonInclude(JsonInclude.Include.NON_NULL) @JsonNaming(PropertyNamingStrategies.KebabCaseStrategy.class) diff --git a/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java b/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java index 8e4c40734..51cb1d598 100644 --- a/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java +++ b/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java @@ -17,20 +17,20 @@ final class StatusResponseTest { @Test void createStatusResponse_allFieldsProvided_Success() { // all three fields provided - StatusResponse item = new StatusResponse("TestOffice", "TestMessage", "TestIdentifier123"); - assertAll(() -> assertEquals("TestOffice", item.getOfficeId(), "The office ID does not match the provided value"), - () -> assertEquals("TestMessage", item.getResponse(), "The response message does not match the provided value"), + StatusResponse item = new StatusResponse("SPK", "Created Location Level", "TestIdentifier123"); + assertAll(() -> assertEquals("SPK", item.getOfficeId(), "The office ID does not match the provided value"), + () -> assertEquals("Created Location Level", item.getResponse(), "The response message does not match the provided value"), () -> assertEquals("TestIdentifier123", item.getIdentifier(), "The identifier does not match the provided value")); // only officeId and response message provided - StatusResponse item2 = new StatusResponse("TestOffice2", "TestMessage2"); - assertAll(() -> assertEquals("TestOffice2", item2.getOfficeId(), "The office ID does not match the provided value"), - () -> assertEquals("TestMessage2", item2.getResponse(), "The response message does not match the provided value")); + StatusResponse item2 = new StatusResponse("SWT", "Updated Location"); + assertAll(() -> assertEquals("SWT", item2.getOfficeId(), "The office ID does not match the provided value"), + () -> assertEquals("Updated Location", item2.getResponse(), "The response message does not match the provided value")); } @Test void createStatusResponse_serialize_roundtrip() { - StatusResponse statusResponse = new StatusResponse("Office123", "Message123", "Identifier123"); + StatusResponse statusResponse = new StatusResponse("SPK", "Created Location Level", "Identifier123"); ContentType contentType = new ContentType(Formats.JSON); String json = Formats.format(contentType, statusResponse); StatusResponse deserialized = Formats.parseContent(contentType, json, StatusResponse.class); @@ -43,7 +43,7 @@ void createStatusResponse_serialize_roundtrip() { @Test void createStatusResponse_deserialize_roundtrip() throws IOException { - StatusResponse statusResponse = new StatusResponse("Office123", "Message123", "Identifier123"); + StatusResponse statusResponse = new StatusResponse("SPK", "Created Location Level", "Identifier123"); InputStream resource = this.getClass().getResourceAsStream("/cwms/cda/data/dto/status_response.json"); assertNotNull(resource); String json = IOUtils.toString(resource, StandardCharsets.UTF_8); diff --git a/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json b/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json index 9df8af83d..3c1b6286c 100644 --- a/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json +++ b/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json @@ -1,5 +1,5 @@ { - "office-id": "Office123", - "response": "Message123", + "office-id": "SPK", + "response": "Created Location Level", "identifier": "Identifier123" } \ No newline at end of file From 55897251ebad83f149e8091bdf021204bbdd814b Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Tue, 1 Jul 2025 14:08:27 -0700 Subject: [PATCH 05/37] Add possible StatusResponse usage in TurbineController, also fix OpenApi docs --- .../java/cwms/cda/api/TurbineController.java | 16 +++++++++++----- .../java/cwms/cda/data/dto/StatusResponse.java | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java b/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java index f6d409d58..f54ed57c1 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java @@ -29,6 +29,7 @@ import com.codahale.metrics.Timer; import cwms.cda.data.dao.JooqDao; import cwms.cda.data.dao.location.kind.TurbineDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.Turbine; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -155,7 +156,7 @@ public void getOne(@NotNull Context ctx, @NotNull String name) { method = HttpMethod.POST, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Turbine successfully stored to CWMS.") + @OpenApiResponse(status = STATUS_201, description = "Turbine successfully stored to CWMS.") } ) @Override @@ -169,7 +170,10 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.storeTurbine(turbine, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Turbine"); + String office = requiredParam(ctx, OFFICE); + StatusResponse re = new StatusResponse(office, "Turbine successfully stored to CWMS.", + turbine.getProjectId().getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -188,7 +192,7 @@ public void create(Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Turbine successfully renamed in to CWMS.") + @OpenApiResponse(status = STATUS_200, description = "Turbine successfully renamed in to CWMS.") } ) @Override @@ -199,7 +203,8 @@ public void update(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.renameTurbine(office, name, newName); - ctx.status(HttpServletResponse.SC_OK).json("Renamed Turbine"); + StatusResponse re = new StatusResponse(office, "Turbine successfully renamed in to CWMS", newName); + ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -233,7 +238,8 @@ public void delete(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.deleteTurbine(name, office, deleteMethod.getRule()); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(name + " Deleted"); + StatusResponse re = new StatusResponse(office, "Turbine successfully deleted from CWMS", name); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java index 8da1ddc07..c5ddcea71 100644 --- a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java +++ b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java @@ -18,6 +18,7 @@ public final class StatusResponse extends CwmsDTO{ @JsonProperty(required = true) private String response; + // Name or ID for identifying information private String identifier; // NOT FOR USE, only for Jackson deserialization From ad9fc06a682b7fdc53c94c1bac0b0eeb76ba8b78 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Tue, 1 Jul 2025 14:45:15 -0700 Subject: [PATCH 06/37] Make StatusResponse extend CwmsDTOBase, change response field to message, update tests and TurbineController accordingly --- .../java/cwms/cda/api/TurbineController.java | 7 +++--- .../cwms/cda/data/dto/StatusResponse.java | 22 +++++++---------- .../cwms/cda/data/dto/StatusResponseTest.java | 24 ++++++++----------- .../cwms/cda/data/dto/status_response.json | 3 +-- 4 files changed, 23 insertions(+), 33 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java b/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java index f54ed57c1..92c585478 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java @@ -170,8 +170,7 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.storeTurbine(turbine, failIfExists); - String office = requiredParam(ctx, OFFICE); - StatusResponse re = new StatusResponse(office, "Turbine successfully stored to CWMS.", + StatusResponse re = new StatusResponse("Turbine successfully stored to CWMS.", turbine.getProjectId().getName()); ctx.status(HttpServletResponse.SC_CREATED).json(re); } @@ -203,7 +202,7 @@ public void update(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.renameTurbine(office, name, newName); - StatusResponse re = new StatusResponse(office, "Turbine successfully renamed in to CWMS", newName); + StatusResponse re = new StatusResponse("Turbine successfully renamed in to CWMS", newName); ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -238,7 +237,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.deleteTurbine(name, office, deleteMethod.getRule()); - StatusResponse re = new StatusResponse(office, "Turbine successfully deleted from CWMS", name); + StatusResponse re = new StatusResponse("Turbine successfully deleted from CWMS", name); ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } diff --git a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java index c5ddcea71..b86cebf91 100644 --- a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java +++ b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java @@ -13,33 +13,29 @@ @FormattableWith(contentType = Formats.JSONV1, formatter = JsonV1.class, aliases = {Formats.DEFAULT, Formats.JSON}) @JsonInclude(JsonInclude.Include.NON_NULL) @JsonNaming(PropertyNamingStrategies.KebabCaseStrategy.class) -public final class StatusResponse extends CwmsDTO{ +public final class StatusResponse extends CwmsDTOBase{ @JsonProperty(required = true) - private String response; + private String message; // Name or ID for identifying information private String identifier; // NOT FOR USE, only for Jackson deserialization - public StatusResponse() { - super(""); - } + public StatusResponse() {} - public StatusResponse(String officeId, String response) { - super(officeId); - this.response = response; + public StatusResponse(String message) { + this.message = message; this.identifier = ""; } - public StatusResponse(String officeId, String response, String identifier) { - super(officeId); - this.response = response; + public StatusResponse(String message, String identifier) { + this.message = message; this.identifier = identifier; } - public String getResponse() { - return response; + public String getMessage() { + return message; } public String getIdentifier() { diff --git a/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java b/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java index 51cb1d598..00d27de4d 100644 --- a/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java +++ b/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java @@ -16,42 +16,38 @@ final class StatusResponseTest { @Test void createStatusResponse_allFieldsProvided_Success() { - // all three fields provided - StatusResponse item = new StatusResponse("SPK", "Created Location Level", "TestIdentifier123"); - assertAll(() -> assertEquals("SPK", item.getOfficeId(), "The office ID does not match the provided value"), - () -> assertEquals("Created Location Level", item.getResponse(), "The response message does not match the provided value"), + // both fields provided + StatusResponse item = new StatusResponse("Created Location Level", "TestIdentifier123"); + assertAll(() -> assertEquals("Created Location Level", item.getMessage(), "The response message does not match the provided value"), () -> assertEquals("TestIdentifier123", item.getIdentifier(), "The identifier does not match the provided value")); - // only officeId and response message provided - StatusResponse item2 = new StatusResponse("SWT", "Updated Location"); - assertAll(() -> assertEquals("SWT", item2.getOfficeId(), "The office ID does not match the provided value"), - () -> assertEquals("Updated Location", item2.getResponse(), "The response message does not match the provided value")); + // only message provided + StatusResponse item2 = new StatusResponse("Updated Location"); + assertAll(() -> assertEquals("Updated Location", item2.getMessage(), "The response message does not match the provided value")); } @Test void createStatusResponse_serialize_roundtrip() { - StatusResponse statusResponse = new StatusResponse("SPK", "Created Location Level", "Identifier123"); + StatusResponse statusResponse = new StatusResponse("Created Location Level", "Identifier123"); ContentType contentType = new ContentType(Formats.JSON); String json = Formats.format(contentType, statusResponse); StatusResponse deserialized = Formats.parseContent(contentType, json, StatusResponse.class); assertAll( - () -> assertEquals(statusResponse.getOfficeId(), deserialized.getOfficeId(), "deserialized Office ID does not match provided value"), - () -> assertEquals(statusResponse.getResponse(), deserialized.getResponse(), "deserialized response does not match provided value"), + () -> assertEquals(statusResponse.getMessage(), deserialized.getMessage(), "deserialized response does not match provided value"), () -> assertEquals(statusResponse.getIdentifier(), deserialized.getIdentifier(), "deserialized identifier does not match provided value") ); } @Test void createStatusResponse_deserialize_roundtrip() throws IOException { - StatusResponse statusResponse = new StatusResponse("SPK", "Created Location Level", "Identifier123"); + StatusResponse statusResponse = new StatusResponse("Created Location Level", "Identifier123"); InputStream resource = this.getClass().getResourceAsStream("/cwms/cda/data/dto/status_response.json"); assertNotNull(resource); String json = IOUtils.toString(resource, StandardCharsets.UTF_8); ContentType contentType = new ContentType(Formats.JSON); StatusResponse deserialized = Formats.parseContent(contentType, json, StatusResponse.class); assertAll( - () -> assertEquals(statusResponse.getOfficeId(), deserialized.getOfficeId(), "deserialized Office ID does not match provided value"), - () -> assertEquals(statusResponse.getResponse(), deserialized.getResponse(), "deserialized response does not match provided value"), + () -> assertEquals(statusResponse.getMessage(), deserialized.getMessage(), "deserialized response does not match provided value"), () -> assertEquals(statusResponse.getIdentifier(), deserialized.getIdentifier(), "deserialized identifier does not match provided value") ); } diff --git a/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json b/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json index 3c1b6286c..fe57427e2 100644 --- a/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json +++ b/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json @@ -1,5 +1,4 @@ { - "office-id": "SPK", - "response": "Created Location Level", + "message": "Created Location Level", "identifier": "Identifier123" } \ No newline at end of file From 795b6fbd214a9f7428bc3c32eec0581d948c5db1 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Tue, 1 Jul 2025 16:03:05 -0700 Subject: [PATCH 07/37] Add StatusResponse class to LevelsController and update basic IT (more work still necessary) --- .../java/cwms/cda/api/LevelsController.java | 13 ++++-- .../cwms/cda/api/LevelsControllerTestIT.java | 44 ++++++++++++++----- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/LevelsController.java b/cwms-data-api/src/main/java/cwms/cda/api/LevelsController.java index d6cdc684a..b8d6eb54d 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/LevelsController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/LevelsController.java @@ -43,6 +43,7 @@ import cwms.cda.api.enums.UnitSystem; import cwms.cda.data.dao.LocationLevelsDao; import cwms.cda.data.dao.LocationLevelsDaoImpl; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.locationlevel.ConstantLocationLevel; import cwms.cda.data.dto.locationlevel.LocationLevel; import cwms.cda.data.dto.locationlevel.LocationLevels; @@ -119,7 +120,8 @@ public void create(@NotNull Context ctx) { DSLContext dsl = getDslContext(ctx); LocationLevelsDao levelsDao = getLevelsDao(dsl); levelsDao.storeLocationLevel(level); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Location Level"); + StatusResponse re = new StatusResponse("Created Location Level", level.getLocationLevelId()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } catch (IOException e) { throw new IllegalArgumentException("Unable to parse the request body", e); } @@ -185,7 +187,8 @@ public void delete(@NotNull Context ctx, @NotNull String levelId) { ? DateUtils.parseUserDate(dateString, timezone) : null; LocationLevelsDao levelsDao = getLevelsDao(dsl); levelsDao.deleteLocationLevel(levelId, unmarshalledDateTime, office, cascadeDelete); - ctx.status(HttpServletResponse.SC_OK).json(levelId + " Deleted"); + StatusResponse re = new StatusResponse("CWMS Location Level Deleted", levelId); + ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -411,7 +414,8 @@ public void update(@NotNull Context ctx, @NotNull String oldLevelId) { if (!oldLevelId.equals(newLevelId)) { //if name changed then delete location with old name levelsDao.renameLocationLevel(oldLevelId, newLevelId, officeId); - ctx.status(HttpServletResponse.SC_OK).json("Renamed Location Level"); + StatusResponse re = new StatusResponse("Renamed Location Level", newLevelId); + ctx.status(HttpServletResponse.SC_OK).json(re); } else { String dateString = queryParamAsClass(ctx, new String[]{EFFECTIVE_DATE, DATE}, String.class, null, metrics, @@ -432,7 +436,8 @@ public void update(@NotNull Context ctx, @NotNull String oldLevelId) { levelFromBody, unmarshalledDateTime); levelsDao.storeLocationLevel(updatedLocationLevel); - ctx.status(HttpServletResponse.SC_OK).json("Updated Location Level"); + StatusResponse re = new StatusResponse("Updated Location Level", newLevelId); + ctx.status(HttpServletResponse.SC_OK).json(re); } } catch (JsonProcessingException ex) { throw new FormattingException("Failed to format location level update request", ex); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java index 73edd6d06..78d38ebb6 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java @@ -867,7 +867,9 @@ void testStoreRetrieveVirtualLocationLevels() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); //Read level with unit given() @@ -993,7 +995,9 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_2.json"); @@ -1010,7 +1014,9 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("virtual_level_value_1.Stor.Ave.1Day.Regulating")); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_3.json"); @@ -1027,7 +1033,9 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("virtual_level_value_2.Stor.Ave.1Day.Regulating")); //Read level with unit given() @@ -1180,7 +1188,9 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_2.json"); levelJson = levelJson.replace(oldLevelLoc2, levelLoc2); @@ -1198,7 +1208,9 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("virtual_level_value_1.Stor.Ave.1Day.Regulating")); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_3.json"); levelJson = levelJson.replace(oldLevelLoc3, levelLoc3); @@ -1216,7 +1228,9 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("virtual_level_value_2.Stor.Ave.1Day.Regulating")); //Read level with unit given() @@ -1403,7 +1417,9 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); //Read level with unit given() @@ -1588,7 +1604,9 @@ void testStoreSeasonalLevel() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("seasonalLoc6.Elev.Ave.1Day.tst")); given() .log().ifValidationFails(LogDetail.ALL, true) @@ -1638,7 +1656,9 @@ void testStoreTimeSeriesLevel() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("tsLocation123.Elev.Ave.1Day.Regulating")); given() .log().ifValidationFails(LogDetail.ALL, true) @@ -1686,7 +1706,9 @@ void testStoreConstantLevel() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("constLocation123.Elev.Ave.1Day.Regulating")); given() .log().ifValidationFails(LogDetail.ALL, true) From d193300753e20be5c1395907d2a814cfd205dcf9 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Wed, 2 Jul 2025 11:56:51 -0700 Subject: [PATCH 08/37] Add tests for TurbineController and finish tests for LevelsController --- .../test/java/cwms/cda/api/LevelsControllerTestIT.java | 8 ++++++-- .../src/test/java/cwms/cda/api/TurbineControllerIT.java | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java index 78d38ebb6..a28ccca5a 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java @@ -1483,7 +1483,9 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body("message", equalTo("CWMS Location Level Deleted")) + .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); break; case "no_date": given() @@ -1499,7 +1501,9 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body("message", equalTo("CWMS Location Level Deleted")) + .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating"));; break; default: fail("Invalid deletion method: " + deletionMethod); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java index b4f496b8a..a053f650a 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java @@ -123,6 +123,8 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Turbine successfully stored to CWMS.")) + .body("identifier", equalTo("PROJ_TURB_PHYS")) ; String office = TURBINE.getLocation().getOfficeId(); // Retrieve the Turbine and assert that it exists @@ -238,6 +240,8 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Turbine successfully stored to CWMS.")) + .body("identifier", equalTo("PROJ_TURB_PHYS")) ; String office = TURBINE.getLocation().getOfficeId(); // Retrieve the Turbine and assert that it exists From c65985ee5d9472c902d8dd750fc0aa5310606002 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Wed, 2 Jul 2025 12:56:08 -0700 Subject: [PATCH 09/37] Clean code: use levelId for testing identifier --- .../cwms/cda/api/LevelsControllerTestIT.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java index a28ccca5a..137ed6a4b 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java @@ -869,7 +869,7 @@ void testStoreRetrieveVirtualLocationLevels() throws Exception { .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); + .body("identifier", equalTo(levelId)); //Read level with unit given() @@ -997,7 +997,7 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); + .body("identifier", equalTo(levelId)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_2.json"); @@ -1016,7 +1016,7 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("virtual_level_value_1.Stor.Ave.1Day.Regulating")); + .body("identifier", equalTo(level1Id)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_3.json"); @@ -1035,7 +1035,7 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("virtual_level_value_2.Stor.Ave.1Day.Regulating")); + .body("identifier", equalTo(level2Id)); //Read level with unit given() @@ -1190,7 +1190,7 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); + .body("identifier", equalTo(levelId)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_2.json"); levelJson = levelJson.replace(oldLevelLoc2, levelLoc2); @@ -1210,7 +1210,7 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("virtual_level_value_1.Stor.Ave.1Day.Regulating")); + .body("identifier", equalTo(level1Id)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_3.json"); levelJson = levelJson.replace(oldLevelLoc3, levelLoc3); @@ -1230,7 +1230,7 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("virtual_level_value_2.Stor.Ave.1Day.Regulating")); + .body("identifier", equalTo(level2Id)); //Read level with unit given() @@ -1419,7 +1419,7 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); + .body("identifier", equalTo(levelId)); //Read level with unit given() @@ -1485,7 +1485,7 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) .body("message", equalTo("CWMS Location Level Deleted")) - .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating")); + .body("identifier", equalTo(levelId)); break; case "no_date": given() @@ -1503,7 +1503,7 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) .body("message", equalTo("CWMS Location Level Deleted")) - .body("identifier", equalTo("virtual_level_value.Stage.Ave.1Day.Regulating"));; + .body("identifier", equalTo(levelId));; break; default: fail("Invalid deletion method: " + deletionMethod); From 5aebacc719a6f92ed5bb9c35185d5e219018f6a8 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Wed, 2 Jul 2025 13:01:51 -0700 Subject: [PATCH 10/37] Use levelId in tests for identifier --- .../src/test/java/cwms/cda/api/LevelsControllerTestIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java index 137ed6a4b..748637349 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java @@ -1662,7 +1662,7 @@ void testStoreTimeSeriesLevel() throws Exception { .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("tsLocation123.Elev.Ave.1Day.Regulating")); + .body("identifier", equalTo(levelId)); given() .log().ifValidationFails(LogDetail.ALL, true) @@ -1712,7 +1712,7 @@ void testStoreConstantLevel() throws Exception { .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("constLocation123.Elev.Ave.1Day.Regulating")); + .body("identifier", equalTo(levelId)); given() .log().ifValidationFails(LogDetail.ALL, true) From 4cf86062879f9555b1f64d965eb234b36dc77d5a Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Wed, 2 Jul 2025 14:46:43 -0700 Subject: [PATCH 11/37] Add StatusResponse to LocationController and update tests --- .../java/cwms/cda/api/LocationController.java | 13 ++++++++---- .../cda/api/LocationControllerTestIT.java | 20 ++++++++++++++----- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java index 98556c834..58a590296 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java @@ -62,6 +62,7 @@ import cwms.cda.data.dao.LocationsDao; import cwms.cda.data.dao.LocationsDaoImpl; import cwms.cda.data.dto.Location; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; import cwms.cda.formatters.UnsupportedFormatException; @@ -306,7 +307,8 @@ public void create(@NotNull Context ctx) { Location locationFromBody = Formats.parseContent(contentType, ctx.body(), Location.class); boolean failIfExists = ctx.queryParamAsClass(FAIL_IF_EXISTS, Boolean.class).getOrDefault(true); locationsDao.storeLocation(locationFromBody, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Location"); + StatusResponse re = new StatusResponse("Created Location", locationFromBody.getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } catch (IOException ex) { CdaError re = new CdaError("failed to process request"); logger.log(Level.SEVERE, re.toString(), ex); @@ -351,10 +353,12 @@ public void update(@NotNull Context ctx, @NotNull String locationId) { if (!updatedLocation.getName().equalsIgnoreCase(existingLocation.getName())) { //if name changed then delete location with old name locationsDao.renameLocation(locationId, updatedLocation); - ctx.status(HttpServletResponse.SC_OK).json("Updated and renamed Location"); + ctx.status(HttpServletResponse.SC_OK).json(new StatusResponse("Updated and renamed Location", + updatedLocation.getName())); } else { locationsDao.storeLocation(updatedLocation, false); - ctx.status(HttpServletResponse.SC_OK).json("Updated Location"); + ctx.status(HttpServletResponse.SC_OK).json(new StatusResponse("Updated Location", + updatedLocation.getName())); } } catch (NotFoundException e) { CdaError re = new CdaError("Not found."); @@ -400,7 +404,8 @@ public void delete(@NotNull Context ctx, @NotNull String locationId) { LocationsDao locationsDao = getLocationsDao(dsl); boolean cascadeDelete = ctx.queryParamAsClass(CASCADE_DELETE, Boolean.class).getOrDefault(false); locationsDao.deleteLocation(locationId, office, cascadeDelete); - ctx.status(HttpServletResponse.SC_OK).json(locationId + " Deleted"); + StatusResponse re = new StatusResponse("Deleted CWMS Location", locationId); + ctx.status(HttpServletResponse.SC_OK).json(re); } catch (DataAccessException ex) { SQLException cause = ex.getCause(SQLException.class); if (cause != null && cause.getErrorCode() == 20031) { diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java index fc02a34e3..0adb75c34 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java @@ -140,7 +140,9 @@ void test_location_create_get_delete() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Created Location")) + .body("identifier", equalTo("LOC_TEST")); //Create associated time series so delete fails without cascade try { createTimeseries(officeId, location.getName() + ".Flow.Inst.~1Hour.0.cda-test"); @@ -193,7 +195,9 @@ void test_location_create_get_delete() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body("message", equalTo("Deleted CWMS Location")) + .body("identifier", equalTo("LOC_TEST")); // get it back given() @@ -381,7 +385,9 @@ void test_location_create_get_bad_units_delete() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body("message", equalTo("Deleted CWMS Location")) + .body("identifier", equalTo("LOC_TEST")); // get it back given() @@ -459,7 +465,9 @@ void test_create_update() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body("message", equalTo("Updated and renamed Location")) + .body("identifier", equalTo(updatedLocationName)); // get it back given() @@ -491,7 +499,9 @@ void test_create_update() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body("message", equalTo("Deleted CWMS Location")) + .body("identifier", equalTo(updatedLocationName)); } @Test From 670c8566918d851080e945c29fb0ca62060f3f2a Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Thu, 3 Jul 2025 10:27:40 -0700 Subject: [PATCH 12/37] Add StatusResponse to EmbankmentController and IT --- .../main/java/cwms/cda/api/EmbankmentController.java | 11 ++++++++--- .../java/cwms/cda/api/EmbankmentControllerIT.java | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java b/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java index a73527762..b9b1292bc 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java @@ -29,6 +29,7 @@ import com.codahale.metrics.Timer; import cwms.cda.data.dao.JooqDao; import cwms.cda.data.dao.location.kind.EmbankmentDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.Embankment; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -167,7 +168,9 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); EmbankmentDao dao = new EmbankmentDao(dsl); dao.storeEmbankment(embankment, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Embankment"); + StatusResponse re = new StatusResponse("Embankment successfully stored to CWMS", + embankment.getLocation().getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -197,7 +200,8 @@ public void update(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); EmbankmentDao dao = new EmbankmentDao(dsl); dao.renameEmbankment(office, name, newName); - ctx.status(HttpServletResponse.SC_OK).json("Renamed Embankment"); + StatusResponse re = new StatusResponse("Embankment successfully renamed in CWMS", newName); + ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -231,7 +235,8 @@ public void delete(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); EmbankmentDao dao = new EmbankmentDao(dsl); dao.deleteEmbankment(name, office, deleteMethod.getRule()); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(name + " Deleted"); + StatusResponse re = new StatusResponse("Embankment successfully deleted from CWMS", name); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java index 5ad96c44c..3005c014d 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java @@ -145,6 +145,8 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Embankment successfully stored to CWMS")) + .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) ; String office = EMBANKMENT.getLocation().getOfficeId(); // Retrieve the Embankment and assert that it exists @@ -267,6 +269,8 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Embankment successfully stored to CWMS")) + .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) ; String office = EMBANKMENT.getLocation().getOfficeId(); // Retrieve the Embankment and assert that it exists From bf83fa6262aabe00c9bf02752d3102f2c02e7b22 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Thu, 3 Jul 2025 10:45:16 -0700 Subject: [PATCH 13/37] Add StatusResponse to StreamLocation --- .../java/cwms/cda/api/StreamLocationController.java | 11 +++++++++-- .../cwms/cda/api/StreamLocationControllerTestIT.java | 8 ++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java index b611f6560..4ac1c7ed0 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java @@ -50,9 +50,11 @@ import static cwms.cda.api.Controllers.STREAM_ID_MASK; import static cwms.cda.api.Controllers.requiredParam; import cwms.cda.data.dao.StreamLocationDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.stream.StreamLocation; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; +import hec.lang.StatisticalParameter; import io.javalin.apibuilder.CrudHandler; import io.javalin.core.util.Header; import io.javalin.http.Context; @@ -204,7 +206,9 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); StreamLocationDao dao = new StreamLocationDao(dsl); dao.storeStreamLocation(streamLocation, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Stream Location"); + StatusResponse re = new StatusResponse("Stream Location successfully stored to CWMS.", + streamLocation.getId().getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -230,6 +234,8 @@ public void update(Context ctx, @NotNull String locationId) { DSLContext dsl = getDslContext(ctx); StreamLocationDao dao = new StreamLocationDao(dsl); dao.updateStreamLocation(streamLocation); + StatusResponse re = new StatusResponse("Stream Location successfully updated to CWMS.", + streamLocation.getId().getName()); ctx.status(HttpServletResponse.SC_NO_CONTENT).json("Updated Stream Location"); } } @@ -261,7 +267,8 @@ public void delete(@NotNull Context ctx, @NotNull String locationId) { DSLContext dsl = getDslContext(ctx); StreamLocationDao dao = new StreamLocationDao(dsl); dao.deleteStreamLocation(officeId, streamId, locationId); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json("Deleted Stream Location"); + StatusResponse re = new StatusResponse("Stream Location successfully deleted from CWMS.", streamId); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java index 14a8ceb27..bc4a955d2 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java @@ -146,7 +146,9 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Stream Location successfully stored to CWMS.")) + .body("identifier", equalTo(streamLocation.getId().getName())); String streamLocationId = streamLocation.getId().getName(); @@ -284,7 +286,9 @@ void test_get_all() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Stream Location successfully stored to CWMS.")) + .body("identifier", equalTo(streamLocation.getId().getName())); String office = streamLocation.getId().getOfficeId(); String streamLocationId = streamLocation.getId().getName(); From 887a5b6106ed37ea1b774b70fea4abff1b16485f Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Thu, 3 Jul 2025 11:07:16 -0700 Subject: [PATCH 14/37] Add office-id field back to StatusResponse --- .../java/cwms/cda/data/dto/StatusResponse.java | 14 +++++++++----- .../cwms/cda/data/dto/StatusResponseTest.java | 18 +++++++++++------- .../cwms/cda/data/dto/status_response.json | 3 ++- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java index b86cebf91..c939a9386 100644 --- a/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java +++ b/cwms-data-api/src/main/java/cwms/cda/data/dto/StatusResponse.java @@ -13,23 +13,27 @@ @FormattableWith(contentType = Formats.JSONV1, formatter = JsonV1.class, aliases = {Formats.DEFAULT, Formats.JSON}) @JsonInclude(JsonInclude.Include.NON_NULL) @JsonNaming(PropertyNamingStrategies.KebabCaseStrategy.class) -public final class StatusResponse extends CwmsDTOBase{ +public final class StatusResponse extends CwmsDTO{ + @JsonProperty(required = true) private String message; - // Name or ID for identifying information private String identifier; // NOT FOR USE, only for Jackson deserialization - public StatusResponse() {} + public StatusResponse() { + super(""); + } - public StatusResponse(String message) { + public StatusResponse(String officeId, String message) { + super(officeId); this.message = message; this.identifier = ""; } - public StatusResponse(String message, String identifier) { + public StatusResponse(String officeId, String message, String identifier) { + super(officeId); this.message = message; this.identifier = identifier; } diff --git a/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java b/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java index 00d27de4d..7e4dafd41 100644 --- a/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java +++ b/cwms-data-api/src/test/java/cwms/cda/data/dto/StatusResponseTest.java @@ -17,22 +17,25 @@ final class StatusResponseTest { @Test void createStatusResponse_allFieldsProvided_Success() { // both fields provided - StatusResponse item = new StatusResponse("Created Location Level", "TestIdentifier123"); - assertAll(() -> assertEquals("Created Location Level", item.getMessage(), "The response message does not match the provided value"), - () -> assertEquals("TestIdentifier123", item.getIdentifier(), "The identifier does not match the provided value")); + StatusResponse item = new StatusResponse("SPK", "Created Location Level", "LocationName123"); + assertAll(() -> assertEquals("SPK", item.getOfficeId(), "The office ID does not match the provided value"), + () -> assertEquals("Created Location Level", item.getMessage(), "The response message does not match the provided value"), + () -> assertEquals("LocationName123", item.getIdentifier(), "The identifier does not match the provided value")); // only message provided - StatusResponse item2 = new StatusResponse("Updated Location"); - assertAll(() -> assertEquals("Updated Location", item2.getMessage(), "The response message does not match the provided value")); + StatusResponse item2 = new StatusResponse("SPK", "Updated Location"); + assertAll(() -> assertEquals("SPK", item2.getOfficeId(), "The office ID does not match the provided value"), + () -> assertEquals("Updated Location", item2.getMessage(), "The response message does not match the provided value")); } @Test void createStatusResponse_serialize_roundtrip() { - StatusResponse statusResponse = new StatusResponse("Created Location Level", "Identifier123"); + StatusResponse statusResponse = new StatusResponse("SPK", "Created Location Level", "LocationName123"); ContentType contentType = new ContentType(Formats.JSON); String json = Formats.format(contentType, statusResponse); StatusResponse deserialized = Formats.parseContent(contentType, json, StatusResponse.class); assertAll( + () -> assertEquals(statusResponse.getOfficeId(), deserialized.getOfficeId(), "deserialized Office ID does not match provided value"), () -> assertEquals(statusResponse.getMessage(), deserialized.getMessage(), "deserialized response does not match provided value"), () -> assertEquals(statusResponse.getIdentifier(), deserialized.getIdentifier(), "deserialized identifier does not match provided value") ); @@ -40,13 +43,14 @@ void createStatusResponse_serialize_roundtrip() { @Test void createStatusResponse_deserialize_roundtrip() throws IOException { - StatusResponse statusResponse = new StatusResponse("Created Location Level", "Identifier123"); + StatusResponse statusResponse = new StatusResponse("SPK", "Created Location Level", "LocationName123"); InputStream resource = this.getClass().getResourceAsStream("/cwms/cda/data/dto/status_response.json"); assertNotNull(resource); String json = IOUtils.toString(resource, StandardCharsets.UTF_8); ContentType contentType = new ContentType(Formats.JSON); StatusResponse deserialized = Formats.parseContent(contentType, json, StatusResponse.class); assertAll( + () -> assertEquals(statusResponse.getOfficeId(), deserialized.getOfficeId(), "deserialized Office ID does not match provided value"), () -> assertEquals(statusResponse.getMessage(), deserialized.getMessage(), "deserialized response does not match provided value"), () -> assertEquals(statusResponse.getIdentifier(), deserialized.getIdentifier(), "deserialized identifier does not match provided value") ); diff --git a/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json b/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json index fe57427e2..1eed28a8b 100644 --- a/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json +++ b/cwms-data-api/src/test/resources/cwms/cda/data/dto/status_response.json @@ -1,4 +1,5 @@ { + "office-id": "SPK", "message": "Created Location Level", - "identifier": "Identifier123" + "identifier": "LocationName123" } \ No newline at end of file From 81a558e74774130f82b0fd2586614aa33509d80e Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Thu, 3 Jul 2025 11:49:12 -0700 Subject: [PATCH 15/37] Update Controllers and tests to include office-id --- .../java/cwms/cda/api/EmbankmentController.java | 7 ++++--- .../main/java/cwms/cda/api/LevelsController.java | 8 ++++---- .../java/cwms/cda/api/LocationController.java | 10 ++++++---- .../cwms/cda/api/StreamLocationController.java | 9 ++++++--- .../main/java/cwms/cda/api/TurbineController.java | 6 +++--- .../java/cwms/cda/api/EmbankmentControllerIT.java | 2 ++ .../java/cwms/cda/api/LevelsControllerTestIT.java | 15 ++++++++++++++- .../cwms/cda/api/LocationControllerTestIT.java | 5 +++++ .../cda/api/StreamLocationControllerTestIT.java | 2 ++ .../java/cwms/cda/api/TurbineControllerIT.java | 2 ++ 10 files changed, 48 insertions(+), 18 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java b/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java index b9b1292bc..d0ca6e56c 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java @@ -168,7 +168,8 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); EmbankmentDao dao = new EmbankmentDao(dsl); dao.storeEmbankment(embankment, failIfExists); - StatusResponse re = new StatusResponse("Embankment successfully stored to CWMS", + StatusResponse re = new StatusResponse(embankment.getLocation().getOfficeId(), + "Embankment successfully stored to CWMS", embankment.getLocation().getName()); ctx.status(HttpServletResponse.SC_CREATED).json(re); } @@ -200,7 +201,7 @@ public void update(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); EmbankmentDao dao = new EmbankmentDao(dsl); dao.renameEmbankment(office, name, newName); - StatusResponse re = new StatusResponse("Embankment successfully renamed in CWMS", newName); + StatusResponse re = new StatusResponse(office, "Embankment successfully renamed in CWMS", newName); ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -235,7 +236,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); EmbankmentDao dao = new EmbankmentDao(dsl); dao.deleteEmbankment(name, office, deleteMethod.getRule()); - StatusResponse re = new StatusResponse("Embankment successfully deleted from CWMS", name); + StatusResponse re = new StatusResponse(office, "Embankment successfully deleted from CWMS", name); ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/LevelsController.java b/cwms-data-api/src/main/java/cwms/cda/api/LevelsController.java index b8d6eb54d..ff2360207 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/LevelsController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/LevelsController.java @@ -120,7 +120,7 @@ public void create(@NotNull Context ctx) { DSLContext dsl = getDslContext(ctx); LocationLevelsDao levelsDao = getLevelsDao(dsl); levelsDao.storeLocationLevel(level); - StatusResponse re = new StatusResponse("Created Location Level", level.getLocationLevelId()); + StatusResponse re = new StatusResponse(level.getOfficeId(),"Created Location Level", level.getLocationLevelId()); ctx.status(HttpServletResponse.SC_CREATED).json(re); } catch (IOException e) { throw new IllegalArgumentException("Unable to parse the request body", e); @@ -187,7 +187,7 @@ public void delete(@NotNull Context ctx, @NotNull String levelId) { ? DateUtils.parseUserDate(dateString, timezone) : null; LocationLevelsDao levelsDao = getLevelsDao(dsl); levelsDao.deleteLocationLevel(levelId, unmarshalledDateTime, office, cascadeDelete); - StatusResponse re = new StatusResponse("CWMS Location Level Deleted", levelId); + StatusResponse re = new StatusResponse(office,"CWMS Location Level Deleted", levelId); ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -414,7 +414,7 @@ public void update(@NotNull Context ctx, @NotNull String oldLevelId) { if (!oldLevelId.equals(newLevelId)) { //if name changed then delete location with old name levelsDao.renameLocationLevel(oldLevelId, newLevelId, officeId); - StatusResponse re = new StatusResponse("Renamed Location Level", newLevelId); + StatusResponse re = new StatusResponse(officeId,"Renamed Location Level", newLevelId); ctx.status(HttpServletResponse.SC_OK).json(re); } else { String dateString = queryParamAsClass(ctx, @@ -436,7 +436,7 @@ public void update(@NotNull Context ctx, @NotNull String oldLevelId) { levelFromBody, unmarshalledDateTime); levelsDao.storeLocationLevel(updatedLocationLevel); - StatusResponse re = new StatusResponse("Updated Location Level", newLevelId); + StatusResponse re = new StatusResponse(officeId,"Updated Location Level", newLevelId); ctx.status(HttpServletResponse.SC_OK).json(re); } } catch (JsonProcessingException ex) { diff --git a/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java index 58a590296..56bcbab03 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java @@ -307,7 +307,7 @@ public void create(@NotNull Context ctx) { Location locationFromBody = Formats.parseContent(contentType, ctx.body(), Location.class); boolean failIfExists = ctx.queryParamAsClass(FAIL_IF_EXISTS, Boolean.class).getOrDefault(true); locationsDao.storeLocation(locationFromBody, failIfExists); - StatusResponse re = new StatusResponse("Created Location", locationFromBody.getName()); + StatusResponse re = new StatusResponse(locationFromBody.getOfficeId(),"Created Location", locationFromBody.getName()); ctx.status(HttpServletResponse.SC_CREATED).json(re); } catch (IOException ex) { CdaError re = new CdaError("failed to process request"); @@ -353,11 +353,13 @@ public void update(@NotNull Context ctx, @NotNull String locationId) { if (!updatedLocation.getName().equalsIgnoreCase(existingLocation.getName())) { //if name changed then delete location with old name locationsDao.renameLocation(locationId, updatedLocation); - ctx.status(HttpServletResponse.SC_OK).json(new StatusResponse("Updated and renamed Location", + ctx.status(HttpServletResponse.SC_OK).json(new StatusResponse(updatedLocation.getOfficeId(), + "Updated and renamed Location", updatedLocation.getName())); } else { locationsDao.storeLocation(updatedLocation, false); - ctx.status(HttpServletResponse.SC_OK).json(new StatusResponse("Updated Location", + ctx.status(HttpServletResponse.SC_OK).json(new StatusResponse(updatedLocation.getOfficeId(), + "Updated Location", updatedLocation.getName())); } } catch (NotFoundException e) { @@ -404,7 +406,7 @@ public void delete(@NotNull Context ctx, @NotNull String locationId) { LocationsDao locationsDao = getLocationsDao(dsl); boolean cascadeDelete = ctx.queryParamAsClass(CASCADE_DELETE, Boolean.class).getOrDefault(false); locationsDao.deleteLocation(locationId, office, cascadeDelete); - StatusResponse re = new StatusResponse("Deleted CWMS Location", locationId); + StatusResponse re = new StatusResponse(office,"Deleted CWMS Location", locationId); ctx.status(HttpServletResponse.SC_OK).json(re); } catch (DataAccessException ex) { SQLException cause = ex.getCause(SQLException.class); diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java index 4ac1c7ed0..ec0085079 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java @@ -206,7 +206,8 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); StreamLocationDao dao = new StreamLocationDao(dsl); dao.storeStreamLocation(streamLocation, failIfExists); - StatusResponse re = new StatusResponse("Stream Location successfully stored to CWMS.", + StatusResponse re = new StatusResponse(streamLocation.getId().getOfficeId(), + "Stream Location successfully stored to CWMS.", streamLocation.getId().getName()); ctx.status(HttpServletResponse.SC_CREATED).json(re); } @@ -234,7 +235,8 @@ public void update(Context ctx, @NotNull String locationId) { DSLContext dsl = getDslContext(ctx); StreamLocationDao dao = new StreamLocationDao(dsl); dao.updateStreamLocation(streamLocation); - StatusResponse re = new StatusResponse("Stream Location successfully updated to CWMS.", + StatusResponse re = new StatusResponse(streamLocation.getId().getOfficeId(), + "Stream Location successfully updated to CWMS.", streamLocation.getId().getName()); ctx.status(HttpServletResponse.SC_NO_CONTENT).json("Updated Stream Location"); } @@ -267,7 +269,8 @@ public void delete(@NotNull Context ctx, @NotNull String locationId) { DSLContext dsl = getDslContext(ctx); StreamLocationDao dao = new StreamLocationDao(dsl); dao.deleteStreamLocation(officeId, streamId, locationId); - StatusResponse re = new StatusResponse("Stream Location successfully deleted from CWMS.", streamId); + StatusResponse re = new StatusResponse(officeId, + "Stream Location successfully deleted from CWMS.", streamId); ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java b/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java index 92c585478..f3cfde966 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java @@ -170,7 +170,7 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.storeTurbine(turbine, failIfExists); - StatusResponse re = new StatusResponse("Turbine successfully stored to CWMS.", + StatusResponse re = new StatusResponse(turbine.getLocation().getOfficeId(),"Turbine successfully stored to CWMS.", turbine.getProjectId().getName()); ctx.status(HttpServletResponse.SC_CREATED).json(re); } @@ -202,7 +202,7 @@ public void update(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.renameTurbine(office, name, newName); - StatusResponse re = new StatusResponse("Turbine successfully renamed in to CWMS", newName); + StatusResponse re = new StatusResponse(office,"Turbine successfully renamed in to CWMS", newName); ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -237,7 +237,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.deleteTurbine(name, office, deleteMethod.getRule()); - StatusResponse re = new StatusResponse("Turbine successfully deleted from CWMS", name); + StatusResponse re = new StatusResponse(office, "Turbine successfully deleted from CWMS", name); ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java index 3005c014d..f7bb2ef94 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java @@ -145,6 +145,7 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(EMBANKMENT.getLocation().getOfficeId())) .body("message", equalTo("Embankment successfully stored to CWMS")) .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) ; @@ -269,6 +270,7 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(EMBANKMENT.getLocation().getOfficeId())) .body("message", equalTo("Embankment successfully stored to CWMS")) .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) ; diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java index 748637349..ad86dc662 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java @@ -868,6 +868,7 @@ void testStoreRetrieveVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(levelId)); @@ -996,6 +997,7 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(levelId)); @@ -1015,6 +1017,7 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(level1Id)); @@ -1034,6 +1037,7 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(level2Id)); @@ -1189,6 +1193,7 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(levelId)); @@ -1209,6 +1214,7 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(level1Id)); @@ -1229,6 +1235,7 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(level2Id)); @@ -1418,6 +1425,7 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(levelId)); @@ -1484,6 +1492,7 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("CWMS Location Level Deleted")) .body("identifier", equalTo(levelId)); break; @@ -1502,8 +1511,9 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("CWMS Location Level Deleted")) - .body("identifier", equalTo(levelId));; + .body("identifier", equalTo(levelId)); break; default: fail("Invalid deletion method: " + deletionMethod); @@ -1609,6 +1619,7 @@ void testStoreSeasonalLevel() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo("seasonalLoc6.Elev.Ave.1Day.tst")); @@ -1661,6 +1672,7 @@ void testStoreTimeSeriesLevel() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(levelId)); @@ -1711,6 +1723,7 @@ void testStoreConstantLevel() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Created Location Level")) .body("identifier", equalTo(levelId)); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java index 0adb75c34..acf813726 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java @@ -141,6 +141,7 @@ void test_location_create_get_delete() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(officeId)) .body("message", equalTo("Created Location")) .body("identifier", equalTo("LOC_TEST")); //Create associated time series so delete fails without cascade @@ -196,6 +197,7 @@ void test_location_create_get_delete() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) + .body("office-id", equalTo(officeId)) .body("message", equalTo("Deleted CWMS Location")) .body("identifier", equalTo("LOC_TEST")); @@ -386,6 +388,7 @@ void test_location_create_get_bad_units_delete() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) + .body("office-id", equalTo(officeId)) .body("message", equalTo("Deleted CWMS Location")) .body("identifier", equalTo("LOC_TEST")); @@ -466,6 +469,7 @@ void test_create_update() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) + .body("office-id", equalTo(user.getOperatingOffice())) .body("message", equalTo("Updated and renamed Location")) .body("identifier", equalTo(updatedLocationName)); @@ -500,6 +504,7 @@ void test_create_update() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) + .body("office-id", equalTo(user.getOperatingOffice())) .body("message", equalTo("Deleted CWMS Location")) .body("identifier", equalTo(updatedLocationName)); } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java index bc4a955d2..c6472f836 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java @@ -147,6 +147,7 @@ void test_get_create_delete() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE_ID)) .body("message", equalTo("Stream Location successfully stored to CWMS.")) .body("identifier", equalTo(streamLocation.getId().getName())); @@ -287,6 +288,7 @@ void test_get_all() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE_ID)) .body("message", equalTo("Stream Location successfully stored to CWMS.")) .body("identifier", equalTo(streamLocation.getId().getName())); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java index a053f650a..9d0ecd199 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java @@ -123,6 +123,7 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Turbine successfully stored to CWMS.")) .body("identifier", equalTo("PROJ_TURB_PHYS")) ; @@ -240,6 +241,7 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(OFFICE)) .body("message", equalTo("Turbine successfully stored to CWMS.")) .body("identifier", equalTo("PROJ_TURB_PHYS")) ; From 1064f01914bb979c716f454ac4403a4b85001270 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Thu, 3 Jul 2025 13:30:45 -0700 Subject: [PATCH 16/37] Reformat tests and remove useless import --- .../cda/api/StreamLocationController.java | 1 - .../cwms/cda/api/EmbankmentControllerIT.java | 12 +-- .../cwms/cda/api/LevelsControllerTestIT.java | 80 +++++++++---------- .../cda/api/LocationControllerTestIT.java | 34 ++++---- .../cwms/cda/api/TurbineControllerIT.java | 12 +-- 5 files changed, 69 insertions(+), 70 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java index ec0085079..f1257ca7d 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java @@ -54,7 +54,6 @@ import cwms.cda.data.dto.stream.StreamLocation; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; -import hec.lang.StatisticalParameter; import io.javalin.apibuilder.CrudHandler; import io.javalin.core.util.Header; import io.javalin.http.Context; diff --git a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java index f7bb2ef94..7a5bac4e5 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java @@ -145,9 +145,9 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(EMBANKMENT.getLocation().getOfficeId())) - .body("message", equalTo("Embankment successfully stored to CWMS")) - .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) + .body("office-id", equalTo(EMBANKMENT.getLocation().getOfficeId())) + .body("message", equalTo("Embankment successfully stored to CWMS")) + .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) ; String office = EMBANKMENT.getLocation().getOfficeId(); // Retrieve the Embankment and assert that it exists @@ -270,9 +270,9 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(EMBANKMENT.getLocation().getOfficeId())) - .body("message", equalTo("Embankment successfully stored to CWMS")) - .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) + .body("office-id", equalTo(EMBANKMENT.getLocation().getOfficeId())) + .body("message", equalTo("Embankment successfully stored to CWMS")) + .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) ; String office = EMBANKMENT.getLocation().getOfficeId(); // Retrieve the Embankment and assert that it exists diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java index ad86dc662..821a427f7 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java @@ -868,9 +868,9 @@ void testStoreRetrieveVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(levelId)); //Read level with unit given() @@ -997,9 +997,9 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(levelId)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_2.json"); @@ -1017,9 +1017,9 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(level1Id)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(level1Id)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_3.json"); @@ -1037,9 +1037,9 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(level2Id)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(level2Id)); //Read level with unit given() @@ -1193,9 +1193,9 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(levelId)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_2.json"); levelJson = levelJson.replace(oldLevelLoc2, levelLoc2); @@ -1214,9 +1214,9 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(level1Id)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(level1Id)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_3.json"); levelJson = levelJson.replace(oldLevelLoc3, levelLoc3); @@ -1235,9 +1235,9 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(level2Id)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(level2Id)); //Read level with unit given() @@ -1425,9 +1425,9 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(levelId)); //Read level with unit given() @@ -1490,11 +1490,11 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .delete("/levels/{level-id}", levelId) .then() .log().ifValidationFails(LogDetail.ALL, true) - .assertThat() + .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("CWMS Location Level Deleted")) - .body("identifier", equalTo(levelId)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("CWMS Location Level Deleted")) + .body("identifier", equalTo(levelId)); break; case "no_date": given() @@ -1511,9 +1511,9 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("CWMS Location Level Deleted")) - .body("identifier", equalTo(levelId)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("CWMS Location Level Deleted")) + .body("identifier", equalTo(levelId)); break; default: fail("Invalid deletion method: " + deletionMethod); @@ -1619,9 +1619,9 @@ void testStoreSeasonalLevel() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("seasonalLoc6.Elev.Ave.1Day.tst")); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo("seasonalLoc6.Elev.Ave.1Day.tst")); given() .log().ifValidationFails(LogDetail.ALL, true) @@ -1672,9 +1672,9 @@ void testStoreTimeSeriesLevel() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(levelId)); given() .log().ifValidationFails(LogDetail.ALL, true) @@ -1723,9 +1723,9 @@ void testStoreConstantLevel() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Created Location Level")) + .body("identifier", equalTo(levelId)); given() .log().ifValidationFails(LogDetail.ALL, true) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java index acf813726..ecb9d4604 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java @@ -139,11 +139,11 @@ void test_location_create_get_delete() throws Exception { .post("/locations") .then() .log().ifValidationFails(LogDetail.ALL,true) - .assertThat() + .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(officeId)) - .body("message", equalTo("Created Location")) - .body("identifier", equalTo("LOC_TEST")); + .body("office-id", equalTo(officeId)) + .body("message", equalTo("Created Location")) + .body("identifier", equalTo("LOC_TEST")); //Create associated time series so delete fails without cascade try { createTimeseries(officeId, location.getName() + ".Flow.Inst.~1Hour.0.cda-test"); @@ -195,11 +195,11 @@ void test_location_create_get_delete() throws Exception { .delete("/locations/" + location.getName()) .then() .log().ifValidationFails(LogDetail.ALL,true) - .assertThat() + .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(officeId)) - .body("message", equalTo("Deleted CWMS Location")) - .body("identifier", equalTo("LOC_TEST")); + .body("office-id", equalTo(officeId)) + .body("message", equalTo("Deleted CWMS Location")) + .body("identifier", equalTo("LOC_TEST")); // get it back given() @@ -388,9 +388,9 @@ void test_location_create_get_bad_units_delete() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(officeId)) - .body("message", equalTo("Deleted CWMS Location")) - .body("identifier", equalTo("LOC_TEST")); + .body("office-id", equalTo(officeId)) + .body("message", equalTo("Deleted CWMS Location")) + .body("identifier", equalTo("LOC_TEST")); // get it back given() @@ -469,9 +469,9 @@ void test_create_update() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(user.getOperatingOffice())) - .body("message", equalTo("Updated and renamed Location")) - .body("identifier", equalTo(updatedLocationName)); + .body("office-id", equalTo(user.getOperatingOffice())) + .body("message", equalTo("Updated and renamed Location")) + .body("identifier", equalTo(updatedLocationName)); // get it back given() @@ -504,9 +504,9 @@ void test_create_update() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(user.getOperatingOffice())) - .body("message", equalTo("Deleted CWMS Location")) - .body("identifier", equalTo(updatedLocationName)); + .body("office-id", equalTo(user.getOperatingOffice())) + .body("message", equalTo("Deleted CWMS Location")) + .body("identifier", equalTo(updatedLocationName)); } @Test diff --git a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java index 9d0ecd199..8202a82e9 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java @@ -123,9 +123,9 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Turbine successfully stored to CWMS.")) - .body("identifier", equalTo("PROJ_TURB_PHYS")) + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Turbine successfully stored to CWMS.")) + .body("identifier", equalTo("PROJ_TURB_PHYS")) ; String office = TURBINE.getLocation().getOfficeId(); // Retrieve the Turbine and assert that it exists @@ -241,9 +241,9 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Turbine successfully stored to CWMS.")) - .body("identifier", equalTo("PROJ_TURB_PHYS")) + .body("office-id", equalTo(OFFICE)) + .body("message", equalTo("Turbine successfully stored to CWMS.")) + .body("identifier", equalTo("PROJ_TURB_PHYS")) ; String office = TURBINE.getLocation().getOfficeId(); // Retrieve the Turbine and assert that it exists From 209c1f9387c42dbcead540b0842599892e814f3e Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Thu, 3 Jul 2025 14:35:07 -0700 Subject: [PATCH 17/37] Add StatusResponse to StreamController --- .../src/main/java/cwms/cda/api/StreamController.java | 11 ++++++++--- .../java/cwms/cda/api/StreamControllerTestIT.java | 10 ++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamController.java index d24660e7a..34a69f9dc 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamController.java @@ -51,6 +51,7 @@ import cwms.cda.data.dao.DeleteRule; import cwms.cda.data.dao.JooqDao; import cwms.cda.data.dao.StreamDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.stream.Stream; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -197,7 +198,9 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); StreamDao dao = new StreamDao(dsl); dao.storeStream(stream, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Stream"); + StatusResponse re = new StatusResponse(stream.getOfficeId(), "Stream successfully stored to CWMS.", + stream.getId().getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -227,7 +230,8 @@ public void update(@NotNull Context ctx, @NotNull String streamId) { DSLContext dsl = getDslContext(ctx); StreamDao dao = new StreamDao(dsl); dao.renameStream(office, streamId, newStreamId); - ctx.status(HttpServletResponse.SC_OK).json("Renamed Stream"); + StatusResponse re = new StatusResponse(office, "Stream successfully renamed in CWMS.", newStreamId); + ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -276,7 +280,8 @@ public void delete(@NotNull Context ctx, @NotNull String streamId) { + deleteMethod); } dao.deleteStream(office, streamId, deleteRule); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(streamId + " Deleted"); + StatusResponse re = new StatusResponse(office, "Stream successfully deleted from CWMS.", streamId); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java index a19dd9bd6..b890353bd 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java @@ -142,7 +142,10 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(stream.getOfficeId())) + .body("message", equalTo("Stream successfully stored to CWMS.")) + .body("identifier", equalTo(stream.getId().getName())); String streamId = stream.getId().getName(); @@ -274,7 +277,10 @@ void test_get_all() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(stream.getOfficeId())) + .body("message", equalTo("Stream successfully stored to CWMS.")) + .body("identifier", equalTo(stream.getId().getName())); String office = stream.getId().getOfficeId(); String streamId = stream.getId().getName(); From 6afa97f24b72a2077480f5310a96039e81b37af6 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Thu, 3 Jul 2025 14:48:11 -0700 Subject: [PATCH 18/37] Add StatusResponse to BasinController --- .../main/java/cwms/cda/api/BasinController.java | 15 ++++++++++----- .../test/java/cwms/cda/api/BasinControllerIT.java | 6 ++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/BasinController.java b/cwms-data-api/src/main/java/cwms/cda/api/BasinController.java index 215bb2ab6..0b4e1090b 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/BasinController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/BasinController.java @@ -45,6 +45,7 @@ import cwms.cda.data.dao.JooqDao; import cwms.cda.data.dao.basinconnectivity.BasinDao; import cwms.cda.data.dto.CwmsId; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.basinconnectivity.Basin; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -251,7 +252,8 @@ public void update(@NotNull Context ctx, @NotNull String name) { .withOfficeId(officeId) .build(); basinDao.renameBasin(oldLoc, newLoc); - ctx.status(HttpServletResponse.SC_OK).json("Updated Location"); + StatusResponse re = new StatusResponse(officeId, "Updated Location", newBasinId); + ctx.status(HttpServletResponse.SC_OK).json(re); } @OpenApi( @@ -276,13 +278,15 @@ public void create(@NotNull Context ctx) { String newBasinId = basin.getBasinId().getName(); cwms.cda.data.dao.basin.BasinDao basinDao = new cwms.cda.data.dao.basin.BasinDao(dsl); basinDao.storeBasin(basin); - ctx.status(HttpServletResponse.SC_CREATED).json(newBasinId + " Created"); + StatusResponse re = new StatusResponse(basin.getBasinId().getOfficeId(), + "Basin successfully stored to CWMS.", newBasinId); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } @OpenApi( queryParams = { @OpenApiParam(name = OFFICE, required = true, description = "Specifies the" - + " owning office of the basin to be renamed."), + + " owning office of the basin to be deleted."), @OpenApiParam(name = METHOD, required = true, description = "Specifies the delete method used.", type = JooqDao.DeleteMethod.class) }, @@ -290,7 +294,7 @@ public void create(@NotNull Context ctx) { @OpenApiParam(name = NAME, description = "Specifies the name of " + "the basin to be deleted.") }, - description = "Renames CWMS Basin", + description = "Deletes CWMS Basin", tags = {TAG} ) @Override @@ -303,6 +307,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { .withOfficeId(ctx.queryParam(OFFICE)) .build(); basinDao.deleteBasin(basinId, deleteMethod.getRule()); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(basinId.getName() + " Deleted"); + StatusResponse re = new StatusResponse(basinId.getOfficeId(), "Deleted CWMS Basin", basinId.getName()); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } \ No newline at end of file diff --git a/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java index bb74409b5..34eb9c555 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java @@ -176,6 +176,9 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(BASIN.getBasinId().getOfficeId())) + .body("message", equalTo("Basin successfully stored to CWMS.")) + .body("identifier", equalTo(BASIN.getBasinId().getName())) ; if(BASIN.getParentBasinId() != null && BASIN.getPrimaryStreamId() != null){ @@ -399,6 +402,9 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(BASIN.getBasinId().getOfficeId())) + .body("message", equalTo("Basin successfully stored to CWMS.")) + .body("identifier", equalTo(BASIN.getBasinId().getName())) ; From e70a119c25b25855ed372e5652e5e2e2d8fba92b Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Thu, 3 Jul 2025 14:57:41 -0700 Subject: [PATCH 19/37] Add StatusResponse to LookupTypeController --- .../java/cwms/cda/api/LookupTypeController.java | 14 ++++++++++---- .../java/cwms/cda/api/LookupTypeControllerIT.java | 3 +++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java b/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java index e3b70700f..07c928de3 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java @@ -29,6 +29,7 @@ import com.codahale.metrics.Timer; import cwms.cda.data.dao.LookupTypeDao; import cwms.cda.data.dto.LookupType; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; import io.javalin.apibuilder.CrudHandler; @@ -138,7 +139,9 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); LookupTypeDao dao = new LookupTypeDao(dsl); dao.storeLookupType(category, prefix, lookupType); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Lookup Type"); + StatusResponse re = new StatusResponse(lookupType.getOfficeId(), "Lookup Type successfully stored to CWMS.", + lookupType.getDisplayValue()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -156,7 +159,7 @@ public void create(Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Lookup Type successfully stored to CWMS.") + @OpenApiResponse(status = STATUS_204, description = "Lookup Type successfully updated to CWMS.") } ) @Override @@ -170,7 +173,9 @@ public void update(Context ctx, String name) { DSLContext dsl = getDslContext(ctx); LookupTypeDao dao = new LookupTypeDao(dsl); dao.updateLookupType(category, prefix, lookupType); - ctx.status(HttpServletResponse.SC_OK).json("Updated Lookup Type"); + StatusResponse re = new StatusResponse(lookupType.getOfficeId(), "Lookup Type successfully updated to CWMS.", + lookupType.getDisplayValue()); + ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -197,7 +202,8 @@ public void delete(Context ctx, @NotNull String displayValue) { DSLContext dsl = getDslContext(ctx); LookupTypeDao dao = new LookupTypeDao(dsl); dao.deleteLookupType(category, prefix, officeId, displayValue); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(displayValue + " Deleted"); + StatusResponse re = new StatusResponse(officeId, "Lookup Type successfully deleted from CWMS.", displayValue); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java index 7a33ad92c..305037a47 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java @@ -81,6 +81,9 @@ void test_get_create_delete() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(lookupType.getOfficeId())) + .body("message", equalTo("Lookup Type successfully stored to CWMS.")) + .body("identifier", equalTo(lookupType.getDisplayValue())) ; String office = user.getOperatingOffice(); // Retrieve the lookup type and assert that it exists From 94fd73cbe0a9b2a1c96e8ab449e482a5b87894bd Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 10:18:58 -0700 Subject: [PATCH 20/37] Add StatusRespoonse to WaterContractCRUDControllers --- .../api/watersupply/WaterContractCreateController.java | 5 ++++- .../api/watersupply/WaterContractDeleteController.java | 5 ++++- .../api/watersupply/WaterContractUpdateController.java | 5 ++++- .../cwms/cda/api/WaterContractControllerTestIT.java | 10 ++++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractCreateController.java index db41f4791..1748d2ed6 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractCreateController.java @@ -39,6 +39,7 @@ import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; import cwms.cda.data.dao.watersupply.WaterContractDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.watersupply.WaterUserContract; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -104,7 +105,9 @@ public void handle(@NotNull Context ctx) { String newContractName = ctx.pathParam(WATER_USER); WaterContractDao contractDao = getContractDao(dsl); contractDao.storeWaterContract(waterContract, failIfExists, ignoreNulls); - ctx.status(HttpServletResponse.SC_CREATED).json(newContractName + " created successfully"); + StatusResponse re = new StatusResponse(waterContract.getOfficeId(), + "Water Contract Created Successfully", newContractName); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractDeleteController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractDeleteController.java index c0bff1628..e5cfde780 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractDeleteController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractDeleteController.java @@ -40,6 +40,7 @@ import cwms.cda.data.dao.JooqDao.DeleteMethod; import cwms.cda.data.dao.watersupply.WaterContractDao; import cwms.cda.data.dto.CwmsId; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.watersupply.WaterUserContract; import io.javalin.http.Context; import io.javalin.http.Handler; @@ -89,7 +90,9 @@ public void handle(@NotNull Context ctx) { CwmsId projectLocation = CwmsId.buildCwmsId(office, locationId); WaterUserContract contract = contractDao.getWaterContract(contractName, projectLocation, entityName); contractDao.deleteWaterContract(contract, deleteMethod); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(contractName + " deleted successfully"); + StatusResponse re = new StatusResponse(contract.getOfficeId(), + "Water Contract Deleted Successfully", contractName); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractUpdateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractUpdateController.java index e9c773f75..4c2b987a3 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractUpdateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractUpdateController.java @@ -37,6 +37,7 @@ import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; import cwms.cda.data.dao.watersupply.WaterContractDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.watersupply.WaterUser; import cwms.cda.data.dto.watersupply.WaterUserContract; import cwms.cda.formatters.ContentType; @@ -107,7 +108,9 @@ public void handle(@NotNull Context ctx) { .withProjectId(waterContract.getWaterUser().getProjectId()) .withWaterRight(waterContract.getWaterUser().getWaterRight()).build(); contractDao.renameWaterContract(ref, contractName, newName); - ctx.status(HttpServletResponse.SC_OK).json("Contract renamed successfully"); + StatusResponse re = new StatusResponse(waterContract.getOfficeId(), + "Contract Renamed Successfully", newName); + ctx.status(HttpServletResponse.SC_OK).json(re); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java index c1e926cc5..9c93a980a 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java @@ -179,6 +179,8 @@ void test_create_get_delete_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Water Contract Created Successfully")) + .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) ; // get contract @@ -426,6 +428,8 @@ void test_rename_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Water Contract Created Successfully")) + .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) ; // rename contract @@ -445,6 +449,8 @@ void test_rename_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) + .body("message", equalTo("Contract Renamed Successfully")) + .body("identifier", equalTo(NEW_CONTRACT_NAME)) ; // get contract, assert name is changed @@ -507,6 +513,8 @@ void test_getAllWaterContracts() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Water Contract Created Successfully")) + .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) ; WaterUserContract waterContract = new WaterUserContract.Builder() @@ -540,6 +548,8 @@ void test_getAllWaterContracts() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("message", equalTo("Water Contract Created Successfully")) + .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) ; // get all contracts From c4e40ba08a7a6f37e91e3846a6f2138e533e6fd8 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 10:34:59 -0700 Subject: [PATCH 21/37] Add StatusResponse to WaterContractTypeControllers --- .../api/watersupply/WaterContractTypeCreateController.java | 7 ++++++- .../api/watersupply/WaterContractTypeDeleteController.java | 4 +++- .../java/cwms/cda/api/WaterContractControllerTestIT.java | 5 +++++ .../cwms/cda/api/WaterContractTypeControllerTestIT.java | 6 ++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java index a01f6bad9..08cef762a 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java @@ -34,6 +34,7 @@ import com.codahale.metrics.Timer; import cwms.cda.data.dao.watersupply.WaterContractDao; import cwms.cda.data.dto.LookupType; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; import io.javalin.http.Context; @@ -45,6 +46,8 @@ import io.javalin.plugin.openapi.annotations.OpenApiRequestBody; import io.javalin.plugin.openapi.annotations.OpenApiResponse; import javax.servlet.http.HttpServletResponse; +import javax.transaction.Status; + import org.jetbrains.annotations.NotNull; import org.jooq.DSLContext; @@ -86,7 +89,9 @@ public void handle(@NotNull Context ctx) { LookupType contractType = Formats.parseContent(contentType, ctx.body(), LookupType.class); WaterContractDao contractDao = getContractDao(dsl); contractDao.storeWaterContractType(contractType, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Contract type successfully stored to CWMS."); + StatusResponse re = new StatusResponse(contractType.getOfficeId(), + "Contract type successfully stored to CWMS.", contractType.getDisplayValue()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeDeleteController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeDeleteController.java index fc25b4b2c..11c2c082d 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeDeleteController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeDeleteController.java @@ -34,6 +34,7 @@ import com.codahale.metrics.Timer; import cwms.cda.data.dao.watersupply.WaterContractDao; import cwms.cda.data.dto.LookupType; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; import io.javalin.http.Context; @@ -78,7 +79,8 @@ public void handle(@NotNull Context ctx) { ctx.contentType(contentType.toString()); WaterContractDao dao = new WaterContractDao(dsl); dao.deleteWaterContractType(office, displayValue); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json("Contract type successfully deleted from CWMS."); + StatusResponse re = new StatusResponse(office, "Contract type successfully deleted from CWMS.", displayValue); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java index 9c93a980a..332bdd430 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java @@ -179,6 +179,7 @@ void test_create_get_delete_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(CONTRACT.getOfficeId())) .body("message", equalTo("Water Contract Created Successfully")) .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) ; @@ -428,6 +429,7 @@ void test_rename_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(CONTRACT.getOfficeId())) .body("message", equalTo("Water Contract Created Successfully")) .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) ; @@ -449,6 +451,7 @@ void test_rename_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) + .body("office-id", equalTo(CONTRACT.getOfficeId())) .body("message", equalTo("Contract Renamed Successfully")) .body("identifier", equalTo(NEW_CONTRACT_NAME)) ; @@ -513,6 +516,7 @@ void test_getAllWaterContracts() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(CONTRACT.getOfficeId())) .body("message", equalTo("Water Contract Created Successfully")) .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) ; @@ -548,6 +552,7 @@ void test_getAllWaterContracts() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(CONTRACT.getOfficeId())) .body("message", equalTo("Water Contract Created Successfully")) .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) ; diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java index 253c6c86b..2a806b828 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java @@ -97,6 +97,9 @@ void test_create_get_WaterContractType() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(CONTRACT_TYPE.getOfficeId())) + .body("message", equalTo("Contract type successfully stored to CWMS.")) + .body("identifier", equalTo(CONTRACT_TYPE.getDisplayValue())) ; // get water contract type and assert that it exists @@ -145,6 +148,9 @@ void test_store_delete_WaterContractType() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(CONTRACT_TYPE.getOfficeId())) + .body("message", equalTo("Contract type successfully stored to CWMS.")) + .body("identifier", equalTo(CONTRACT_TYPE.getDisplayValue())) ; // get water contract type and assert that it exists From 09f529322cf05b10988554e3f619cca9b2423755 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 10:55:56 -0700 Subject: [PATCH 22/37] Add StatusResponse to WaterUserControllers --- .../watersupply/WaterUserCreateController.java | 5 ++++- .../watersupply/WaterUserDeleteController.java | 4 +++- .../watersupply/WaterUserUpdateController.java | 8 +++++--- .../cwms/cda/api/WaterUserControllerTestIT.java | 17 ++++++++++++++++- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserCreateController.java index 717305239..9cbe834de 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserCreateController.java @@ -32,6 +32,7 @@ import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; import cwms.cda.data.dao.watersupply.WaterContractDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.watersupply.WaterUser; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -84,7 +85,9 @@ public void handle(@NotNull Context ctx) { boolean failIfExists = Boolean.parseBoolean(ctx.queryParam(FAIL_IF_EXISTS)); WaterContractDao contractDao = getContractDao(dsl); contractDao.storeWaterUser(user, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json(user.getEntityName() + " user created successfully."); + StatusResponse re = new StatusResponse(user.getProjectId().getOfficeId(), + "Water user successfully stored to CWMS.", user.getEntityName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserDeleteController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserDeleteController.java index eae6ff778..79293c3b9 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserDeleteController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserDeleteController.java @@ -39,6 +39,7 @@ import cwms.cda.data.dao.JooqDao.DeleteMethod; import cwms.cda.data.dao.watersupply.WaterContractDao; import cwms.cda.data.dto.CwmsId; +import cwms.cda.data.dto.StatusResponse; import io.javalin.http.Context; import io.javalin.http.Handler; import io.javalin.plugin.openapi.annotations.HttpMethod; @@ -85,7 +86,8 @@ public void handle(@NotNull Context ctx) { CwmsId location = CwmsId.buildCwmsId(office, locationId); WaterContractDao contractDao = getContractDao(dsl); contractDao.deleteWaterUser(location, entityName, deleteMode); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json("Water user deleted successfully."); + StatusResponse re = new StatusResponse(office, "Water user deleted successfully.", entityName); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserUpdateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserUpdateController.java index ddfc2227e..32bdc4a9e 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserUpdateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserUpdateController.java @@ -29,7 +29,7 @@ import static cwms.cda.api.Controllers.NAME; import static cwms.cda.api.Controllers.OFFICE; import static cwms.cda.api.Controllers.PROJECT_ID; -import static cwms.cda.api.Controllers.STATUS_204; +import static cwms.cda.api.Controllers.STATUS_200; import static cwms.cda.api.Controllers.STATUS_501; import static cwms.cda.api.Controllers.UPDATE; import static cwms.cda.api.Controllers.WATER_USER; @@ -40,6 +40,7 @@ import com.codahale.metrics.Timer; import cwms.cda.data.dao.watersupply.WaterContractDao; import cwms.cda.data.dto.CwmsId; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.watersupply.WaterUser; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -82,7 +83,7 @@ public WaterUserUpdateController(MetricRegistry metrics) { required = true) }, responses = { - @OpenApiResponse(status = STATUS_204, description = "Water user successfully updated in CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Water user successfully updated in CWMS."), @OpenApiResponse(status = STATUS_501, description = "Requested format is not implemented") }, description = "Updates a water user in CWMS.", @@ -104,7 +105,8 @@ public void handle(@NotNull Context ctx) { CwmsId location = CwmsId.buildCwmsId(office, locationId); WaterContractDao contractDao = getContractDao(dsl); contractDao.renameWaterUser(oldName, newName, location); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json("Water user renamed successfully."); + StatusResponse re = new StatusResponse(office, "Water user successfully updated in CWMS.", newName); + ctx.status(HttpServletResponse.SC_OK).json(re); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java index e4c70f061..9a7924e1c 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java @@ -161,6 +161,9 @@ void test_create_get_delete_WaterUser() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(WATER_USER.getProjectId().getOfficeId())) + .body("message", equalTo("Water user successfully stored to CWMS.")) + .body("identifier", equalTo(WATER_USER.getEntityName())) ; // get WaterUser, assert that it is correct @@ -249,6 +252,9 @@ void test_rename_WaterUser() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(WATER_USER.getProjectId().getOfficeId())) + .body("message", equalTo("Water user successfully stored to CWMS.")) + .body("identifier", equalTo(WATER_USER.getEntityName())) ; // Rename WaterUser @@ -268,7 +274,10 @@ void test_rename_WaterUser() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body("office-id", equalTo(OFFICE_ID)) + .body("message", equalTo("Water user successfully updated in CWMS.")) + .body("identifier", equalTo("NEW USER NAME")) ; // Get WaterUser, assert name has changed @@ -351,6 +360,9 @@ void test_getAllWaterUsers() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(WATER_USER.getProjectId().getOfficeId())) + .body("message", equalTo("Water user successfully stored to CWMS.")) + .body("identifier", equalTo(WATER_USER.getEntityName())) ; // Create WaterUser @@ -368,6 +380,9 @@ void test_getAllWaterUsers() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(WATER_USER.getProjectId().getOfficeId())) + .body("message", equalTo("Water user successfully stored to CWMS.")) + .body("identifier", equalTo(waterUser.getEntityName())) ; // get water users From 07d14a05801f73bf908191d5635e501476ef9719 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 11:14:01 -0700 Subject: [PATCH 23/37] Add StatusResponse to LockController --- .../cda/api/location/kind/LockController.java | 16 +++++++++++----- .../test/java/cwms/cda/api/LockControllerIT.java | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/LockController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/LockController.java index 42b031910..bdfcd7642 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/LockController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/LockController.java @@ -37,6 +37,7 @@ import static cwms.cda.api.Controllers.RESULTS; import static cwms.cda.api.Controllers.SIZE; import static cwms.cda.api.Controllers.STATUS_200; +import static cwms.cda.api.Controllers.STATUS_201; import static cwms.cda.api.Controllers.STATUS_204; import static cwms.cda.api.Controllers.STATUS_404; import static cwms.cda.api.Controllers.UNIT; @@ -52,6 +53,7 @@ import cwms.cda.data.dao.JooqDao; import cwms.cda.data.dao.location.kind.LockDao; import cwms.cda.data.dto.CwmsId; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.Lock; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -180,7 +182,7 @@ public void getOne(@NotNull Context ctx, @NotNull String name) { method = HttpMethod.POST, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Lock successfully stored to CWMS.") + @OpenApiResponse(status = STATUS_201, description = "Lock successfully stored to CWMS.") } ) @Override @@ -201,7 +203,9 @@ public void create(Context ctx) { } LockDao dao = new LockDao(dsl); dao.storeLock(lock, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Lock"); + StatusResponse re = new StatusResponse(lock.getLocation().getOfficeId(), + "Lock successfully stored to CWMS.", lock.getLocation().getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -219,7 +223,7 @@ public void create(Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Lock successfully renamed in CWMS.") + @OpenApiResponse(status = STATUS_200, description = "Lock successfully renamed in CWMS.") } ) @Override @@ -230,7 +234,8 @@ public void update(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); LockDao dao = new LockDao(dsl); dao.renameLock(CwmsId.buildCwmsId(office, name), newName); - ctx.status(HttpServletResponse.SC_OK).json("Renamed Lock"); + StatusResponse re = new StatusResponse(office, "Lock successfully renamed in CWMS.", newName); + ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -263,7 +268,8 @@ public void delete(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); LockDao dao = new LockDao(dsl); dao.deleteLock(CwmsId.buildCwmsId(office, name), deleteMethod.getRule()); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(name + " Deleted"); + StatusResponse re = new StatusResponse(office, "Lock successfully deleted from CWMS.", name); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java index ec7fd49a4..b43b762ab 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java @@ -286,6 +286,9 @@ void test_get_create_delete_EN() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(LOCK.getLocation().getOfficeId())) + .body("message", equalTo("Lock successfully stored to CWMS.")) + .body("identifier", equalTo(LOCK.getLocation().getName())) ; String office = LOCK.getLocation().getOfficeId(); // Retrieve the Lock and assert that it exists @@ -423,6 +426,9 @@ void test_get_create_delete_SI() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(metricLock.getLocation().getOfficeId())) + .body("message", equalTo("Lock successfully stored to CWMS.")) + .body("identifier", equalTo(metricLock.getLocation().getName())) ; String office = metricLock.getLocation().getOfficeId(); @@ -642,6 +648,9 @@ void storeRetrieveSameLockNameDifferentProject() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(metricLock.getLocation().getOfficeId())) + .body("message", equalTo("Lock successfully stored to CWMS.")) + .body("identifier", equalTo(metricLock.getLocation().getName())) ; lockToCleanup = metricLockProj2; @@ -679,6 +688,9 @@ void storeRetrieveSameLockNameDifferentProject() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(metricLock.getLocation().getOfficeId())) + .body("message", equalTo("Lock successfully stored to CWMS.")) + .body("identifier", equalTo(metricLock.getLocation().getName())) ; String office = metricLock.getLocation().getOfficeId(); @@ -950,6 +962,9 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(LOCK.getLocation().getOfficeId())) + .body("message", equalTo("Lock successfully stored to CWMS.")) + .body("identifier", equalTo(LOCK.getLocation().getName())) ; String office = LOCK.getLocation().getOfficeId(); // Retrieve the Lock and assert that it exists From d6cc8f466c82f6107f5013a8497d1ffe705213af Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 11:22:17 -0700 Subject: [PATCH 24/37] Add StatusResponse to PropertyController --- .../main/java/cwms/cda/api/PropertyController.java | 14 ++++++++++---- .../java/cwms/cda/api/PropertyControllerIT.java | 6 ++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java b/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java index aa450d843..c3847bab6 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java @@ -29,6 +29,7 @@ import com.codahale.metrics.Timer; import cwms.cda.data.dao.PropertyDao; import cwms.cda.data.dto.Property; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; import io.javalin.apibuilder.CrudHandler; @@ -175,7 +176,9 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); PropertyDao dao = new PropertyDao(dsl); dao.storeProperty(property); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Property"); + StatusResponse re = new StatusResponse(property.getOfficeId(), + "Property successfully stored to CWMS.", property.getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -190,7 +193,7 @@ public void create(Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Property successfully stored to CWMS.") + @OpenApiResponse(status = STATUS_200, description = "Property successfully stored to CWMS.") } ) @Override @@ -202,7 +205,9 @@ public void update(Context ctx, String name) { DSLContext dsl = getDslContext(ctx); PropertyDao dao = new PropertyDao(dsl); dao.updateProperty(property); - ctx.status(HttpServletResponse.SC_OK).json("Updated Property"); + StatusResponse re = new StatusResponse(property.getOfficeId(), + "Property successfully stored to CWMS.", property.getName()); + ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -235,7 +240,8 @@ public void delete(Context ctx, String name) { DSLContext dsl = getDslContext(ctx); PropertyDao dao = new PropertyDao(dsl); dao.deleteProperty(office, category, name); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(name + " Deleted"); + StatusResponse re = new StatusResponse(office, "Property successfully deleted from CWMS.", name); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java index 30e3b0328..829868d4d 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java @@ -79,6 +79,9 @@ void test_get_create_delete() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(property.getOfficeId())) + .body("message", equalTo("Property successfully stored to CWMS.")) + .body("identifier", equalTo(property.getName())) ; String office = property.getOfficeId(); // Retrieve the property and assert that it exists @@ -216,6 +219,9 @@ void test_get_all() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(property.getOfficeId())) + .body("message", equalTo("Property successfully stored to CWMS.")) + .body("identifier", equalTo(property.getName())) ; String office = property.getOfficeId(); // Retrieve the property and assert that it exists From 232c9b414ebe8c5a2cbba9454b59192a41d3a3e5 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 11:32:23 -0700 Subject: [PATCH 25/37] Add StatusResponse to MeasurementController --- .../java/cwms/cda/api/MeasurementController.java | 14 ++++++-------- .../cwms/cda/api/MeasurementControllerTestIT.java | 10 ++++++++-- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java b/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java index 8f2607176..68a605ec8 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java @@ -56,6 +56,7 @@ import static cwms.cda.api.Controllers.requiredParam; import cwms.cda.api.enums.UnitSystem; import cwms.cda.data.dao.MeasurementDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.measurement.Measurement; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -188,7 +189,7 @@ public void getOne(@NotNull Context ctx, @NotNull String locationId) { method = HttpMethod.POST, tags = {TAG}, responses = { - @OpenApiResponse(status = "204", description = "Measurement(s) successfully stored.") + @OpenApiResponse(status = "200", description = "Measurement(s) successfully stored.") } ) @Override @@ -202,12 +203,8 @@ public void create(Context ctx) { DSLContext dsl = getDslContext(ctx); MeasurementDao dao = new MeasurementDao(dsl); dao.storeMeasurements(measurements, failIfExists); - String statusMsg = "Created Measurement"; - if(measurements.size() > 1) - { - statusMsg += "s"; - } - ctx.status(HttpServletResponse.SC_CREATED).json(statusMsg); + StatusResponse re = new StatusResponse(measurements.get(0).getOfficeId(), "Measurement(s) successfully stored."); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -260,7 +257,8 @@ public void delete(@NotNull Context ctx, @NotNull String locationId) { DSLContext dsl = getDslContext(ctx); MeasurementDao dao = new MeasurementDao(dsl); dao.deleteMeasurements(officeId, locationId, minDate, maxDate,minNum, maxNum); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json( "Measurements for " + locationId + " Deleted"); + StatusResponse re = new StatusResponse(officeId, "Measurement successfully deleted for specified location-id.", locationId); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json( re); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java index cbfb1e53b..f82175efc 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java @@ -156,7 +156,10 @@ void test_create_retrieve_delete_measurement() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(measurement.getOfficeId())) + .body("message", equalTo("Measurement(s) successfully stored.")) + .body("identifier", equalTo("")); String locationId = measurement.getLocationId(); String number = measurement.getNumber(); @@ -283,7 +286,10 @@ void test_create_retrieve_delete_measurement_multiple() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(measurement1.getOfficeId())) + .body("message", equalTo("Measurement(s) successfully stored.")) + .body("identifier", equalTo("")); // Retrieve the Measurements and assert that they exists given() From 8e21e9da85df789913a31f28ac3f0cbb1b5275da Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 11:49:00 -0700 Subject: [PATCH 26/37] Add StatusResponse to OutletController --- .../api/location/kind/OutletController.java | 28 +++++++------------ .../location/kind/OutletControllerTestIT.java | 26 +++++++++++++---- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java index 640eaf652..8509772c7 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java @@ -20,20 +20,7 @@ package cwms.cda.api.location.kind; -import static cwms.cda.api.Controllers.CREATE; -import static cwms.cda.api.Controllers.DELETE; -import static cwms.cda.api.Controllers.FAIL_IF_EXISTS; -import static cwms.cda.api.Controllers.GET_ALL; -import static cwms.cda.api.Controllers.GET_ONE; -import static cwms.cda.api.Controllers.METHOD; -import static cwms.cda.api.Controllers.NAME; -import static cwms.cda.api.Controllers.OFFICE; -import static cwms.cda.api.Controllers.PROJECT_ID; -import static cwms.cda.api.Controllers.STATUS_200; -import static cwms.cda.api.Controllers.STATUS_204; -import static cwms.cda.api.Controllers.STATUS_404; -import static cwms.cda.api.Controllers.queryParamAsClass; -import static cwms.cda.api.Controllers.requiredParam; +import static cwms.cda.api.Controllers.*; import static cwms.cda.data.dao.JooqDao.getDslContext; import com.codahale.metrics.MetricRegistry; @@ -41,6 +28,7 @@ import cwms.cda.api.BaseCrudHandler; import cwms.cda.data.dao.JooqDao; import cwms.cda.data.dao.location.kind.OutletDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.Outlet; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -80,7 +68,7 @@ public OutletController(MetricRegistry metrics) { method = HttpMethod.POST, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Outlet successfully stored to CWMS.") + @OpenApiResponse(status = STATUS_201, description = "Outlet successfully stored to CWMS.") } ) @Override @@ -94,7 +82,9 @@ public void create(@NotNull Context ctx) { DSLContext dsl = getDslContext(ctx); OutletDao dao = new OutletDao(dsl); dao.storeOutlet(outlet, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Outlet"); + StatusResponse re = new StatusResponse(outlet.getLocation().getOfficeId(), + "Outlet successfully stored to CWMS.", outlet.getLocation().getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -193,7 +183,8 @@ public void update(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); OutletDao dao = new OutletDao(dsl); dao.renameOutlet(office, name, newOutletId); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(name + " successfully renamed to " + newOutletId); + StatusResponse re = new StatusResponse(office, "CWMS Outlet successfully renamed.", newOutletId); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } @@ -226,7 +217,8 @@ public void delete(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); OutletDao dao = new OutletDao(dsl); dao.deleteOutlet(office, name, deleteMethod.getRule()); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(name + " Deleted"); + StatusResponse re = new StatusResponse(office, "Outlet successfully deleted from CWMS.", name); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java index 1d958374e..4f274b87d 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java @@ -147,7 +147,10 @@ void test_outlet_rename() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(NEW_CONDUIT_GATE_2_OUTLET.getLocation().getOfficeId())) + .body("message", equalTo("Outlet successfully stored to CWMS.")) + .body("identifier", equalTo(NEW_CONDUIT_GATE_2_OUTLET.getLocation().getName())); //Get the newly created outlet given() @@ -239,7 +242,11 @@ void test_rating_spec_id_uncontrolled() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(NEW_RATED_OUTLET_UNCONTROLLED.getLocation().getOfficeId())) + .body("message", equalTo("Outlet successfully stored to CWMS.")) + .body("identifier", equalTo(NEW_RATED_OUTLET_UNCONTROLLED.getLocation().getName())) + ; // Get the outlet, assert that it has null rating spec id given() @@ -388,7 +395,10 @@ void test_rating_spec_id_controlled() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(NEW_RATED_OUTLET_CONTROLLED.getLocation().getOfficeId())) + .body("message", equalTo("Outlet successfully stored to CWMS.")) + .body("identifier", equalTo(NEW_RATED_OUTLET_CONTROLLED.getLocation().getName())); // Get the outlet, assert that it has null rating spec id given() @@ -561,7 +571,10 @@ void test_outlet_crud() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getOfficeId())) + .body("message", equalTo("Outlet successfully stored to CWMS.")) + .body("identifier", equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getName())); //Get the newly created outlet given() @@ -602,7 +615,10 @@ void test_outlet_crud() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body("office-id", equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getOfficeId())) + .body("message", equalTo("Outlet successfully stored to CWMS.")) + .body("identifier", equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getName())); //Get the newly modified outlet given() From db3779e99ba39cfc397bd11a3ec2ef6ff807a810 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 11:53:12 -0700 Subject: [PATCH 27/37] Remove unnecessary import and fix update message --- .../src/main/java/cwms/cda/api/PropertyController.java | 4 ++-- .../api/watersupply/WaterContractTypeCreateController.java | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java b/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java index c3847bab6..b4ef5166c 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java @@ -193,7 +193,7 @@ public void create(Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_200, description = "Property successfully stored to CWMS.") + @OpenApiResponse(status = STATUS_200, description = "Property successfully updated in CWMS.") } ) @Override @@ -206,7 +206,7 @@ public void update(Context ctx, String name) { PropertyDao dao = new PropertyDao(dsl); dao.updateProperty(property); StatusResponse re = new StatusResponse(property.getOfficeId(), - "Property successfully stored to CWMS.", property.getName()); + "Property successfully updated in CWMS.", property.getName()); ctx.status(HttpServletResponse.SC_OK).json(re); } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java index 08cef762a..3ab6f8ee5 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java @@ -46,7 +46,6 @@ import io.javalin.plugin.openapi.annotations.OpenApiRequestBody; import io.javalin.plugin.openapi.annotations.OpenApiResponse; import javax.servlet.http.HttpServletResponse; -import javax.transaction.Status; import org.jetbrains.annotations.NotNull; import org.jooq.DSLContext; From 73d932ff4aaaad78501b917ab9d1797d18bb4446 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 13:35:24 -0700 Subject: [PATCH 28/37] Use String constants in tests --- .../java/cwms/cda/api/BasinControllerIT.java | 15 ++-- .../cwms/cda/api/EmbankmentControllerIT.java | 15 ++-- .../cwms/cda/api/LevelsControllerTestIT.java | 81 ++++++++++--------- .../cda/api/LocationControllerTestIT.java | 34 ++++---- .../java/cwms/cda/api/LockControllerIT.java | 33 ++++---- .../cwms/cda/api/LookupTypeControllerIT.java | 9 ++- .../cda/api/MeasurementControllerTestIT.java | 15 ++-- .../cwms/cda/api/PropertyControllerIT.java | 17 ++-- .../cwms/cda/api/StreamControllerTestIT.java | 16 ++-- .../api/StreamLocationControllerTestIT.java | 16 ++-- .../cwms/cda/api/TurbineControllerIT.java | 15 ++-- .../api/WaterContractControllerTestIT.java | 37 +++++---- .../WaterContractTypeControllerTestIT.java | 15 ++-- .../cda/api/WaterUserControllerTestIT.java | 33 ++++---- .../location/kind/OutletControllerTestIT.java | 33 ++++---- 15 files changed, 216 insertions(+), 168 deletions(-) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java index 34eb9c555..c02371a4d 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java @@ -62,6 +62,9 @@ class BasinControllerIT extends DataApiTestIT private static final String OFFICE = "SWT"; private static final Basin BASIN; private static final Basin BASIN_CONNECT; + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; static { try { BASIN = new Basin.Builder() @@ -176,9 +179,9 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(BASIN.getBasinId().getOfficeId())) - .body("message", equalTo("Basin successfully stored to CWMS.")) - .body("identifier", equalTo(BASIN.getBasinId().getName())) + .body(OFFICE_ID, equalTo(BASIN.getBasinId().getOfficeId())) + .body(MESSAGE, equalTo("Basin successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(BASIN.getBasinId().getName())) ; if(BASIN.getParentBasinId() != null && BASIN.getPrimaryStreamId() != null){ @@ -402,9 +405,9 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(BASIN.getBasinId().getOfficeId())) - .body("message", equalTo("Basin successfully stored to CWMS.")) - .body("identifier", equalTo(BASIN.getBasinId().getName())) + .body(OFFICE_ID, equalTo(BASIN.getBasinId().getOfficeId())) + .body(MESSAGE, equalTo("Basin successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(BASIN.getBasinId().getName())) ; diff --git a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java index 7a5bac4e5..690b3f969 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java @@ -63,6 +63,9 @@ final class EmbankmentControllerIT extends DataApiTestIT { private static final Location PROJECT_LOC; private static final Location EMBANKMENT_LOC; private static final Embankment EMBANKMENT; + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; static { try(InputStream projectStream = EmbankmentControllerIT.class.getResourceAsStream("/cwms/cda/api/project_location.json"); InputStream embankmentStream = EmbankmentControllerIT.class.getResourceAsStream("/cwms/cda/api/embankment.json")) { @@ -145,9 +148,9 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(EMBANKMENT.getLocation().getOfficeId())) - .body("message", equalTo("Embankment successfully stored to CWMS")) - .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) + .body(OFFICE_ID, equalTo(EMBANKMENT.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Embankment successfully stored to CWMS")) + .body(IDENTIFIER, equalTo(EMBANKMENT.getLocation().getName())) ; String office = EMBANKMENT.getLocation().getOfficeId(); // Retrieve the Embankment and assert that it exists @@ -270,9 +273,9 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(EMBANKMENT.getLocation().getOfficeId())) - .body("message", equalTo("Embankment successfully stored to CWMS")) - .body("identifier", equalTo(EMBANKMENT.getLocation().getName())) + .body(OFFICE_ID, equalTo(EMBANKMENT.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Embankment successfully stored to CWMS")) + .body(IDENTIFIER, equalTo(EMBANKMENT.getLocation().getName())) ; String office = EMBANKMENT.getLocation().getOfficeId(); // Retrieve the Embankment and assert that it exists diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java index 821a427f7..718b4db51 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java @@ -85,6 +85,9 @@ public class LevelsControllerTestIT extends DataApiTestIT { public static final String OFFICE = "SPK"; private final List levelList = new ArrayList<>(); + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; @AfterEach void cleanup() throws Exception { @@ -868,9 +871,9 @@ void testStoreRetrieveVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(levelId)); //Read level with unit given() @@ -997,9 +1000,9 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(levelId)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_2.json"); @@ -1017,9 +1020,9 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(level1Id)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(level1Id)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_3.json"); @@ -1037,9 +1040,9 @@ void testStoreRetrieveAllVirtualLocationLevels() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(level2Id)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(level2Id)); //Read level with unit given() @@ -1193,9 +1196,9 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(levelId)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_2.json"); levelJson = levelJson.replace(oldLevelLoc2, levelLoc2); @@ -1214,9 +1217,9 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(level1Id)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(level1Id)); levelJson = readResourceFile("cwms/cda/api/virtuallevels/virtual_level_3.json"); levelJson = levelJson.replace(oldLevelLoc3, levelLoc3); @@ -1235,9 +1238,9 @@ void testStoreRetrieveAllVirtualLocationLevelsPaged() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(level2Id)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(level2Id)); //Read level with unit given() @@ -1425,9 +1428,9 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(levelId)); //Read level with unit given() @@ -1492,9 +1495,9 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("CWMS Location Level Deleted")) - .body("identifier", equalTo(levelId)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("CWMS Location Level Deleted")) + .body(IDENTIFIER, equalTo(levelId)); break; case "no_date": given() @@ -1511,9 +1514,9 @@ void testStoreDeleteVirtualLocationLevel(String deletionMethod) throws Exception .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("CWMS Location Level Deleted")) - .body("identifier", equalTo(levelId)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("CWMS Location Level Deleted")) + .body(IDENTIFIER, equalTo(levelId)); break; default: fail("Invalid deletion method: " + deletionMethod); @@ -1619,9 +1622,9 @@ void testStoreSeasonalLevel() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo("seasonalLoc6.Elev.Ave.1Day.tst")); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo("seasonalLoc6.Elev.Ave.1Day.tst")); given() .log().ifValidationFails(LogDetail.ALL, true) @@ -1672,9 +1675,9 @@ void testStoreTimeSeriesLevel() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(levelId)); given() .log().ifValidationFails(LogDetail.ALL, true) @@ -1723,9 +1726,9 @@ void testStoreConstantLevel() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Created Location Level")) - .body("identifier", equalTo(levelId)); + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Created Location Level")) + .body(IDENTIFIER, equalTo(levelId)); given() .log().ifValidationFails(LogDetail.ALL, true) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java index ecb9d4604..88f90117a 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LocationControllerTestIT.java @@ -60,6 +60,10 @@ class LocationControllerTestIT extends DataApiTestIT { private final List categoriesToCleanup = new ArrayList<>(); private final List groupsToCleanup = new ArrayList<>(); + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; + @AfterEach void cleanup() { @@ -141,9 +145,9 @@ void test_location_create_get_delete() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(officeId)) - .body("message", equalTo("Created Location")) - .body("identifier", equalTo("LOC_TEST")); + .body(OFFICE_ID, equalTo(officeId)) + .body(MESSAGE, equalTo("Created Location")) + .body(IDENTIFIER, equalTo("LOC_TEST")); //Create associated time series so delete fails without cascade try { createTimeseries(officeId, location.getName() + ".Flow.Inst.~1Hour.0.cda-test"); @@ -197,9 +201,9 @@ void test_location_create_get_delete() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(officeId)) - .body("message", equalTo("Deleted CWMS Location")) - .body("identifier", equalTo("LOC_TEST")); + .body(OFFICE_ID, equalTo(officeId)) + .body(MESSAGE, equalTo("Deleted CWMS Location")) + .body(IDENTIFIER, equalTo("LOC_TEST")); // get it back given() @@ -388,9 +392,9 @@ void test_location_create_get_bad_units_delete() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(officeId)) - .body("message", equalTo("Deleted CWMS Location")) - .body("identifier", equalTo("LOC_TEST")); + .body(OFFICE_ID, equalTo(officeId)) + .body(MESSAGE, equalTo("Deleted CWMS Location")) + .body(IDENTIFIER, equalTo("LOC_TEST")); // get it back given() @@ -469,9 +473,9 @@ void test_create_update() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(user.getOperatingOffice())) - .body("message", equalTo("Updated and renamed Location")) - .body("identifier", equalTo(updatedLocationName)); + .body(OFFICE_ID, equalTo(user.getOperatingOffice())) + .body(MESSAGE, equalTo("Updated and renamed Location")) + .body(IDENTIFIER, equalTo(updatedLocationName)); // get it back given() @@ -504,9 +508,9 @@ void test_create_update() throws Exception { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(user.getOperatingOffice())) - .body("message", equalTo("Deleted CWMS Location")) - .body("identifier", equalTo(updatedLocationName)); + .body(OFFICE_ID, equalTo(user.getOperatingOffice())) + .body(MESSAGE, equalTo("Deleted CWMS Location")) + .body(IDENTIFIER, equalTo(updatedLocationName)); } @Test diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java index b43b762ab..c473e9f83 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java @@ -91,6 +91,9 @@ final class LockControllerIT extends DataApiTestIT { private static final Lock STORABLE_LOCK; private static List locationLevelsToCleanup = new ArrayList<>(); private static Lock lockToCleanup; + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; static { try ( @@ -286,9 +289,9 @@ void test_get_create_delete_EN() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(LOCK.getLocation().getOfficeId())) - .body("message", equalTo("Lock successfully stored to CWMS.")) - .body("identifier", equalTo(LOCK.getLocation().getName())) + .body(OFFICE_ID, equalTo(LOCK.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(LOCK.getLocation().getName())) ; String office = LOCK.getLocation().getOfficeId(); // Retrieve the Lock and assert that it exists @@ -426,9 +429,9 @@ void test_get_create_delete_SI() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(metricLock.getLocation().getOfficeId())) - .body("message", equalTo("Lock successfully stored to CWMS.")) - .body("identifier", equalTo(metricLock.getLocation().getName())) + .body(OFFICE_ID, equalTo(metricLock.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(metricLock.getLocation().getName())) ; String office = metricLock.getLocation().getOfficeId(); @@ -648,9 +651,9 @@ void storeRetrieveSameLockNameDifferentProject() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(metricLock.getLocation().getOfficeId())) - .body("message", equalTo("Lock successfully stored to CWMS.")) - .body("identifier", equalTo(metricLock.getLocation().getName())) + .body(OFFICE_ID, equalTo(metricLock.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(metricLock.getLocation().getName())) ; lockToCleanup = metricLockProj2; @@ -688,9 +691,9 @@ void storeRetrieveSameLockNameDifferentProject() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(metricLock.getLocation().getOfficeId())) - .body("message", equalTo("Lock successfully stored to CWMS.")) - .body("identifier", equalTo(metricLock.getLocation().getName())) + .body(OFFICE_ID, equalTo(metricLock.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(metricLock.getLocation().getName())) ; String office = metricLock.getLocation().getOfficeId(); @@ -962,9 +965,9 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(LOCK.getLocation().getOfficeId())) - .body("message", equalTo("Lock successfully stored to CWMS.")) - .body("identifier", equalTo(LOCK.getLocation().getName())) + .body(OFFICE_ID, equalTo(LOCK.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(LOCK.getLocation().getName())) ; String office = LOCK.getLocation().getOfficeId(); // Retrieve the Lock and assert that it exists diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java index 305037a47..0263d247e 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java @@ -49,6 +49,9 @@ final class LookupTypeControllerIT extends DataApiTestIT { private static final String CATEGORY_IT = "AT_EMBANK_STRUCTURE_TYPE"; private static final String PREFIX_IT = "STRUCTURE_TYPE"; + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; @Test void test_get_create_delete() throws IOException { InputStream resource = this.getClass().getResourceAsStream("/cwms/cda/api/lookup_type.json"); @@ -81,9 +84,9 @@ void test_get_create_delete() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(lookupType.getOfficeId())) - .body("message", equalTo("Lookup Type successfully stored to CWMS.")) - .body("identifier", equalTo(lookupType.getDisplayValue())) + .body(OFFICE_ID, equalTo(lookupType.getOfficeId())) + .body(MESSAGE, equalTo("Lookup Type successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(lookupType.getDisplayValue())) ; String office = user.getOperatingOffice(); // Retrieve the lookup type and assert that it exists diff --git a/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java index f82175efc..decdc2fc8 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java @@ -67,6 +67,9 @@ final class MeasurementControllerTestIT extends DataApiTestIT { private static final String OFFICE_ID = TestAccounts.KeyUser.SPK_NORMAL.getOperatingOffice(); private static final List TEST_STREAMS = new ArrayList<>(); private static final List TEST_STREAM_LOC_IDS = new ArrayList<>(); + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; @BeforeAll public static void setup() throws SQLException { @@ -157,9 +160,9 @@ void test_create_retrieve_delete_measurement() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(measurement.getOfficeId())) - .body("message", equalTo("Measurement(s) successfully stored.")) - .body("identifier", equalTo("")); + .body(OFFICE_ID_TEXT, equalTo(measurement.getOfficeId())) + .body(MESSAGE, equalTo("Measurement(s) successfully stored.")) + .body(IDENTIFIER, isEmptyString()); String locationId = measurement.getLocationId(); String number = measurement.getNumber(); @@ -287,9 +290,9 @@ void test_create_retrieve_delete_measurement_multiple() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(measurement1.getOfficeId())) - .body("message", equalTo("Measurement(s) successfully stored.")) - .body("identifier", equalTo("")); + .body(OFFICE_ID_TEXT, equalTo(measurement1.getOfficeId())) + .body(MESSAGE, equalTo("Measurement(s) successfully stored.")) + .body(IDENTIFIER, isEmptyString()); // Retrieve the Measurements and assert that they exists given() diff --git a/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java index 829868d4d..4b62b23d6 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java @@ -46,6 +46,9 @@ @Tag("integration") final class PropertyControllerIT extends DataApiTestIT { + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; @@ -79,9 +82,9 @@ void test_get_create_delete() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(property.getOfficeId())) - .body("message", equalTo("Property successfully stored to CWMS.")) - .body("identifier", equalTo(property.getName())) + .body(OFFICE_ID, equalTo(property.getOfficeId())) + .body(MESSAGE, equalTo("Property successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(property.getName())) ; String office = property.getOfficeId(); // Retrieve the property and assert that it exists @@ -100,7 +103,7 @@ void test_get_create_delete() throws IOException { .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) .body("category", equalTo(property.getCategory())) - .body("office-id", equalTo(office)) + .body(OFFICE_ID, equalTo(office)) .body("comment", equalTo(property.getComment())) .body("value", equalTo(property.getValue())) .body("name", equalTo(property.getName())) @@ -219,9 +222,9 @@ void test_get_all() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(property.getOfficeId())) - .body("message", equalTo("Property successfully stored to CWMS.")) - .body("identifier", equalTo(property.getName())) + .body(OFFICE_ID, equalTo(property.getOfficeId())) + .body(MESSAGE, equalTo("Property successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(property.getName())) ; String office = property.getOfficeId(); // Retrieve the property and assert that it exists diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java index b890353bd..4b2d949a7 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java @@ -67,6 +67,10 @@ final class StreamControllerTestIT extends DataApiTestIT { private static final String OFFICE_ID = TestAccounts.KeyUser.SPK_NORMAL.getOperatingOffice(); private static final List STREAMS_CREATED = new ArrayList<>(); + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; + @BeforeAll public static void setup() throws SQLException { String testLoc = "Stream123Test"; //match the stream name in the json file @@ -143,9 +147,9 @@ void test_get_create_delete() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(stream.getOfficeId())) - .body("message", equalTo("Stream successfully stored to CWMS.")) - .body("identifier", equalTo(stream.getId().getName())); + .body(OFFICE_ID_TEXT, equalTo(stream.getOfficeId())) + .body(MESSAGE, equalTo("Stream successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(stream.getId().getName())); String streamId = stream.getId().getName(); @@ -278,9 +282,9 @@ void test_get_all() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(stream.getOfficeId())) - .body("message", equalTo("Stream successfully stored to CWMS.")) - .body("identifier", equalTo(stream.getId().getName())); + .body(OFFICE_ID_TEXT, equalTo(stream.getOfficeId())) + .body(MESSAGE, equalTo("Stream successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(stream.getId().getName())); String office = stream.getId().getOfficeId(); String streamId = stream.getId().getName(); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java index c6472f836..54263ef9d 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java @@ -71,6 +71,10 @@ final class StreamLocationControllerTestIT extends DataApiTestIT { private static final String OFFICE_ID = TestAccounts.KeyUser.SWT_NORMAL.getOperatingOffice(); private static final List STREAMS_CREATED = new ArrayList<>(); + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; + @BeforeAll public static void setup() throws SQLException { String testLoc = "StreamLoc321"; // match the stream location name in the json file @@ -147,9 +151,9 @@ void test_get_create_delete() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE_ID)) - .body("message", equalTo("Stream Location successfully stored to CWMS.")) - .body("identifier", equalTo(streamLocation.getId().getName())); + .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) + .body(MESSAGE, equalTo("Stream Location successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(streamLocation.getId().getName())); String streamLocationId = streamLocation.getId().getName(); @@ -288,9 +292,9 @@ void test_get_all() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE_ID)) - .body("message", equalTo("Stream Location successfully stored to CWMS.")) - .body("identifier", equalTo(streamLocation.getId().getName())); + .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) + .body(MESSAGE, equalTo("Stream Location successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(streamLocation.getId().getName())); String office = streamLocation.getId().getOfficeId(); String streamLocationId = streamLocation.getId().getName(); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java index 8202a82e9..d8dbad3a9 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java @@ -66,6 +66,9 @@ final class TurbineControllerIT extends DataApiTestIT { private static final String OFFICE = TestAccounts.KeyUser.SWT_NORMAL.getOperatingOffice(); private static final Location PROJECT_LOC; private static final Turbine TURBINE; + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; static { try(InputStream projectStream = TurbineControllerIT.class.getResourceAsStream("/cwms/cda/api/project_location_turb.json"); InputStream turbineStream = TurbineControllerIT.class.getResourceAsStream("/cwms/cda/api/turbine_phys.json")) { @@ -123,9 +126,9 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Turbine successfully stored to CWMS.")) - .body("identifier", equalTo("PROJ_TURB_PHYS")) + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Turbine successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo("PROJ_TURB_PHYS")) ; String office = TURBINE.getLocation().getOfficeId(); // Retrieve the Turbine and assert that it exists @@ -241,9 +244,9 @@ void test_get_all() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(OFFICE)) - .body("message", equalTo("Turbine successfully stored to CWMS.")) - .body("identifier", equalTo("PROJ_TURB_PHYS")) + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Turbine successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo("PROJ_TURB_PHYS")) ; String office = TURBINE.getLocation().getOfficeId(); // Retrieve the Turbine and assert that it exists diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java index 332bdd430..9147e64b4 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java @@ -71,6 +71,9 @@ class WaterContractControllerTestIT extends DataApiTestIT { private static final String OFFICE_ID = "SWT"; private static final WaterUserContract CONTRACT; + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; static { try (InputStream contractStream = WaterContractCreateController.class @@ -179,9 +182,9 @@ void test_create_get_delete_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(CONTRACT.getOfficeId())) - .body("message", equalTo("Water Contract Created Successfully")) - .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Water Contract Created Successfully")) + .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) ; // get contract @@ -199,7 +202,7 @@ void test_create_get_delete_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(CONTRACT.getOfficeId())) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) .body("water-user.entity-name", equalTo(CONTRACT.getWaterUser().getEntityName())) .body("water-user.project-id.office-id", equalTo(CONTRACT.getWaterUser() .getProjectId().getOfficeId())) @@ -429,9 +432,9 @@ void test_rename_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(CONTRACT.getOfficeId())) - .body("message", equalTo("Water Contract Created Successfully")) - .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Water Contract Created Successfully")) + .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) ; // rename contract @@ -451,9 +454,9 @@ void test_rename_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(CONTRACT.getOfficeId())) - .body("message", equalTo("Contract Renamed Successfully")) - .body("identifier", equalTo(NEW_CONTRACT_NAME)) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Contract Renamed Successfully")) + .body(IDENTIFIER, equalTo(NEW_CONTRACT_NAME)) ; // get contract, assert name is changed @@ -471,7 +474,7 @@ void test_rename_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(CONTRACT.getOfficeId())) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) .body("contract-id.name", equalTo(NEW_CONTRACT_NAME)) ; @@ -516,9 +519,9 @@ void test_getAllWaterContracts() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(CONTRACT.getOfficeId())) - .body("message", equalTo("Water Contract Created Successfully")) - .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Water Contract Created Successfully")) + .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) ; WaterUserContract waterContract = new WaterUserContract.Builder() @@ -552,9 +555,9 @@ void test_getAllWaterContracts() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(CONTRACT.getOfficeId())) - .body("message", equalTo("Water Contract Created Successfully")) - .body("identifier", equalTo(CONTRACT.getWaterUser().getEntityName())) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Water Contract Created Successfully")) + .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) ; // get all contracts diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java index 2a806b828..700ac429c 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java @@ -61,6 +61,9 @@ class WaterContractTypeControllerTestIT extends DataApiTestIT { private static final String OFFICE_ID = "SWT"; private static final LookupType CONTRACT_TYPE; + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; public static final Logger LOGGER = Logger.getLogger(WaterContractTypeControllerTestIT.class.getName()); static { @@ -97,9 +100,9 @@ void test_create_get_WaterContractType() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(CONTRACT_TYPE.getOfficeId())) - .body("message", equalTo("Contract type successfully stored to CWMS.")) - .body("identifier", equalTo(CONTRACT_TYPE.getDisplayValue())) + .body(OFFICE_ID_TEXT, equalTo(CONTRACT_TYPE.getOfficeId())) + .body(MESSAGE, equalTo("Contract type successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(CONTRACT_TYPE.getDisplayValue())) ; // get water contract type and assert that it exists @@ -148,9 +151,9 @@ void test_store_delete_WaterContractType() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(CONTRACT_TYPE.getOfficeId())) - .body("message", equalTo("Contract type successfully stored to CWMS.")) - .body("identifier", equalTo(CONTRACT_TYPE.getDisplayValue())) + .body(OFFICE_ID_TEXT, equalTo(CONTRACT_TYPE.getOfficeId())) + .body(MESSAGE, equalTo("Contract type successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(CONTRACT_TYPE.getDisplayValue())) ; // get water contract type and assert that it exists diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java index 9a7924e1c..bd52578ab 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java @@ -69,6 +69,9 @@ class WaterUserControllerTestIT extends DataApiTestIT { private static final String OFFICE_ID = "SWT"; private static final WaterUser WATER_USER; + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; static { try (InputStream userStream = WaterUserContract.class.getResourceAsStream("/cwms/cda/api/wateruser.json")) { @@ -161,9 +164,9 @@ void test_create_get_delete_WaterUser() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(WATER_USER.getProjectId().getOfficeId())) - .body("message", equalTo("Water user successfully stored to CWMS.")) - .body("identifier", equalTo(WATER_USER.getEntityName())) + .body(OFFICE_ID_TEXT, equalTo(WATER_USER.getProjectId().getOfficeId())) + .body(MESSAGE, equalTo("Water user successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(WATER_USER.getEntityName())) ; // get WaterUser, assert that it is correct @@ -252,9 +255,9 @@ void test_rename_WaterUser() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(WATER_USER.getProjectId().getOfficeId())) - .body("message", equalTo("Water user successfully stored to CWMS.")) - .body("identifier", equalTo(WATER_USER.getEntityName())) + .body(OFFICE_ID_TEXT, equalTo(WATER_USER.getProjectId().getOfficeId())) + .body(MESSAGE, equalTo("Water user successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(WATER_USER.getEntityName())) ; // Rename WaterUser @@ -275,9 +278,9 @@ void test_rename_WaterUser() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body("office-id", equalTo(OFFICE_ID)) - .body("message", equalTo("Water user successfully updated in CWMS.")) - .body("identifier", equalTo("NEW USER NAME")) + .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) + .body(MESSAGE, equalTo("Water user successfully updated in CWMS.")) + .body(IDENTIFIER, equalTo("NEW USER NAME")) ; // Get WaterUser, assert name has changed @@ -360,9 +363,9 @@ void test_getAllWaterUsers() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(WATER_USER.getProjectId().getOfficeId())) - .body("message", equalTo("Water user successfully stored to CWMS.")) - .body("identifier", equalTo(WATER_USER.getEntityName())) + .body(OFFICE_ID_TEXT, equalTo(WATER_USER.getProjectId().getOfficeId())) + .body(MESSAGE, equalTo("Water user successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(WATER_USER.getEntityName())) ; // Create WaterUser @@ -380,9 +383,9 @@ void test_getAllWaterUsers() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(WATER_USER.getProjectId().getOfficeId())) - .body("message", equalTo("Water user successfully stored to CWMS.")) - .body("identifier", equalTo(waterUser.getEntityName())) + .body(OFFICE_ID_TEXT, equalTo(WATER_USER.getProjectId().getOfficeId())) + .body(MESSAGE, equalTo("Water user successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(waterUser.getEntityName())) ; // get water users diff --git a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java index 4f274b87d..e4697c856 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java @@ -87,6 +87,9 @@ class OutletControllerTestIT extends BaseOutletDaoIT { = buildProjectStructureLocation(PROJECT_2_ID.getName() + "-TG2", OUTLET_KIND); private static final Outlet NEW_RATED_OUTLET_UNCONTROLLED = buildTestOutlet(RATED_OUTLET_LOCATION_UNCONTROLLED, PROJECT_LOC, RATING_GROUP_UNCONTROLLED, RATING_SPEC_ID_UNCONTROLLED); + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; @BeforeAll public static void setup() throws Exception { @@ -148,9 +151,9 @@ void test_outlet_rename() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(NEW_CONDUIT_GATE_2_OUTLET.getLocation().getOfficeId())) - .body("message", equalTo("Outlet successfully stored to CWMS.")) - .body("identifier", equalTo(NEW_CONDUIT_GATE_2_OUTLET.getLocation().getName())); + .body(OFFICE_ID_TEXT, equalTo(NEW_CONDUIT_GATE_2_OUTLET.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Outlet successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(NEW_CONDUIT_GATE_2_OUTLET.getLocation().getName())); //Get the newly created outlet given() @@ -243,9 +246,9 @@ void test_rating_spec_id_uncontrolled() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(NEW_RATED_OUTLET_UNCONTROLLED.getLocation().getOfficeId())) - .body("message", equalTo("Outlet successfully stored to CWMS.")) - .body("identifier", equalTo(NEW_RATED_OUTLET_UNCONTROLLED.getLocation().getName())) + .body(OFFICE_ID_TEXT, equalTo(NEW_RATED_OUTLET_UNCONTROLLED.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Outlet successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(NEW_RATED_OUTLET_UNCONTROLLED.getLocation().getName())) ; // Get the outlet, assert that it has null rating spec id @@ -396,9 +399,9 @@ void test_rating_spec_id_controlled() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(NEW_RATED_OUTLET_CONTROLLED.getLocation().getOfficeId())) - .body("message", equalTo("Outlet successfully stored to CWMS.")) - .body("identifier", equalTo(NEW_RATED_OUTLET_CONTROLLED.getLocation().getName())); + .body(OFFICE_ID_TEXT, equalTo(NEW_RATED_OUTLET_CONTROLLED.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Outlet successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(NEW_RATED_OUTLET_CONTROLLED.getLocation().getName())); // Get the outlet, assert that it has null rating spec id given() @@ -572,9 +575,9 @@ void test_outlet_crud() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getOfficeId())) - .body("message", equalTo("Outlet successfully stored to CWMS.")) - .body("identifier", equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getName())); + .body(OFFICE_ID_TEXT, equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Outlet successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getName())); //Get the newly created outlet given() @@ -616,9 +619,9 @@ void test_outlet_crud() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body("office-id", equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getOfficeId())) - .body("message", equalTo("Outlet successfully stored to CWMS.")) - .body("identifier", equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getName())); + .body(OFFICE_ID_TEXT, equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Outlet successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getName())); //Get the newly modified outlet given() From 56d34aba6245cd54a87191b2de1ce6acd3eebec0 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 13:44:09 -0700 Subject: [PATCH 29/37] Fix HTTP Status inconsistencies --- .../src/main/java/cwms/cda/api/MeasurementController.java | 2 +- .../java/cwms/cda/api/location/kind/OutletController.java | 4 ++-- .../cwms/cda/api/location/kind/OutletControllerTestIT.java | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java b/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java index 68a605ec8..6ba4d7624 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java @@ -189,7 +189,7 @@ public void getOne(@NotNull Context ctx, @NotNull String locationId) { method = HttpMethod.POST, tags = {TAG}, responses = { - @OpenApiResponse(status = "200", description = "Measurement(s) successfully stored.") + @OpenApiResponse(status = "201", description = "Measurement(s) successfully stored.") } ) @Override diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java index 8509772c7..89dd592aa 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java @@ -172,7 +172,7 @@ public void getOne(@NotNull Context ctx, @NotNull String name) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "CWMS Outlet successfully renamed.") + @OpenApiResponse(status = STATUS_200, description = "CWMS Outlet successfully renamed.") } ) @Override @@ -184,7 +184,7 @@ public void update(@NotNull Context ctx, @NotNull String name) { OutletDao dao = new OutletDao(dsl); dao.renameOutlet(office, name, newOutletId); StatusResponse re = new StatusResponse(office, "CWMS Outlet successfully renamed.", newOutletId); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java index e4697c856..1220aa6c9 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java @@ -184,7 +184,10 @@ void test_outlet_rename() { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(RENAMED_CONDUIT_GATE.getOfficeId())) + .body(MESSAGE, equalTo("CWMS Outlet successfully renamed.")) + .body(IDENTIFIER, equalTo(RENAMED_CONDUIT_GATE.getName())); ; //Fail to retrieve old outlet name From e54be2cc27d24b513d6d8061922437601e6fc524 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 13:56:36 -0700 Subject: [PATCH 30/37] Fix bug in StreamLocationController --- .../src/main/java/cwms/cda/api/StreamLocationController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java index f1257ca7d..cc83262bf 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java @@ -222,7 +222,7 @@ public void create(Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Stream Location successfully updated to CWMS.") + @OpenApiResponse(status = STATUS_200, description = "Stream Location successfully updated to CWMS.") } ) @Override @@ -237,7 +237,7 @@ public void update(Context ctx, @NotNull String locationId) { StatusResponse re = new StatusResponse(streamLocation.getId().getOfficeId(), "Stream Location successfully updated to CWMS.", streamLocation.getId().getName()); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json("Updated Stream Location"); + ctx.status(HttpServletResponse.SC_OK).json(re); } } From 7a9513b26b9714797020491f59d8e884ab6fb2e9 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 15:52:05 -0700 Subject: [PATCH 31/37] Add StatusResponse to VirtualOutlet, AccountingCreate, Rating, TurbineChanges, and StreamReach Controllers. Update Tests accordingly. --- .../cwms/cda/api/StreamReachController.java | 17 ++++++++---- .../api/TurbineChangesDeleteController.java | 4 ++- .../cda/api/TurbineChangesPostController.java | 7 +++-- .../kind/VirtualOutletController.java | 4 ++- .../kind/VirtualOutletCreateController.java | 5 +++- .../cwms/cda/api/rating/RatingController.java | 7 +++-- .../AccountingCreateController.java | 8 +++--- .../cda/api/StreamReachControllerTestIT.java | 26 ++++++++++++++----- .../cda/api/TurbineChangesControllerIT.java | 7 +++++ .../WaterSupplyAccountingControllerIT.java | 9 +++++++ .../kind/VirtualOutletControllerTestIT.java | 13 ++++++++-- .../cda/api/rating/RatingsControllerIT.java | 18 ++++++++++--- 12 files changed, 98 insertions(+), 27 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamReachController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamReachController.java index 689395531..3bfbabfd7 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamReachController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamReachController.java @@ -41,6 +41,7 @@ import static cwms.cda.api.Controllers.SIZE; import static cwms.cda.api.Controllers.STATION_UNIT; import static cwms.cda.api.Controllers.STATUS_200; +import static cwms.cda.api.Controllers.STATUS_201; import static cwms.cda.api.Controllers.STATUS_204; import static cwms.cda.api.Controllers.STREAM_ID; import static cwms.cda.api.Controllers.STREAM_ID_MASK; @@ -48,6 +49,7 @@ import static cwms.cda.api.Controllers.requiredParam; import cwms.cda.data.dao.StreamLocationDao; import cwms.cda.data.dao.StreamReachDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.stream.StreamReach; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -182,7 +184,7 @@ public void getOne(@NotNull Context ctx, @NotNull String reachId) { method = HttpMethod.POST, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Stream Reach successfully stored to CWMS.") + @OpenApiResponse(status = STATUS_201, description = "Stream Reach successfully stored to CWMS.") } ) @Override @@ -195,7 +197,9 @@ public void create(@NotNull Context ctx) { DSLContext dsl = getDslContext(ctx); StreamReachDao dao = new StreamReachDao(dsl); dao.storeStreamReach(streamReach, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Stream Reach"); + StatusResponse re = new StatusResponse(streamReach.getStreamId().getOfficeId(), "Stream Reach successfully stored to CWMS.", + streamReach.getStreamId().getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -213,7 +217,7 @@ public void create(@NotNull Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Stream Reach successfully renamed in CWMS.") + @OpenApiResponse(status = STATUS_200, description = "Stream Reach successfully renamed in CWMS.") } ) @Override @@ -224,7 +228,8 @@ public void update(@NotNull Context ctx, @NotNull String reachId) { DSLContext dsl = getDslContext(ctx); StreamReachDao dao = new StreamReachDao(dsl); dao.renameStreamReach(office, reachId, newReachId); - ctx.status(HttpServletResponse.SC_OK).json("Renamed Stream Reach"); + StatusResponse re = new StatusResponse(office, "Stream Reach successfully renamed in CWMS.", newReachId); + ctx.status(HttpServletResponse.SC_OK).json(re); } } @@ -251,7 +256,9 @@ public void delete(@NotNull Context ctx, @NotNull String reachId) { DSLContext dsl = getDslContext(ctx); StreamReachDao dao = new StreamReachDao(dsl); dao.deleteStreamReach(office, reachId); - ctx.status(HttpServletResponse.SC_OK).json("Deleted Stream Reach"); + StatusResponse re = new StatusResponse(office, "Stream Reach successfully deleted from CWMS.", + reachId); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesDeleteController.java b/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesDeleteController.java index b30dac81a..1f2000907 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesDeleteController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesDeleteController.java @@ -52,6 +52,7 @@ import cwms.cda.api.enums.UnitSystem; import cwms.cda.data.dao.location.kind.TurbineDao; import cwms.cda.data.dto.CwmsId; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.TurbineChange; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -125,7 +126,8 @@ public void handle(@NotNull Context ctx) throws Exception { .withOfficeId(office) .build(); dao.deleteOperationalChanges(cwmsId, begin, end, overrideProtection); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(projectId + " Deleted"); + StatusResponse re = new StatusResponse(office, "Turbine successfully deleted from CWMS.", projectId); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesPostController.java b/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesPostController.java index fd25b9121..dda5a6dd0 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesPostController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesPostController.java @@ -40,6 +40,7 @@ import static cwms.cda.api.Controllers.SIZE; import static cwms.cda.api.Controllers.START_TIME_INCLUSIVE; import static cwms.cda.api.Controllers.STATUS_200; +import static cwms.cda.api.Controllers.STATUS_201; import static cwms.cda.api.Controllers.STATUS_204; import static cwms.cda.api.Controllers.STATUS_404; import static cwms.cda.api.Controllers.UNIT_SYSTEM; @@ -54,6 +55,7 @@ import cwms.cda.api.errors.CdaError; import cwms.cda.data.dao.location.kind.TurbineDao; import cwms.cda.data.dto.CwmsId; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.TurbineChange; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -107,7 +109,7 @@ private Timer.Context markAndTime(String subject) { method = HttpMethod.POST, tags = {TurbineController.TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Turbine successfully stored to CWMS."), + @OpenApiResponse(status = STATUS_201, description = "Turbine successfully stored to CWMS."), @OpenApiResponse(status = STATUS_404, description = "Project Id or Turbine location Ids not found.") } ) @@ -122,7 +124,8 @@ public void handle(@NotNull Context ctx) throws Exception { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.storeOperationalChanges(turbine, overrideProtection); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Turbine Changes"); + StatusResponse re = new StatusResponse(turbine.get(0).getProjectId().getOfficeId(), "Created Turbine Changes"); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletController.java index 25cdbcdf5..842f936ce 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletController.java @@ -28,6 +28,7 @@ import cwms.cda.api.errors.CdaError; import cwms.cda.data.dao.JooqDao; import cwms.cda.data.dao.location.kind.OutletDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.VirtualOutlet; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -170,7 +171,8 @@ public void delete(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); OutletDao dao = new OutletDao(dsl); dao.deleteVirtualOutlet(office, projectId, name, deleteMethod.getRule()); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(name + " Deleted"); + StatusResponse re = new StatusResponse(office, "Virtual Outlet successfully deleted from CWMS.", name); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletCreateController.java index 18916fd30..b6d3e8557 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletCreateController.java @@ -24,6 +24,7 @@ import com.codahale.metrics.Timer; import cwms.cda.api.BaseHandler; import cwms.cda.data.dao.location.kind.OutletDao; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.VirtualOutlet; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -74,7 +75,9 @@ public void handle(@NotNull Context ctx) throws Exception { DSLContext dsl = getDslContext(ctx); OutletDao dao = new OutletDao(dsl); dao.storeVirtualOutlet(virtualOutlet, failIfExists); - ctx.status(HttpServletResponse.SC_CREATED).json("Created Outlet"); + StatusResponse re = new StatusResponse(virtualOutlet.getVirtualOutletId().getOfficeId(), + "Virtual Outlet successfully stored to CWMS.", virtualOutlet.getVirtualOutletId().getName()); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/rating/RatingController.java b/cwms-data-api/src/main/java/cwms/cda/api/rating/RatingController.java index 92c568b1f..85dc9c0ab 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/rating/RatingController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/rating/RatingController.java @@ -63,6 +63,7 @@ import cwms.cda.data.dao.RatingDao; import cwms.cda.data.dao.RatingSetDao; import cwms.cda.data.dto.CwmsDTOBase; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; import cwms.cda.formatters.annotations.FormattableWith; @@ -147,7 +148,8 @@ public void create(@NotNull Context ctx) { boolean storeTemplate = ctx.queryParamAsClass(STORE_TEMPLATE, Boolean.class).getOrDefault(true); String ratingSet = deserializeRatingSet(ctx, storeTemplate); ratingDao.create(ratingSet, false); - ctx.status(HttpServletResponse.SC_OK).json("Created RatingSet"); + StatusResponse re = new StatusResponse(RatingDao.extractOfficeFromXml(ratingSet), "Created RatingSet"); + ctx.status(HttpServletResponse.SC_OK).json(re); } catch (IOException ex) { CdaError re = new CdaError("Failed to process request to update RatingSet"); logger.log(Level.SEVERE, re.toString(), ex); @@ -500,7 +502,8 @@ public void update(@NotNull Context ctx, @NotNull String ratingId) { .getOrDefault(false); String ratingSet = deserializeRatingSet(ctx, storeTemplate); ratingDao.store(ratingSet, replaceBaseCurve); - ctx.status(HttpServletResponse.SC_OK).json("Updated RatingSet"); + StatusResponse re = new StatusResponse(RatingDao.extractOfficeFromXml(ratingSet), "Updated RatingSet"); + ctx.status(HttpServletResponse.SC_OK).json(re); } catch (IOException ex) { CdaError re = new CdaError("Failed to process request to update RatingSet"); logger.log(Level.SEVERE, re.toString(), ex); diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/AccountingCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/AccountingCreateController.java index ab69a636d..dd627be0b 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/AccountingCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/AccountingCreateController.java @@ -29,7 +29,7 @@ import static cwms.cda.api.Controllers.CONTRACT_NAME; import static cwms.cda.api.Controllers.CREATE; import static cwms.cda.api.Controllers.OFFICE; -import static cwms.cda.api.Controllers.STATUS_204; +import static cwms.cda.api.Controllers.STATUS_200; import static cwms.cda.api.Controllers.STATUS_501; import static cwms.cda.api.Controllers.WATER_USER; import static cwms.cda.data.dao.JooqDao.getDslContext; @@ -40,6 +40,7 @@ import cwms.cda.data.dao.LookupTypeDao; import cwms.cda.data.dao.watersupply.WaterSupplyAccountingDao; import cwms.cda.data.dto.LookupType; +import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.watersupply.PumpTransfer; import cwms.cda.data.dto.watersupply.WaterSupplyAccounting; import cwms.cda.formatters.ContentType; @@ -93,7 +94,7 @@ protected WaterSupplyAccountingDao getWaterSupplyAccountingDao(DSLContext dsl) { + "accounting.", required = true), }, responses = { - @OpenApiResponse(status = STATUS_204, description = "The pump accounting entry was created."), + @OpenApiResponse(status = STATUS_200, description = "The pump accounting entry was created."), @OpenApiResponse(status = STATUS_501, description = "Requested format is not implemented") }, description = "Create a new pump accounting entry associated with a water supply contract.", @@ -132,7 +133,8 @@ public void handle(@NotNull Context ctx) { } waterSupplyAccountingDao.storeAccounting(accounting); - ctx.status(HttpServletResponse.SC_CREATED).json(contractId + " created successfully"); + StatusResponse re = new StatusResponse(office, "The pump accounting entry was created.", contractId); + ctx.status(HttpServletResponse.SC_CREATED).json(re); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamReachControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamReachControllerTestIT.java index 72057e519..a3d2723b1 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamReachControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamReachControllerTestIT.java @@ -47,8 +47,6 @@ import java.util.List; import mil.army.usace.hec.test.database.CwmsDatabaseContainer; import org.apache.commons.io.IOUtils; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; @@ -61,6 +59,7 @@ import static cwms.cda.security.ApiKeyIdentityProvider.AUTH_HEADER; import static io.restassured.RestAssured.given; +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertNotNull; @Tag("integration") @@ -69,6 +68,9 @@ final class StreamReachControllerTestIT extends DataApiTestIT { private static final String OFFICE_ID = TestAccounts.KeyUser.SPK_NORMAL.getOperatingOffice(); private static final List STREAMS_CREATED = new ArrayList<>(); private static final List STREAM_LOCATIONS_CREATED = new ArrayList<>(); + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; @BeforeAll public static void setup() throws SQLException { @@ -196,7 +198,10 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body(OFFICE_ID, equalTo(streamReach.getStreamId().getOfficeId())) + .body(MESSAGE, equalTo("Stream Reach successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(streamReach.getStreamId().getName())); String streamReachId = streamReach.getId().getName(); @@ -251,7 +256,10 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(streamReach.getStreamId().getOfficeId())) + .body(MESSAGE, equalTo("Stream Reach successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(streamReach.getStreamId().getName())); // Retrieve the StreamReach and assert that it does not exist given() @@ -335,7 +343,10 @@ void test_get_all() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body(OFFICE_ID, equalTo(streamReach.getStreamId().getOfficeId())) + .body(MESSAGE, equalTo("Stream Reach successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(streamReach.getStreamId().getName())); String office = streamReach.getId().getOfficeId(); String streamReachId = streamReach.getId().getName(); @@ -391,7 +402,10 @@ void test_get_all() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(streamReach.getStreamId().getOfficeId())) + .body(MESSAGE, equalTo("Stream Reach successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(streamReach.getStreamId().getName())); //verify deletion given() diff --git a/cwms-data-api/src/test/java/cwms/cda/api/TurbineChangesControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/TurbineChangesControllerIT.java index 844d5fd7b..4e5a0f1e1 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/TurbineChangesControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/TurbineChangesControllerIT.java @@ -30,6 +30,7 @@ import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.isEmptyString; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; @@ -75,6 +76,9 @@ final class TurbineChangesControllerIT extends DataApiTestIT { private static final Location TURBINE_LOC; private static final Turbine TURBINE; private static final List TURBINE_CHANGES; + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; static { Class c = TurbineChangesControllerIT.class; @@ -156,6 +160,9 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body(OFFICE_ID, equalTo(PROJECT_LOC.getOfficeId())) + .body(MESSAGE, equalTo("Created Turbine Changes")) + .body(IDENTIFIER, isEmptyString()) ; String office = TURBINE.getLocation().getOfficeId(); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterSupplyAccountingControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterSupplyAccountingControllerIT.java index 9598c3595..25d8441e8 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterSupplyAccountingControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterSupplyAccountingControllerIT.java @@ -88,6 +88,9 @@ class WaterSupplyAccountingControllerIT extends DataApiTestIT { private static Location pump1; private static Location pump2; private static Location pump3; + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; static { try (InputStream accountStream = WaterSupplyAccounting.class @@ -292,6 +295,9 @@ void testCreateRetrieveWaterAccounting() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) + .body(MESSAGE, equalTo("The pump accounting entry was created.")) + .body(IDENTIFIER, equalTo(contract.getContractId().getName())) ; // retrieve pump accounting @@ -354,6 +360,9 @@ void testRetrieveNotFoundOutsideTimeWindow() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) + .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) + .body(MESSAGE, equalTo("The pump accounting entry was created.")) + .body(IDENTIFIER, equalTo(contract.getContractId().getName())) ; // retrieve pump accounting diff --git a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/VirtualOutletControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/VirtualOutletControllerTestIT.java index f36dda113..b74f1c144 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/VirtualOutletControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/VirtualOutletControllerTestIT.java @@ -51,6 +51,9 @@ @Tag("integration") class VirtualOutletControllerTestIT extends ProjectStructureIT { + private static final String OFFICE_ID_TEXT = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; private static final String OUTLET_KIND = "OUTLET"; private static final CwmsId VIRTUAL_OUTLET_RATING_GROUP = new CwmsId.Builder().withName("Rating-" + PROJECT_LOC2.getName() + "-VirtualOutlet") .withOfficeId(OFFICE_ID) @@ -212,7 +215,10 @@ void test_crud() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body(OFFICE_ID_TEXT, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getOfficeId())) + .body(MESSAGE, equalTo("Virtual Outlet successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getName())); //Read the virtual outlet @@ -254,7 +260,10 @@ void test_crud() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)); + .statusCode(is(HttpServletResponse.SC_CREATED)) + .body(OFFICE_ID_TEXT, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getOfficeId())) + .body(MESSAGE, equalTo("Virtual Outlet successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getName())); //Delete the virtual outlet given() diff --git a/cwms-data-api/src/test/java/cwms/cda/api/rating/RatingsControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/rating/RatingsControllerIT.java index 5c99202e9..b2032f725 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/rating/RatingsControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/rating/RatingsControllerIT.java @@ -54,8 +54,10 @@ import mil.army.usace.hec.cwms.rating.io.xml.RatingContainerXmlFactory; import mil.army.usace.hec.cwms.rating.io.xml.RatingSetContainerXmlFactory; import mil.army.usace.hec.cwms.rating.io.xml.RatingSpecXmlFactory; -import static org.hamcrest.Matchers.is; + import org.junit.jupiter.api.AfterEach; + +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -64,7 +66,9 @@ @Tag("integration") class RatingsControllerIT extends DataApiTestIT{ - + private static final String OFFICE_ID = "office-id"; + private static final String MESSAGE = "message"; + private static final String IDENTIFIER = "identifier"; @AfterEach void tearDown() { @@ -138,7 +142,10 @@ static void storeOneSet(String file, String locationString, boolean storeTemplat .then() .assertThat() .log().ifValidationFails(LogDetail.ALL,true) - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(SPK)) + .body(MESSAGE, equalTo("Created RatingSet")) + .body(IDENTIFIER, isEmptyString()); } static void updateOneSet(String file, boolean replaceBaseCurve) throws Exception { @@ -204,7 +211,10 @@ static void updateOneSet(String file, boolean replaceBaseCurve) throws Exception .then() .assertThat() .log().ifValidationFails(LogDetail.ALL,true) - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(SPK)) + .body(MESSAGE, equalTo("Updated RatingSet")) + .body(IDENTIFIER, isEmptyString()); } From 9f861b70d77af11e02a63a52afedf4ca9771e9b9 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 15:52:24 -0700 Subject: [PATCH 32/37] Revert "Add StatusResponse to VirtualOutlet, AccountingCreate, Rating, TurbineChanges, and StreamReach Controllers. Update Tests accordingly." This reverts commit 7a9513b26b9714797020491f59d8e884ab6fb2e9. --- .../cwms/cda/api/StreamReachController.java | 17 ++++-------- .../api/TurbineChangesDeleteController.java | 4 +-- .../cda/api/TurbineChangesPostController.java | 7 ++--- .../kind/VirtualOutletController.java | 4 +-- .../kind/VirtualOutletCreateController.java | 5 +--- .../cwms/cda/api/rating/RatingController.java | 7 ++--- .../AccountingCreateController.java | 8 +++--- .../cda/api/StreamReachControllerTestIT.java | 26 +++++-------------- .../cda/api/TurbineChangesControllerIT.java | 7 ----- .../WaterSupplyAccountingControllerIT.java | 9 ------- .../kind/VirtualOutletControllerTestIT.java | 13 ++-------- .../cda/api/rating/RatingsControllerIT.java | 18 +++---------- 12 files changed, 27 insertions(+), 98 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamReachController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamReachController.java index 3bfbabfd7..689395531 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamReachController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamReachController.java @@ -41,7 +41,6 @@ import static cwms.cda.api.Controllers.SIZE; import static cwms.cda.api.Controllers.STATION_UNIT; import static cwms.cda.api.Controllers.STATUS_200; -import static cwms.cda.api.Controllers.STATUS_201; import static cwms.cda.api.Controllers.STATUS_204; import static cwms.cda.api.Controllers.STREAM_ID; import static cwms.cda.api.Controllers.STREAM_ID_MASK; @@ -49,7 +48,6 @@ import static cwms.cda.api.Controllers.requiredParam; import cwms.cda.data.dao.StreamLocationDao; import cwms.cda.data.dao.StreamReachDao; -import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.stream.StreamReach; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -184,7 +182,7 @@ public void getOne(@NotNull Context ctx, @NotNull String reachId) { method = HttpMethod.POST, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_201, description = "Stream Reach successfully stored to CWMS.") + @OpenApiResponse(status = STATUS_204, description = "Stream Reach successfully stored to CWMS.") } ) @Override @@ -197,9 +195,7 @@ public void create(@NotNull Context ctx) { DSLContext dsl = getDslContext(ctx); StreamReachDao dao = new StreamReachDao(dsl); dao.storeStreamReach(streamReach, failIfExists); - StatusResponse re = new StatusResponse(streamReach.getStreamId().getOfficeId(), "Stream Reach successfully stored to CWMS.", - streamReach.getStreamId().getName()); - ctx.status(HttpServletResponse.SC_CREATED).json(re); + ctx.status(HttpServletResponse.SC_CREATED).json("Created Stream Reach"); } } @@ -217,7 +213,7 @@ public void create(@NotNull Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_200, description = "Stream Reach successfully renamed in CWMS.") + @OpenApiResponse(status = STATUS_204, description = "Stream Reach successfully renamed in CWMS.") } ) @Override @@ -228,8 +224,7 @@ public void update(@NotNull Context ctx, @NotNull String reachId) { DSLContext dsl = getDslContext(ctx); StreamReachDao dao = new StreamReachDao(dsl); dao.renameStreamReach(office, reachId, newReachId); - StatusResponse re = new StatusResponse(office, "Stream Reach successfully renamed in CWMS.", newReachId); - ctx.status(HttpServletResponse.SC_OK).json(re); + ctx.status(HttpServletResponse.SC_OK).json("Renamed Stream Reach"); } } @@ -256,9 +251,7 @@ public void delete(@NotNull Context ctx, @NotNull String reachId) { DSLContext dsl = getDslContext(ctx); StreamReachDao dao = new StreamReachDao(dsl); dao.deleteStreamReach(office, reachId); - StatusResponse re = new StatusResponse(office, "Stream Reach successfully deleted from CWMS.", - reachId); - ctx.status(HttpServletResponse.SC_OK).json(re); + ctx.status(HttpServletResponse.SC_OK).json("Deleted Stream Reach"); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesDeleteController.java b/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesDeleteController.java index 1f2000907..b30dac81a 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesDeleteController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesDeleteController.java @@ -52,7 +52,6 @@ import cwms.cda.api.enums.UnitSystem; import cwms.cda.data.dao.location.kind.TurbineDao; import cwms.cda.data.dto.CwmsId; -import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.TurbineChange; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -126,8 +125,7 @@ public void handle(@NotNull Context ctx) throws Exception { .withOfficeId(office) .build(); dao.deleteOperationalChanges(cwmsId, begin, end, overrideProtection); - StatusResponse re = new StatusResponse(office, "Turbine successfully deleted from CWMS.", projectId); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(projectId + " Deleted"); } } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesPostController.java b/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesPostController.java index dda5a6dd0..fd25b9121 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesPostController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/TurbineChangesPostController.java @@ -40,7 +40,6 @@ import static cwms.cda.api.Controllers.SIZE; import static cwms.cda.api.Controllers.START_TIME_INCLUSIVE; import static cwms.cda.api.Controllers.STATUS_200; -import static cwms.cda.api.Controllers.STATUS_201; import static cwms.cda.api.Controllers.STATUS_204; import static cwms.cda.api.Controllers.STATUS_404; import static cwms.cda.api.Controllers.UNIT_SYSTEM; @@ -55,7 +54,6 @@ import cwms.cda.api.errors.CdaError; import cwms.cda.data.dao.location.kind.TurbineDao; import cwms.cda.data.dto.CwmsId; -import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.TurbineChange; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -109,7 +107,7 @@ private Timer.Context markAndTime(String subject) { method = HttpMethod.POST, tags = {TurbineController.TAG}, responses = { - @OpenApiResponse(status = STATUS_201, description = "Turbine successfully stored to CWMS."), + @OpenApiResponse(status = STATUS_204, description = "Turbine successfully stored to CWMS."), @OpenApiResponse(status = STATUS_404, description = "Project Id or Turbine location Ids not found.") } ) @@ -124,8 +122,7 @@ public void handle(@NotNull Context ctx) throws Exception { DSLContext dsl = getDslContext(ctx); TurbineDao dao = new TurbineDao(dsl); dao.storeOperationalChanges(turbine, overrideProtection); - StatusResponse re = new StatusResponse(turbine.get(0).getProjectId().getOfficeId(), "Created Turbine Changes"); - ctx.status(HttpServletResponse.SC_CREATED).json(re); + ctx.status(HttpServletResponse.SC_CREATED).json("Created Turbine Changes"); } } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletController.java index 842f936ce..25cdbcdf5 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletController.java @@ -28,7 +28,6 @@ import cwms.cda.api.errors.CdaError; import cwms.cda.data.dao.JooqDao; import cwms.cda.data.dao.location.kind.OutletDao; -import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.VirtualOutlet; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -171,8 +170,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { DSLContext dsl = getDslContext(ctx); OutletDao dao = new OutletDao(dsl); dao.deleteVirtualOutlet(office, projectId, name, deleteMethod.getRule()); - StatusResponse re = new StatusResponse(office, "Virtual Outlet successfully deleted from CWMS.", name); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_NO_CONTENT).json(name + " Deleted"); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletCreateController.java index b6d3e8557..18916fd30 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/VirtualOutletCreateController.java @@ -24,7 +24,6 @@ import com.codahale.metrics.Timer; import cwms.cda.api.BaseHandler; import cwms.cda.data.dao.location.kind.OutletDao; -import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.location.kind.VirtualOutlet; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; @@ -75,9 +74,7 @@ public void handle(@NotNull Context ctx) throws Exception { DSLContext dsl = getDslContext(ctx); OutletDao dao = new OutletDao(dsl); dao.storeVirtualOutlet(virtualOutlet, failIfExists); - StatusResponse re = new StatusResponse(virtualOutlet.getVirtualOutletId().getOfficeId(), - "Virtual Outlet successfully stored to CWMS.", virtualOutlet.getVirtualOutletId().getName()); - ctx.status(HttpServletResponse.SC_CREATED).json(re); + ctx.status(HttpServletResponse.SC_CREATED).json("Created Outlet"); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/rating/RatingController.java b/cwms-data-api/src/main/java/cwms/cda/api/rating/RatingController.java index 85dc9c0ab..92c568b1f 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/rating/RatingController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/rating/RatingController.java @@ -63,7 +63,6 @@ import cwms.cda.data.dao.RatingDao; import cwms.cda.data.dao.RatingSetDao; import cwms.cda.data.dto.CwmsDTOBase; -import cwms.cda.data.dto.StatusResponse; import cwms.cda.formatters.ContentType; import cwms.cda.formatters.Formats; import cwms.cda.formatters.annotations.FormattableWith; @@ -148,8 +147,7 @@ public void create(@NotNull Context ctx) { boolean storeTemplate = ctx.queryParamAsClass(STORE_TEMPLATE, Boolean.class).getOrDefault(true); String ratingSet = deserializeRatingSet(ctx, storeTemplate); ratingDao.create(ratingSet, false); - StatusResponse re = new StatusResponse(RatingDao.extractOfficeFromXml(ratingSet), "Created RatingSet"); - ctx.status(HttpServletResponse.SC_OK).json(re); + ctx.status(HttpServletResponse.SC_OK).json("Created RatingSet"); } catch (IOException ex) { CdaError re = new CdaError("Failed to process request to update RatingSet"); logger.log(Level.SEVERE, re.toString(), ex); @@ -502,8 +500,7 @@ public void update(@NotNull Context ctx, @NotNull String ratingId) { .getOrDefault(false); String ratingSet = deserializeRatingSet(ctx, storeTemplate); ratingDao.store(ratingSet, replaceBaseCurve); - StatusResponse re = new StatusResponse(RatingDao.extractOfficeFromXml(ratingSet), "Updated RatingSet"); - ctx.status(HttpServletResponse.SC_OK).json(re); + ctx.status(HttpServletResponse.SC_OK).json("Updated RatingSet"); } catch (IOException ex) { CdaError re = new CdaError("Failed to process request to update RatingSet"); logger.log(Level.SEVERE, re.toString(), ex); diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/AccountingCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/AccountingCreateController.java index dd627be0b..ab69a636d 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/AccountingCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/AccountingCreateController.java @@ -29,7 +29,7 @@ import static cwms.cda.api.Controllers.CONTRACT_NAME; import static cwms.cda.api.Controllers.CREATE; import static cwms.cda.api.Controllers.OFFICE; -import static cwms.cda.api.Controllers.STATUS_200; +import static cwms.cda.api.Controllers.STATUS_204; import static cwms.cda.api.Controllers.STATUS_501; import static cwms.cda.api.Controllers.WATER_USER; import static cwms.cda.data.dao.JooqDao.getDslContext; @@ -40,7 +40,6 @@ import cwms.cda.data.dao.LookupTypeDao; import cwms.cda.data.dao.watersupply.WaterSupplyAccountingDao; import cwms.cda.data.dto.LookupType; -import cwms.cda.data.dto.StatusResponse; import cwms.cda.data.dto.watersupply.PumpTransfer; import cwms.cda.data.dto.watersupply.WaterSupplyAccounting; import cwms.cda.formatters.ContentType; @@ -94,7 +93,7 @@ protected WaterSupplyAccountingDao getWaterSupplyAccountingDao(DSLContext dsl) { + "accounting.", required = true), }, responses = { - @OpenApiResponse(status = STATUS_200, description = "The pump accounting entry was created."), + @OpenApiResponse(status = STATUS_204, description = "The pump accounting entry was created."), @OpenApiResponse(status = STATUS_501, description = "Requested format is not implemented") }, description = "Create a new pump accounting entry associated with a water supply contract.", @@ -133,8 +132,7 @@ public void handle(@NotNull Context ctx) { } waterSupplyAccountingDao.storeAccounting(accounting); - StatusResponse re = new StatusResponse(office, "The pump accounting entry was created.", contractId); - ctx.status(HttpServletResponse.SC_CREATED).json(re); + ctx.status(HttpServletResponse.SC_CREATED).json(contractId + " created successfully"); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamReachControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamReachControllerTestIT.java index a3d2723b1..72057e519 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamReachControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamReachControllerTestIT.java @@ -47,6 +47,8 @@ import java.util.List; import mil.army.usace.hec.test.database.CwmsDatabaseContainer; import org.apache.commons.io.IOUtils; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; @@ -59,7 +61,6 @@ import static cwms.cda.security.ApiKeyIdentityProvider.AUTH_HEADER; import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertNotNull; @Tag("integration") @@ -68,9 +69,6 @@ final class StreamReachControllerTestIT extends DataApiTestIT { private static final String OFFICE_ID = TestAccounts.KeyUser.SPK_NORMAL.getOperatingOffice(); private static final List STREAMS_CREATED = new ArrayList<>(); private static final List STREAM_LOCATIONS_CREATED = new ArrayList<>(); - private static final String OFFICE_ID_TEXT = "office-id"; - private static final String MESSAGE = "message"; - private static final String IDENTIFIER = "identifier"; @BeforeAll public static void setup() throws SQLException { @@ -198,10 +196,7 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)) - .body(OFFICE_ID, equalTo(streamReach.getStreamId().getOfficeId())) - .body(MESSAGE, equalTo("Stream Reach successfully stored to CWMS.")) - .body(IDENTIFIER, equalTo(streamReach.getStreamId().getName())); + .statusCode(is(HttpServletResponse.SC_CREATED)); String streamReachId = streamReach.getId().getName(); @@ -256,10 +251,7 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)) - .body(OFFICE_ID, equalTo(streamReach.getStreamId().getOfficeId())) - .body(MESSAGE, equalTo("Stream Reach successfully deleted from CWMS.")) - .body(IDENTIFIER, equalTo(streamReach.getStreamId().getName())); + .statusCode(is(HttpServletResponse.SC_OK)); // Retrieve the StreamReach and assert that it does not exist given() @@ -343,10 +335,7 @@ void test_get_all() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)) - .body(OFFICE_ID, equalTo(streamReach.getStreamId().getOfficeId())) - .body(MESSAGE, equalTo("Stream Reach successfully stored to CWMS.")) - .body(IDENTIFIER, equalTo(streamReach.getStreamId().getName())); + .statusCode(is(HttpServletResponse.SC_CREATED)); String office = streamReach.getId().getOfficeId(); String streamReachId = streamReach.getId().getName(); @@ -402,10 +391,7 @@ void test_get_all() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)) - .body(OFFICE_ID, equalTo(streamReach.getStreamId().getOfficeId())) - .body(MESSAGE, equalTo("Stream Reach successfully deleted from CWMS.")) - .body(IDENTIFIER, equalTo(streamReach.getStreamId().getName())); + .statusCode(is(HttpServletResponse.SC_OK)); //verify deletion given() diff --git a/cwms-data-api/src/test/java/cwms/cda/api/TurbineChangesControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/TurbineChangesControllerIT.java index 4e5a0f1e1..844d5fd7b 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/TurbineChangesControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/TurbineChangesControllerIT.java @@ -30,7 +30,6 @@ import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.isEmptyString; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; @@ -76,9 +75,6 @@ final class TurbineChangesControllerIT extends DataApiTestIT { private static final Location TURBINE_LOC; private static final Turbine TURBINE; private static final List TURBINE_CHANGES; - private static final String OFFICE_ID = "office-id"; - private static final String MESSAGE = "message"; - private static final String IDENTIFIER = "identifier"; static { Class c = TurbineChangesControllerIT.class; @@ -160,9 +156,6 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body(OFFICE_ID, equalTo(PROJECT_LOC.getOfficeId())) - .body(MESSAGE, equalTo("Created Turbine Changes")) - .body(IDENTIFIER, isEmptyString()) ; String office = TURBINE.getLocation().getOfficeId(); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterSupplyAccountingControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterSupplyAccountingControllerIT.java index 25d8441e8..9598c3595 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterSupplyAccountingControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterSupplyAccountingControllerIT.java @@ -88,9 +88,6 @@ class WaterSupplyAccountingControllerIT extends DataApiTestIT { private static Location pump1; private static Location pump2; private static Location pump3; - private static final String OFFICE_ID_TEXT = "office-id"; - private static final String MESSAGE = "message"; - private static final String IDENTIFIER = "identifier"; static { try (InputStream accountStream = WaterSupplyAccounting.class @@ -295,9 +292,6 @@ void testCreateRetrieveWaterAccounting() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) - .body(MESSAGE, equalTo("The pump accounting entry was created.")) - .body(IDENTIFIER, equalTo(contract.getContractId().getName())) ; // retrieve pump accounting @@ -360,9 +354,6 @@ void testRetrieveNotFoundOutsideTimeWindow() throws Exception { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) - .body(MESSAGE, equalTo("The pump accounting entry was created.")) - .body(IDENTIFIER, equalTo(contract.getContractId().getName())) ; // retrieve pump accounting diff --git a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/VirtualOutletControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/VirtualOutletControllerTestIT.java index b74f1c144..f36dda113 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/VirtualOutletControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/VirtualOutletControllerTestIT.java @@ -51,9 +51,6 @@ @Tag("integration") class VirtualOutletControllerTestIT extends ProjectStructureIT { - private static final String OFFICE_ID_TEXT = "office-id"; - private static final String MESSAGE = "message"; - private static final String IDENTIFIER = "identifier"; private static final String OUTLET_KIND = "OUTLET"; private static final CwmsId VIRTUAL_OUTLET_RATING_GROUP = new CwmsId.Builder().withName("Rating-" + PROJECT_LOC2.getName() + "-VirtualOutlet") .withOfficeId(OFFICE_ID) @@ -215,10 +212,7 @@ void test_crud() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)) - .body(OFFICE_ID_TEXT, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getOfficeId())) - .body(MESSAGE, equalTo("Virtual Outlet successfully stored to CWMS.")) - .body(IDENTIFIER, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getName())); + .statusCode(is(HttpServletResponse.SC_CREATED)); //Read the virtual outlet @@ -260,10 +254,7 @@ void test_crud() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_CREATED)) - .body(OFFICE_ID_TEXT, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getOfficeId())) - .body(MESSAGE, equalTo("Virtual Outlet successfully stored to CWMS.")) - .body(IDENTIFIER, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getName())); + .statusCode(is(HttpServletResponse.SC_CREATED)); //Delete the virtual outlet given() diff --git a/cwms-data-api/src/test/java/cwms/cda/api/rating/RatingsControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/rating/RatingsControllerIT.java index b2032f725..5c99202e9 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/rating/RatingsControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/rating/RatingsControllerIT.java @@ -54,10 +54,8 @@ import mil.army.usace.hec.cwms.rating.io.xml.RatingContainerXmlFactory; import mil.army.usace.hec.cwms.rating.io.xml.RatingSetContainerXmlFactory; import mil.army.usace.hec.cwms.rating.io.xml.RatingSpecXmlFactory; - +import static org.hamcrest.Matchers.is; import org.junit.jupiter.api.AfterEach; - -import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -66,9 +64,7 @@ @Tag("integration") class RatingsControllerIT extends DataApiTestIT{ - private static final String OFFICE_ID = "office-id"; - private static final String MESSAGE = "message"; - private static final String IDENTIFIER = "identifier"; + @AfterEach void tearDown() { @@ -142,10 +138,7 @@ static void storeOneSet(String file, String locationString, boolean storeTemplat .then() .assertThat() .log().ifValidationFails(LogDetail.ALL,true) - .statusCode(is(HttpServletResponse.SC_OK)) - .body(OFFICE_ID, equalTo(SPK)) - .body(MESSAGE, equalTo("Created RatingSet")) - .body(IDENTIFIER, isEmptyString()); + .statusCode(is(HttpServletResponse.SC_OK)); } static void updateOneSet(String file, boolean replaceBaseCurve) throws Exception { @@ -211,10 +204,7 @@ static void updateOneSet(String file, boolean replaceBaseCurve) throws Exception .then() .assertThat() .log().ifValidationFails(LogDetail.ALL,true) - .statusCode(is(HttpServletResponse.SC_OK)) - .body(OFFICE_ID, equalTo(SPK)) - .body(MESSAGE, equalTo("Updated RatingSet")) - .body(IDENTIFIER, isEmptyString()); + .statusCode(is(HttpServletResponse.SC_OK)); } From d4ff05da04af35bcf45f6357eb73374dee36db22 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Tue, 8 Jul 2025 10:47:05 -0700 Subject: [PATCH 33/37] Change Status codes from 204 -> 200, (NO_CONTENT to OK), to allow for delete response bodies --- .../java/cwms/cda/api/BasinController.java | 2 +- .../cwms/cda/api/EmbankmentController.java | 4 +-- .../cwms/cda/api/LookupTypeController.java | 4 +-- .../cwms/cda/api/MeasurementController.java | 8 +++--- .../java/cwms/cda/api/PropertyController.java | 4 +-- .../java/cwms/cda/api/StreamController.java | 4 +-- .../cda/api/StreamLocationController.java | 4 +-- .../java/cwms/cda/api/TurbineController.java | 4 +-- .../cda/api/location/kind/LockController.java | 4 +-- .../api/location/kind/OutletController.java | 4 +-- .../WaterContractDeleteController.java | 2 +- .../WaterUserDeleteController.java | 2 +- .../java/cwms/cda/api/BasinControllerIT.java | 10 ++++++-- .../cwms/cda/api/EmbankmentControllerIT.java | 10 ++++++-- .../java/cwms/cda/api/LockControllerIT.java | 25 +++++++++++++++---- .../cwms/cda/api/LookupTypeControllerIT.java | 11 +++++--- .../cda/api/MeasurementControllerTestIT.java | 10 ++++++-- .../cwms/cda/api/PropertyControllerIT.java | 10 ++++++-- .../cwms/cda/api/StreamControllerTestIT.java | 10 ++++++-- .../api/StreamLocationControllerTestIT.java | 10 ++++++-- .../cwms/cda/api/TurbineControllerIT.java | 10 ++++++-- .../api/WaterContractControllerTestIT.java | 20 ++++++++++++--- .../cda/api/WaterUserControllerTestIT.java | 20 ++++++++++++--- .../location/kind/OutletControllerTestIT.java | 17 ++++++++++--- 24 files changed, 152 insertions(+), 57 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/BasinController.java b/cwms-data-api/src/main/java/cwms/cda/api/BasinController.java index 0b4e1090b..39eb6e28e 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/BasinController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/BasinController.java @@ -308,6 +308,6 @@ public void delete(@NotNull Context ctx, @NotNull String name) { .build(); basinDao.deleteBasin(basinId, deleteMethod.getRule()); StatusResponse re = new StatusResponse(basinId.getOfficeId(), "Deleted CWMS Basin", basinId.getName()); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java b/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java index d0ca6e56c..d85af6ca2 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java @@ -222,7 +222,7 @@ public void update(@NotNull Context ctx, @NotNull String name) { method = HttpMethod.DELETE, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Embankment successfully deleted from CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Embankment successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Based on the combination of " + "inputs provided the embankment was not found.") } @@ -237,7 +237,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { EmbankmentDao dao = new EmbankmentDao(dsl); dao.deleteEmbankment(name, office, deleteMethod.getRule()); StatusResponse re = new StatusResponse(office, "Embankment successfully deleted from CWMS", name); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java b/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java index 07c928de3..099ed7309 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java @@ -189,7 +189,7 @@ public void update(Context ctx, String name) { method = HttpMethod.DELETE, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Lookup Type successfully deleted from CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Lookup Type successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Based on the combination of inputs provided the lookup type was not found.") } ) @@ -203,7 +203,7 @@ public void delete(Context ctx, @NotNull String displayValue) { LookupTypeDao dao = new LookupTypeDao(dsl); dao.deleteLookupType(category, prefix, officeId, displayValue); StatusResponse re = new StatusResponse(officeId, "Lookup Type successfully deleted from CWMS.", displayValue); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java b/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java index 6ba4d7624..1288dcc28 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/MeasurementController.java @@ -49,6 +49,8 @@ import static cwms.cda.api.Controllers.OFFICE; import static cwms.cda.api.Controllers.OFFICE_MASK; import static cwms.cda.api.Controllers.QUALITY; +import static cwms.cda.api.Controllers.STATUS_200; +import static cwms.cda.api.Controllers.STATUS_404; import static cwms.cda.api.Controllers.TIMEZONE; import static cwms.cda.api.Controllers.UNIT_SYSTEM; import static cwms.cda.api.Controllers.queryParamAsDouble; @@ -242,8 +244,8 @@ public void update(@NotNull Context ctx, @NotNull String locationId) { method = HttpMethod.DELETE, tags = {TAG}, responses = { - @OpenApiResponse(status = "204", description = "Measurement successfully deleted."), - @OpenApiResponse(status = "404", description = "Measurement not found.") + @OpenApiResponse(status = STATUS_200, description = "Measurement successfully deleted."), + @OpenApiResponse(status = STATUS_404, description = "Measurement not found.") } ) @Override @@ -258,7 +260,7 @@ public void delete(@NotNull Context ctx, @NotNull String locationId) { MeasurementDao dao = new MeasurementDao(dsl); dao.deleteMeasurements(officeId, locationId, minDate, maxDate,minNum, maxNum); StatusResponse re = new StatusResponse(officeId, "Measurement successfully deleted for specified location-id.", locationId); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json( re); + ctx.status(HttpServletResponse.SC_OK).json( re); } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java b/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java index b4ef5166c..7a2459a1e 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/PropertyController.java @@ -227,7 +227,7 @@ public void update(Context ctx, String name) { method = HttpMethod.DELETE, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Property successfully deleted from CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Property successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Based on the combination of " + "inputs provided the property was not found.") } @@ -241,7 +241,7 @@ public void delete(Context ctx, String name) { PropertyDao dao = new PropertyDao(dsl); dao.deleteProperty(office, category, name); StatusResponse re = new StatusResponse(office, "Property successfully deleted from CWMS.", name); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamController.java index 34a69f9dc..62bb650f7 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamController.java @@ -251,7 +251,7 @@ public void update(@NotNull Context ctx, @NotNull String streamId) { method = HttpMethod.DELETE, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Stream successfully deleted from CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Stream successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Based on the combination of " + "inputs provided the stream was not found.") } @@ -281,7 +281,7 @@ public void delete(@NotNull Context ctx, @NotNull String streamId) { } dao.deleteStream(office, streamId, deleteRule); StatusResponse re = new StatusResponse(office, "Stream successfully deleted from CWMS.", streamId); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java index cc83262bf..0738675d2 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java @@ -256,7 +256,7 @@ public void update(Context ctx, @NotNull String locationId) { method = HttpMethod.DELETE, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Stream Location successfully deleted from CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Stream Location successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Stream Location not found.") } ) @@ -270,7 +270,7 @@ public void delete(@NotNull Context ctx, @NotNull String locationId) { dao.deleteStreamLocation(officeId, streamId, locationId); StatusResponse re = new StatusResponse(officeId, "Stream Location successfully deleted from CWMS.", streamId); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java b/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java index f3cfde966..5be3f682e 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/TurbineController.java @@ -223,7 +223,7 @@ public void update(@NotNull Context ctx, @NotNull String name) { method = HttpMethod.DELETE, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Turbine successfully deleted from CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Turbine successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Based on the combination of " + "inputs provided the turbine was not found.") } @@ -238,7 +238,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { TurbineDao dao = new TurbineDao(dsl); dao.deleteTurbine(name, office, deleteMethod.getRule()); StatusResponse re = new StatusResponse(office, "Turbine successfully deleted from CWMS", name); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/LockController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/LockController.java index bdfcd7642..1acb7e586 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/LockController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/LockController.java @@ -254,7 +254,7 @@ public void update(@NotNull Context ctx, @NotNull String name) { method = HttpMethod.DELETE, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Lock successfully deleted from CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Lock successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Based on the combination of " + "inputs provided the lock was not found.") } @@ -269,7 +269,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { LockDao dao = new LockDao(dsl); dao.deleteLock(CwmsId.buildCwmsId(office, name), deleteMethod.getRule()); StatusResponse re = new StatusResponse(office, "Lock successfully deleted from CWMS.", name); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } \ No newline at end of file diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java index 89dd592aa..ed1d3173c 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java @@ -203,7 +203,7 @@ public void update(@NotNull Context ctx, @NotNull String name) { method = HttpMethod.DELETE, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Outlet successfully deleted from CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Outlet successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Based on the combination of " + "inputs provided the outlet was not found.") } @@ -218,7 +218,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { OutletDao dao = new OutletDao(dsl); dao.deleteOutlet(office, name, deleteMethod.getRule()); StatusResponse re = new StatusResponse(office, "Outlet successfully deleted from CWMS.", name); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractDeleteController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractDeleteController.java index e5cfde780..409a39aa0 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractDeleteController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractDeleteController.java @@ -92,7 +92,7 @@ public void handle(@NotNull Context ctx) { contractDao.deleteWaterContract(contract, deleteMethod); StatusResponse re = new StatusResponse(contract.getOfficeId(), "Water Contract Deleted Successfully", contractName); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserDeleteController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserDeleteController.java index 79293c3b9..2fece833e 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserDeleteController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserDeleteController.java @@ -87,7 +87,7 @@ public void handle(@NotNull Context ctx) { WaterContractDao contractDao = getContractDao(dsl); contractDao.deleteWaterUser(location, entityName, deleteMode); StatusResponse re = new StatusResponse(office, "Water user deleted successfully.", entityName); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java index c02371a4d..1a7ff82ed 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/BasinControllerIT.java @@ -293,7 +293,10 @@ void test_get_create_delete() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(BASIN.getBasinId().getOfficeId())) + .body(MESSAGE, equalTo("Deleted CWMS Basin")) + .body(IDENTIFIER, equalTo(BASIN.getBasinId().getName())) ; // Retrieve basin and assert that it does not exist @@ -520,7 +523,10 @@ void test_get_all() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(BASIN.getBasinId().getOfficeId())) + .body(MESSAGE, equalTo("Deleted CWMS Basin")) + .body(IDENTIFIER, equalTo(BASIN.getBasinId().getName())) ; } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java index 690b3f969..8d9734623 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/EmbankmentControllerIT.java @@ -192,7 +192,10 @@ void test_get_create_delete() { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(EMBANKMENT.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Embankment successfully deleted from CWMS")) + .body(IDENTIFIER, equalTo(EMBANKMENT.getLocation().getName())) ; // Retrieve a Embankment and assert that it does not exist @@ -318,7 +321,10 @@ void test_get_all() { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(EMBANKMENT.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Embankment successfully deleted from CWMS")) + .body(IDENTIFIER, equalTo(EMBANKMENT.getLocation().getName())) ; } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java index c473e9f83..c3bf1f487 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LockControllerIT.java @@ -347,7 +347,10 @@ void test_get_create_delete_EN() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(LOCK.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(LOCK.getLocation().getName())) ; // Retrieve a Lock and assert that it does not exist @@ -498,7 +501,10 @@ void test_get_create_delete_SI() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(LOCK.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(LOCK.getLocation().getName())) ; // Retrieve a Lock and assert that it does not exist @@ -805,7 +811,10 @@ void storeRetrieveSameLockNameDifferentProject() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(LOCK.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(LOCK.getLocation().getName())) ; // Retrieve a Lock and assert that it does not exist @@ -836,7 +845,10 @@ void storeRetrieveSameLockNameDifferentProject() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(LOCK.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(LOCK.getLocation().getName())) ; // Retrieve a Lock and assert that it does not exist @@ -1000,7 +1012,10 @@ void test_get_all() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(LOCK.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Lock successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(LOCK.getLocation().getName())) ; } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java index 0263d247e..3aee70d77 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LookupTypeControllerIT.java @@ -84,9 +84,9 @@ void test_get_create_delete() throws IOException { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_CREATED)) - .body(OFFICE_ID, equalTo(lookupType.getOfficeId())) - .body(MESSAGE, equalTo("Lookup Type successfully stored to CWMS.")) - .body(IDENTIFIER, equalTo(lookupType.getDisplayValue())) + .body(OFFICE_ID, equalTo(lookupType.getOfficeId())) + .body(MESSAGE, equalTo("Lookup Type successfully stored to CWMS.")) + .body(IDENTIFIER, equalTo(lookupType.getDisplayValue())) ; String office = user.getOperatingOffice(); // Retrieve the lookup type and assert that it exists @@ -125,7 +125,10 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(lookupType.getOfficeId())) + .body(MESSAGE, equalTo("Lookup Type successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(lookupType.getDisplayValue())) ; // Retrieve the lookup type and assert that it does not exist diff --git a/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java index decdc2fc8..c695c2452 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/MeasurementControllerTestIT.java @@ -241,7 +241,10 @@ void test_create_retrieve_delete_measurement() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(measurement.getOfficeId())) + .body(MESSAGE, equalTo("Measurement successfully deleted for specified location-id.")) + .body(IDENTIFIER, equalTo(measurement.getLocationId())); // Retrieve the Measurement and assert that it does not exist given() @@ -420,7 +423,10 @@ void test_create_retrieve_delete_measurement_multiple() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(measurement1.getOfficeId())) + .body(MESSAGE, equalTo("Measurement successfully deleted for specified location-id.")) + .body(IDENTIFIER, equalTo(measurement1.getLocationId())); // Retrieve the Measurements and assert that they do not exist given() diff --git a/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java index 4b62b23d6..5f06c8e9c 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java @@ -123,7 +123,10 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(property.getOfficeId())) + .body(MESSAGE, equalTo("Property successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(property.getName())) ; // Retrieve a Property and assert that it does not exist @@ -264,7 +267,10 @@ void test_get_all() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(property.getOfficeId())) + .body(MESSAGE, equalTo("Property successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(property.getName())) ; } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java index 4b2d949a7..1ffe5d803 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamControllerTestIT.java @@ -200,7 +200,10 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(stream.getOfficeId())) + .body(MESSAGE, equalTo("Stream successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(streamId)); // Retrieve the Stream and assert that it does not exist given() @@ -335,7 +338,10 @@ void test_get_all() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(stream.getOfficeId())) + .body(MESSAGE, equalTo("Stream successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(streamId)); } } \ No newline at end of file diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java index 54263ef9d..9dfdd4112 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java @@ -204,7 +204,10 @@ void test_get_create_delete() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) + .body(MESSAGE, equalTo("Stream Location successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(streamLocation.getStreamId().getName())); // Retrieve the StreamLocation and assert that it does not exist given() @@ -345,6 +348,9 @@ void test_get_all() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) + .body(MESSAGE, equalTo("Stream Location successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(streamLocation.getStreamId().getName())); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java index d8dbad3a9..773a283b3 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/TurbineControllerIT.java @@ -161,7 +161,10 @@ void test_get_create_delete() { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Turbine successfully deleted from CWMS")) + .body(IDENTIFIER, equalTo(TURBINE.getLocation().getName())) ; // Retrieve a Turbine and assert that it does not exist @@ -280,7 +283,10 @@ void test_get_all() { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(OFFICE)) + .body(MESSAGE, equalTo("Turbine successfully deleted from CWMS")) + .body(IDENTIFIER, equalTo(TURBINE.getLocation().getName())) ; } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java index 9147e64b4..8fc875e29 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java @@ -387,7 +387,10 @@ void test_create_get_delete_WaterUserContract() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Water Contract Deleted Successfully")) + .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) ; // get contract, assert that it doesn't exist @@ -493,7 +496,10 @@ void test_rename_WaterUserContract() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Water Contract Deleted Successfully")) + .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) ; } @@ -595,7 +601,10 @@ void test_getAllWaterContracts() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Water Contract Deleted Successfully")) + .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) ; // delete contract @@ -613,7 +622,10 @@ void test_getAllWaterContracts() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Water Contract Deleted Successfully")) + .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) ; } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java index bd52578ab..22ce87863 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java @@ -206,7 +206,10 @@ void test_create_get_delete_WaterUser() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(WATER_USER.getProjectId().getOfficeId())) + .body(MESSAGE, equalTo("Water user deleted successfully.")) + .body(IDENTIFIER, equalTo(WATER_USER.getEntityName())) ; // get water user and assert that it does not exist @@ -334,7 +337,10 @@ void test_rename_WaterUser() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(WATER_USER.getProjectId().getOfficeId())) + .body(MESSAGE, equalTo("Water user deleted successfully.")) + .body(IDENTIFIER, equalTo(WATER_USER.getEntityName())) ; } @@ -427,7 +433,10 @@ void test_getAllWaterUsers() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(WATER_USER.getProjectId().getOfficeId())) + .body(MESSAGE, equalTo("Water user deleted successfully.")) + .body(IDENTIFIER, equalTo(waterUser.getEntityName())) ; // delete WaterUser @@ -446,7 +455,10 @@ void test_getAllWaterUsers() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(WATER_USER.getProjectId().getOfficeId())) + .body(MESSAGE, equalTo("Water user deleted successfully.")) + .body(IDENTIFIER, equalTo(waterUser.getEntityName())) ; } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java index 1220aa6c9..3c4639bcb 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/OutletControllerTestIT.java @@ -353,7 +353,10 @@ void test_rating_spec_id_uncontrolled() { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(RATED_OUTLET_LOCATION_UNCONTROLLED.getOfficeId())) + .body(MESSAGE, equalTo("Outlet successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(RATED_OUTLET_LOCATION_UNCONTROLLED.getName())); // Delete the LocationGroup given() @@ -505,7 +508,10 @@ void test_rating_spec_id_controlled() { .then() .log().ifValidationFails(LogDetail.ALL,true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(RATED_OUTLET_LOCATION_CONTROLLED.getOfficeId())) + .body(MESSAGE, equalTo("Outlet successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(RATED_OUTLET_LOCATION_CONTROLLED.getName())); // Delete the LocationGroup given() @@ -658,8 +664,11 @@ void test_outlet_crud() throws Exception { .delete("projects/outlets/" + NEW_CONDUIT_GATE_1_OUTLET.getLocation().getName()) .then() .log().ifValidationFails(LogDetail.ALL,true) - .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .assertThat() + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getOfficeId())) + .body(MESSAGE, equalTo("Outlet successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(NEW_CONDUIT_GATE_1_OUTLET.getLocation().getName())); CwmsDatabaseContainer databaseLink = CwmsDataApiSetupCallback.getDatabaseLink(); databaseLink.connection(c -> { From a4606e0730f4de6766a0bedb8d0f0105ad735ec6 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Tue, 8 Jul 2025 11:26:58 -0700 Subject: [PATCH 34/37] Fix a couple bugs and formatting/import issues --- .../java/cwms/cda/api/EmbankmentController.java | 3 +-- .../java/cwms/cda/api/LocationController.java | 7 +++---- .../java/cwms/cda/api/LookupTypeController.java | 2 +- .../cwms/cda/api/StreamLocationController.java | 10 ++++------ .../cda/api/location/kind/OutletController.java | 15 ++++++++++++++- .../WaterContractTypeCreateController.java | 1 - .../WaterContractTypeDeleteController.java | 2 +- .../WaterContractUpdateController.java | 1 + .../watersupply/WaterUserCreateController.java | 2 +- .../java/cwms/cda/api/LevelsControllerTestIT.java | 2 +- .../java/cwms/cda/api/PropertyControllerIT.java | 2 +- .../cda/api/WaterContractControllerTestIT.java | 2 +- .../api/WaterContractTypeControllerTestIT.java | 5 ++++- 13 files changed, 33 insertions(+), 21 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java b/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java index d85af6ca2..1db14e616 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/EmbankmentController.java @@ -169,8 +169,7 @@ public void create(Context ctx) { EmbankmentDao dao = new EmbankmentDao(dsl); dao.storeEmbankment(embankment, failIfExists); StatusResponse re = new StatusResponse(embankment.getLocation().getOfficeId(), - "Embankment successfully stored to CWMS", - embankment.getLocation().getName()); + "Embankment successfully stored to CWMS", embankment.getLocation().getName()); ctx.status(HttpServletResponse.SC_CREATED).json(re); } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java index 56bcbab03..0e46e6f58 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/LocationController.java @@ -354,13 +354,11 @@ public void update(@NotNull Context ctx, @NotNull String locationId) { //if name changed then delete location with old name locationsDao.renameLocation(locationId, updatedLocation); ctx.status(HttpServletResponse.SC_OK).json(new StatusResponse(updatedLocation.getOfficeId(), - "Updated and renamed Location", - updatedLocation.getName())); + "Updated and renamed Location", updatedLocation.getName())); } else { locationsDao.storeLocation(updatedLocation, false); ctx.status(HttpServletResponse.SC_OK).json(new StatusResponse(updatedLocation.getOfficeId(), - "Updated Location", - updatedLocation.getName())); + "Updated Location", updatedLocation.getName())); } } catch (NotFoundException e) { CdaError re = new CdaError("Not found."); @@ -392,6 +390,7 @@ public void update(@NotNull Context ctx, @NotNull String locationId) { path = "/locations", tags = {"Locations"}, responses = { + @OpenApiResponse(status = STATUS_200, description = "Location successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Based on the combination of " + "inputs provided the location was not found.") } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java b/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java index 099ed7309..9a3a69e69 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java @@ -159,7 +159,7 @@ public void create(Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Lookup Type successfully updated to CWMS.") + @OpenApiResponse(status = STATUS_200, description = "Lookup Type successfully updated to CWMS.") } ) @Override diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java index 0738675d2..37438691d 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java @@ -44,7 +44,7 @@ import static cwms.cda.api.Controllers.STAGE_UNIT; import static cwms.cda.api.Controllers.STATION_UNIT; import static cwms.cda.api.Controllers.STATUS_200; -import static cwms.cda.api.Controllers.STATUS_204; +import static cwms.cda.api.Controllers.STATUS_201; import static cwms.cda.api.Controllers.STATUS_404; import static cwms.cda.api.Controllers.STREAM_ID; import static cwms.cda.api.Controllers.STREAM_ID_MASK; @@ -192,7 +192,7 @@ public void getOne(@NotNull Context ctx, @NotNull String locationId) { method = HttpMethod.POST, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Stream Location successfully stored to CWMS.") + @OpenApiResponse(status = STATUS_201, description = "Stream Location successfully stored to CWMS.") } ) @Override @@ -206,8 +206,7 @@ public void create(Context ctx) { StreamLocationDao dao = new StreamLocationDao(dsl); dao.storeStreamLocation(streamLocation, failIfExists); StatusResponse re = new StatusResponse(streamLocation.getId().getOfficeId(), - "Stream Location successfully stored to CWMS.", - streamLocation.getId().getName()); + "Stream Location successfully stored to CWMS.", streamLocation.getId().getName()); ctx.status(HttpServletResponse.SC_CREATED).json(re); } } @@ -235,8 +234,7 @@ public void update(Context ctx, @NotNull String locationId) { StreamLocationDao dao = new StreamLocationDao(dsl); dao.updateStreamLocation(streamLocation); StatusResponse re = new StatusResponse(streamLocation.getId().getOfficeId(), - "Stream Location successfully updated to CWMS.", - streamLocation.getId().getName()); + "Stream Location successfully updated to CWMS.", streamLocation.getId().getName()); ctx.status(HttpServletResponse.SC_OK).json(re); } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java index ed1d3173c..6eb33239e 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/location/kind/OutletController.java @@ -20,7 +20,20 @@ package cwms.cda.api.location.kind; -import static cwms.cda.api.Controllers.*; +import static cwms.cda.api.Controllers.CREATE; +import static cwms.cda.api.Controllers.DELETE; +import static cwms.cda.api.Controllers.FAIL_IF_EXISTS; +import static cwms.cda.api.Controllers.GET_ALL; +import static cwms.cda.api.Controllers.GET_ONE; +import static cwms.cda.api.Controllers.METHOD; +import static cwms.cda.api.Controllers.NAME; +import static cwms.cda.api.Controllers.OFFICE; +import static cwms.cda.api.Controllers.PROJECT_ID; +import static cwms.cda.api.Controllers.STATUS_200; +import static cwms.cda.api.Controllers.STATUS_201; +import static cwms.cda.api.Controllers.STATUS_404; +import static cwms.cda.api.Controllers.queryParamAsClass; +import static cwms.cda.api.Controllers.requiredParam; import static cwms.cda.data.dao.JooqDao.getDslContext; import com.codahale.metrics.MetricRegistry; diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java index 3ab6f8ee5..1ad135dfa 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java @@ -46,7 +46,6 @@ import io.javalin.plugin.openapi.annotations.OpenApiRequestBody; import io.javalin.plugin.openapi.annotations.OpenApiResponse; import javax.servlet.http.HttpServletResponse; - import org.jetbrains.annotations.NotNull; import org.jooq.DSLContext; diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeDeleteController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeDeleteController.java index 11c2c082d..7a7849655 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeDeleteController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeDeleteController.java @@ -80,7 +80,7 @@ public void handle(@NotNull Context ctx) { WaterContractDao dao = new WaterContractDao(dsl); dao.deleteWaterContractType(office, displayValue); StatusResponse re = new StatusResponse(office, "Contract type successfully deleted from CWMS.", displayValue); - ctx.status(HttpServletResponse.SC_NO_CONTENT).json(re); + ctx.status(HttpServletResponse.SC_OK).json(re); } } } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractUpdateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractUpdateController.java index 4c2b987a3..ca6e6140d 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractUpdateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractUpdateController.java @@ -83,6 +83,7 @@ public WaterContractUpdateController(MetricRegistry metrics) { required = true) }, responses = { + @OpenApiResponse(status = "200", description = "Contract successfully renamed in CWMS."), @OpenApiResponse(status = "404", description = "The provided combination of " + "parameters did not find a contract"), @OpenApiResponse(status = "501", description = "Requested format is not implemented.") diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserCreateController.java index 9cbe834de..4516a7ada 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterUserCreateController.java @@ -66,7 +66,7 @@ public WaterUserCreateController(MetricRegistry metrics) { }, required = true), responses = { - @OpenApiResponse(status = STATUS_204, description = "Water user successfully stored to CWMS."), + @OpenApiResponse(status = STATUS_201, description = "Water user successfully stored to CWMS."), @OpenApiResponse(status = STATUS_501, description = "Requested format is not implemented") }, description = "Stores a water user to CWMS.", diff --git a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java index 718b4db51..00825b4a7 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/LevelsControllerTestIT.java @@ -1624,7 +1624,7 @@ void testStoreSeasonalLevel() throws Exception { .statusCode(is(HttpServletResponse.SC_CREATED)) .body(OFFICE_ID, equalTo(OFFICE)) .body(MESSAGE, equalTo("Created Location Level")) - .body(IDENTIFIER, equalTo("seasonalLoc6.Elev.Ave.1Day.tst")); + .body(IDENTIFIER, equalTo(levelId)); given() .log().ifValidationFails(LogDetail.ALL, true) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java index 5f06c8e9c..aa55ec232 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/PropertyControllerIT.java @@ -103,7 +103,7 @@ void test_get_create_delete() throws IOException { .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) .body("category", equalTo(property.getCategory())) - .body(OFFICE_ID, equalTo(office)) + .body("office-id", equalTo(office)) .body("comment", equalTo(property.getComment())) .body("value", equalTo(property.getValue())) .body("name", equalTo(property.getName())) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java index 8fc875e29..edb015c70 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java @@ -202,7 +202,7 @@ void test_create_get_delete_WaterUserContract() { .log().ifValidationFails(LogDetail.ALL, true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) - .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body("office-id", equalTo(CONTRACT.getOfficeId())) .body("water-user.entity-name", equalTo(CONTRACT.getWaterUser().getEntityName())) .body("water-user.project-id.office-id", equalTo(CONTRACT.getWaterUser() .getProjectId().getOfficeId())) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java index 700ac429c..998cff8c6 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractTypeControllerTestIT.java @@ -187,7 +187,10 @@ void test_store_delete_WaterContractType() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(CONTRACT_TYPE.getOfficeId())) + .body(MESSAGE, equalTo("Contract type successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(CONTRACT_TYPE.getDisplayValue())) ; // get water contract type and assert that it does not exist From 7b0514394562184c20ded04852ae834a5a51a7d2 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Tue, 8 Jul 2025 11:34:37 -0700 Subject: [PATCH 35/37] Fix status code mismatch --- .../cda/api/watersupply/WaterContractTypeCreateController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java index 1ad135dfa..3e8bc44df 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/watersupply/WaterContractTypeCreateController.java @@ -67,7 +67,7 @@ public WaterContractTypeCreateController(MetricRegistry metrics) { + "display value already exists. Default: true") }, responses = { - @OpenApiResponse(status = "204", description = "Contract type successfully stored to CWMS."), + @OpenApiResponse(status = "201", description = "Contract type successfully stored to CWMS."), @OpenApiResponse(status = "501", description = "Requested format is not implemented.") }, description = "Create a new water contract type", From f91a399594ca80a1269c0fca473f7b75fce1e426 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Wed, 9 Jul 2025 09:57:35 -0700 Subject: [PATCH 36/37] Fix format issues and update response messages --- .../cwms/cda/api/LookupTypeController.java | 4 +-- .../cda/api/StreamLocationController.java | 4 +-- .../api/StreamLocationControllerTestIT.java | 20 +++++------ .../api/WaterContractControllerTestIT.java | 34 +++++++++---------- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java b/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java index 9a3a69e69..139039862 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/LookupTypeController.java @@ -159,7 +159,7 @@ public void create(Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_200, description = "Lookup Type successfully updated to CWMS.") + @OpenApiResponse(status = STATUS_200, description = "Updated Lookup Type") } ) @Override @@ -173,7 +173,7 @@ public void update(Context ctx, String name) { DSLContext dsl = getDslContext(ctx); LookupTypeDao dao = new LookupTypeDao(dsl); dao.updateLookupType(category, prefix, lookupType); - StatusResponse re = new StatusResponse(lookupType.getOfficeId(), "Lookup Type successfully updated to CWMS.", + StatusResponse re = new StatusResponse(lookupType.getOfficeId(), "Updated Lookup Type", lookupType.getDisplayValue()); ctx.status(HttpServletResponse.SC_OK).json(re); } diff --git a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java index 37438691d..3e3f4813c 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/StreamLocationController.java @@ -221,7 +221,7 @@ public void create(Context ctx) { method = HttpMethod.PATCH, tags = {TAG}, responses = { - @OpenApiResponse(status = STATUS_200, description = "Stream Location successfully updated to CWMS.") + @OpenApiResponse(status = STATUS_200, description = "Updated Stream Location") } ) @Override @@ -234,7 +234,7 @@ public void update(Context ctx, @NotNull String locationId) { StreamLocationDao dao = new StreamLocationDao(dsl); dao.updateStreamLocation(streamLocation); StatusResponse re = new StatusResponse(streamLocation.getId().getOfficeId(), - "Stream Location successfully updated to CWMS.", streamLocation.getId().getName()); + "Updated Stream Location", streamLocation.getId().getName()); ctx.status(HttpServletResponse.SC_OK).json(re); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java index 9dfdd4112..9e7aff383 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/StreamLocationControllerTestIT.java @@ -192,19 +192,19 @@ void test_get_create_delete() throws IOException { // Delete the StreamLocation given() - .log().ifValidationFails(LogDetail.ALL, true) - .accept(Formats.JSON) - .header(AUTH_HEADER, user.toHeaderValue()) - .queryParam(OFFICE, OFFICE_ID) - .queryParam(STREAM_ID, streamLocation.getStreamId().getName()) + .log().ifValidationFails(LogDetail.ALL, true) + .accept(Formats.JSON) + .header(AUTH_HEADER, user.toHeaderValue()) + .queryParam(OFFICE, OFFICE_ID) + .queryParam(STREAM_ID, streamLocation.getStreamId().getName()) .when() - .redirects().follow(true) - .redirects().max(3) - .delete("/stream-locations/" + streamLocationId) + .redirects().follow(true) + .redirects().max(3) + .delete("/stream-locations/" + streamLocationId) .then() - .log().ifValidationFails(LogDetail.ALL, true) + .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)) + .statusCode(is(HttpServletResponse.SC_OK)) .body(OFFICE_ID_TEXT, equalTo(OFFICE_ID)) .body(MESSAGE, equalTo("Stream Location successfully deleted from CWMS.")) .body(IDENTIFIER, equalTo(streamLocation.getStreamId().getName())); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java index edb015c70..840e527b9 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterContractControllerTestIT.java @@ -609,23 +609,23 @@ void test_getAllWaterContracts() throws Exception { // delete contract given() - .log().ifValidationFails(LogDetail.ALL, true) - .queryParam(METHOD, "DELETE ALL") - .header(AUTH_HEADER, user.toHeaderValue()) - .when() - .redirects().follow(true) - .redirects().max(3) - .delete("/projects/" + OFFICE_ID + "/" - + CONTRACT.getWaterUser().getProjectId().getName() + "/water-user/" - + CONTRACT.getWaterUser().getEntityName() + "/contracts/" - + "NEW CONTRACT") - .then() - .log().ifValidationFails(LogDetail.ALL, true) - .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)) - .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) - .body(MESSAGE, equalTo("Water Contract Deleted Successfully")) - .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) + .log().ifValidationFails(LogDetail.ALL, true) + .queryParam(METHOD, "DELETE ALL") + .header(AUTH_HEADER, user.toHeaderValue()) + .when() + .redirects().follow(true) + .redirects().max(3) + .delete("/projects/" + OFFICE_ID + "/" + + CONTRACT.getWaterUser().getProjectId().getName() + "/water-user/" + + CONTRACT.getWaterUser().getEntityName() + "/contracts/" + + "NEW CONTRACT") + .then() + .log().ifValidationFails(LogDetail.ALL, true) + .assertThat() + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(CONTRACT.getOfficeId())) + .body(MESSAGE, equalTo("Water Contract Deleted Successfully")) + .body(IDENTIFIER, equalTo(CONTRACT.getWaterUser().getEntityName())) ; } From 2c905ba8e89587a73907f9946537c4802685941e Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Fri, 11 Jul 2025 13:19:09 -0700 Subject: [PATCH 37/37] Fix broken Integration Tests to update to new Status codes --- .../java/cwms/cda/api/DownstreamLocationsGetControllerIT.java | 4 ++-- .../java/cwms/cda/api/UpstreamLocationsGetControllerIT.java | 4 ++-- .../cwms/cda/api/WaterPumpDisassociateControllerTestIT.java | 4 ++-- .../src/test/java/cwms/cda/api/WaterUserControllerTestIT.java | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cwms-data-api/src/test/java/cwms/cda/api/DownstreamLocationsGetControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/DownstreamLocationsGetControllerIT.java index 0d5651939..5f6519d3a 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/DownstreamLocationsGetControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/DownstreamLocationsGetControllerIT.java @@ -261,7 +261,7 @@ void test_getDownstreamLocations() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)); // Delete the StreamLocation2 given() @@ -278,7 +278,7 @@ void test_getDownstreamLocations() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)); } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/UpstreamLocationsGetControllerIT.java b/cwms-data-api/src/test/java/cwms/cda/api/UpstreamLocationsGetControllerIT.java index 6c2fd9bc2..4ae608681 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/UpstreamLocationsGetControllerIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/UpstreamLocationsGetControllerIT.java @@ -264,7 +264,7 @@ void test_getUpstreamLocations() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)); // Delete the StreamLocation2 given() @@ -281,6 +281,6 @@ void test_getUpstreamLocations() throws IOException { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)); } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterPumpDisassociateControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterPumpDisassociateControllerTestIT.java index 4b8a9faca..85f9b7724 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterPumpDisassociateControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterPumpDisassociateControllerTestIT.java @@ -382,7 +382,7 @@ void test_remove_from_contract() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) ; } @@ -447,7 +447,7 @@ void test_remove_does_not_exist() throws Exception { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)) + .statusCode(is(HttpServletResponse.SC_OK)) ; } } diff --git a/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java index 22ce87863..44b71ef6d 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/WaterUserControllerTestIT.java @@ -436,7 +436,7 @@ void test_getAllWaterUsers() throws Exception { .statusCode(is(HttpServletResponse.SC_OK)) .body(OFFICE_ID_TEXT, equalTo(WATER_USER.getProjectId().getOfficeId())) .body(MESSAGE, equalTo("Water user deleted successfully.")) - .body(IDENTIFIER, equalTo(waterUser.getEntityName())) + .body(IDENTIFIER, equalTo(WATER_USER.getEntityName())) ; // delete WaterUser