From c9907f735550f4fb983d8e599139343b11aa36a9 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 7 Jul 2025 15:52:05 -0700 Subject: [PATCH 1/3] 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 689395531f..3bfbabfd75 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 b30dac81ae..1f2000907f 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 fd25b91212..dda5a6dd06 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 25cdbcdf55..842f936cee 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 18916fd300..b6d3e85571 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 92c568b1f8..85dc9c0ab0 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 ab69a636d2..dd627be0b1 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 72057e5199..a3d2723b1e 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 844d5fd7b9..4e5a0f1e1f 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 9598c3595d..25d8441e84 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 f36dda113e..b74f1c1449 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 5c99202e91..b2032f725b 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 d75228b33eb6f0fadc44aa279d37ed49d780ee8d Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Fri, 11 Jul 2025 14:18:46 -0700 Subject: [PATCH 2/3] Update delete status codes --- .../java/cwms/cda/api/TurbineChangesDeleteController.java | 4 ++-- .../cwms/cda/api/location/kind/VirtualOutletController.java | 4 ++-- .../test/java/cwms/cda/api/TurbineChangesControllerIT.java | 2 +- .../cda/api/location/kind/VirtualOutletControllerTestIT.java | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) 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 1f2000907f..6fd640da3b 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 @@ -106,7 +106,7 @@ private Timer.Context markAndTime(String subject) { method = HttpMethod.DELETE, tags = {TurbineController.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 project was not found.") } @@ -127,7 +127,7 @@ public void handle(@NotNull Context ctx) throws Exception { .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_OK).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 842f936cee..9ba08ed8ad 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 @@ -156,7 +156,7 @@ public void update(@NotNull Context ctx, @NotNull String s) { method = HttpMethod.DELETE, tags = {OutletController.TAG}, responses = { - @OpenApiResponse(status = STATUS_204, description = "Virtual Outlet successfully deleted from CWMS."), + @OpenApiResponse(status = STATUS_200, description = "Virtual Outlet successfully deleted from CWMS."), @OpenApiResponse(status = STATUS_404, description = "Based on the combination of " + "inputs provided the virtual outlet was not found.") } @@ -172,7 +172,7 @@ public void delete(@NotNull Context ctx, @NotNull String name) { 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_OK).json(re); } } } 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 4e5a0f1e1f..dd07d29558 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 @@ -205,7 +205,7 @@ void test_get_create_delete() { .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/location/kind/VirtualOutletControllerTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/location/kind/VirtualOutletControllerTestIT.java index b74f1c1449..2f2c8aa490 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 @@ -279,7 +279,7 @@ void test_crud() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_NO_CONTENT)); + .statusCode(is(HttpServletResponse.SC_OK)); //Confirm deletion of virtual outlet given() From d1724448615027bd8faf88a8a95e22aeee832549 Mon Sep 17 00:00:00 2001 From: Rohaan Sandhu Date: Mon, 14 Jul 2025 12:05:30 -0700 Subject: [PATCH 3/3] Add tests for delete responses --- .../test/java/cwms/cda/api/TurbineChangesControllerIT.java | 3 +++ .../cda/api/location/kind/VirtualOutletControllerTestIT.java | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) 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 dd07d29558..6979458074 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 @@ -206,6 +206,9 @@ void test_get_create_delete() { .log().ifValidationFails(LogDetail.ALL,true) .assertThat() .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID, equalTo(PROJECT_LOC.getOfficeId())) + .body(MESSAGE, equalTo("Turbine successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(PROJECT_LOC.getName())) ; 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 2f2c8aa490..96051231e7 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 @@ -279,7 +279,10 @@ void test_crud() { .then() .log().ifValidationFails(LogDetail.ALL, true) .assertThat() - .statusCode(is(HttpServletResponse.SC_OK)); + .statusCode(is(HttpServletResponse.SC_OK)) + .body(OFFICE_ID_TEXT, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getOfficeId())) + .body(MESSAGE, equalTo("Virtual Outlet successfully deleted from CWMS.")) + .body(IDENTIFIER, equalTo(MISSING_VIRTUAL_OUTLET.getVirtualOutletId().getName())); //Confirm deletion of virtual outlet given()