diff --git a/cwms-data-api/src/main/java/cwms/cda/api/auth/users/UsersController.java b/cwms-data-api/src/main/java/cwms/cda/api/auth/users/UsersController.java index 41e2d6525..cd022a45c 100644 --- a/cwms-data-api/src/main/java/cwms/cda/api/auth/users/UsersController.java +++ b/cwms-data-api/src/main/java/cwms/cda/api/auth/users/UsersController.java @@ -9,6 +9,7 @@ import static cwms.cda.api.Controllers.PAGE; import static cwms.cda.api.Controllers.PAGE_SIZE; import static cwms.cda.api.Controllers.STATUS_200; +import static cwms.cda.api.Controllers.STATUS_404; import static cwms.cda.api.Controllers.USERNAME_LIKE; import static cwms.cda.api.Controllers.queryParamAsClass; import static cwms.cda.data.dao.JooqDao.getDslContext; @@ -19,6 +20,7 @@ import cwms.cda.api.Controllers; import cwms.cda.api.errors.CdaError; import cwms.cda.api.errors.ExceptionTraceSupport; +import cwms.cda.api.errors.NotFoundException; import cwms.cda.data.dao.UserDao; import cwms.cda.data.dto.CwmsDTOPaginated; import cwms.cda.data.dto.auth.users.User; @@ -154,12 +156,15 @@ public void getAll(Context ctx) { @OpenApiParam(name = "user-name", required = true, description = "Specific user to retrieve") }, - responses = @OpenApiResponse( + responses = { + @OpenApiResponse( content = { @OpenApiContent(from = User.class, type = Formats.JSON) }, status = STATUS_200 - ), + ), + @OpenApiResponse(status = STATUS_404, description = "User not found.") + }, security = { @OpenApiSecurity(name = "gets overridden allows lock icon.") }, @@ -171,7 +176,8 @@ public void getOne(Context ctx, String userName) { try (final Timer.Context ignored = markAndTime(GET_ONE)) { DSLContext dsl = getDslContext(ctx); UserDao dao = new UserDao(dsl); - User user = dao.getByUniqueName(userName, null).orElse(null); + User user = dao.getByUniqueName(userName, null) + .orElseThrow(() -> new NotFoundException("User not found: " + userName)); String formatHeader = ctx.header(Header.ACCEPT); ContentType contentType = Formats.parseHeader(formatHeader, User.class); String result = Formats.format(contentType, user); diff --git a/cwms-data-api/src/test/java/cwms/cda/api/users/UserManagementTestIT.java b/cwms-data-api/src/test/java/cwms/cda/api/users/UserManagementTestIT.java index 6956cac57..10778109f 100644 --- a/cwms-data-api/src/test/java/cwms/cda/api/users/UserManagementTestIT.java +++ b/cwms-data-api/src/test/java/cwms/cda/api/users/UserManagementTestIT.java @@ -35,6 +35,7 @@ public class UserManagementTestIT extends DataApiTestIT { private static final String LOCATION = "SOME_LOCATION"; + private static final String MISSING_USER = "DOES_NOT_EXIST"; private static final String SWT = "SWT"; private static final String SPK = "SPK"; @@ -146,6 +147,23 @@ void test_manage_user(String authType, TestAccounts.KeyUser theUser, RequestSpec ; } + @ParameterizedTest + @ArgumentsSource(UserSpecSource.class) + @AuthType(user = TestAccounts.KeyUser.SPK_NORMAL2) + void test_get_missing_user_not_found(String authType, TestAccounts.KeyUser theUser, + RequestSpecification authSpec) { + given() + .log().ifValidationFails(LogDetail.ALL, true) + .spec(authSpec) + .when() + .get("/users/{user-name}", MISSING_USER) + .then() + .log().ifValidationFails(LogDetail.ALL, true) + .statusCode(is(HttpCode.NOT_FOUND.getStatus())) + .body("message", equalTo("User not found: " + MISSING_USER)) + ; + } + @ParameterizedTest @ArgumentsSource(UserSpecSource.class) @AuthType(user = TestAccounts.KeyUser.SPK_NORMAL2)