UserRest { @PUT @Path("{username}") @RolesAllowed("user") @ApiOperation("Update a Mobi user's information") @Consumes(MediaType.APPLICATION_JSON) public Response updateUser(@Context ContainerRequestContext context, @PathParam("username") String username, String newUserStr) { if (StringUtils.isEmpty(username)) { throw ErrorUtils.sendError("Current username must be provided", Response.Status.BAD_REQUEST); } isAuthorizedUser(context, username); try { Model userModel = jsonldToModel(newUserStr, transformer); Set<Resource> subjects = userModel.filter(null, vf.createIRI(RDF.TYPE.stringValue()), vf.createIRI(User.TYPE)).subjects(); if (subjects.size() < 1) { throw ErrorUtils.sendError("User must have an ID", Response.Status.BAD_REQUEST); } User newUser = userFactory.createNew(subjects.iterator().next(), userModel); Value newUsername = newUser.getUsername().orElseThrow(() -> ErrorUtils.sendError("Username must be provided in new user", Response.Status.BAD_REQUEST)); if (!username.equals(newUsername.stringValue())) { throw ErrorUtils.sendError("Provided username and the username in the data must match", Response.Status.BAD_REQUEST); } User savedUser = engineManager.retrieveUser(rdfEngine.getEngineName(), username).orElseThrow(() -> ErrorUtils.sendError("User " + username + " not found", Response.Status.BAD_REQUEST)); if (!savedUser.getUsername().isPresent()) { throw ErrorUtils.sendError("User must have a username", Response.Status.INTERNAL_SERVER_ERROR); } if (!savedUser.getPassword().isPresent()) { throw ErrorUtils.sendError("User must have a password", Response.Status.INTERNAL_SERVER_ERROR); } if (!savedUser.getUsername().get().equals(newUsername)) { throw ErrorUtils.sendError("Usernames must match", Response.Status.BAD_REQUEST); } if (!savedUser.getHasUserRole().isEmpty()) { newUser.setHasUserRole(savedUser.getHasUserRole()); } newUser.setPassword(savedUser.getPassword().get()); engineManager.updateUser(rdfEngine.getEngineName(), newUser); return Response.ok().build(); } catch (IllegalArgumentException ex) { throw ErrorUtils.sendError(ex.getMessage(), Response.Status.BAD_REQUEST); } }  @GET @RolesAllowed("user") @Produces(MediaType.APPLICATION_JSON) @ApiOperation("Get all Mobi Users") Response getUsers(); @POST @RolesAllowed("admin") @ApiOperation("Create a Mobi User account") @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.MULTIPART_FORM_DATA) Response createUser(@FormDataParam("username") String username,
                        @FormDataParam("password") String password,
                        @FormDataParam("roles") List<FormDataBodyPart> roles,
                        @FormDataParam("firstName") String firstName,
                        @FormDataParam("lastName") String lastName,
                        @FormDataParam("email") String email); @GET @Path("{username}") @RolesAllowed("user") @Produces(MediaType.APPLICATION_JSON) @ApiOperation("Get a single Mobi User") Response getUser(@PathParam("username") String username); @PUT @Path("{username}") @RolesAllowed("user") @ApiOperation("Update a Mobi user's information") @Consumes(MediaType.APPLICATION_JSON) Response updateUser(@Context ContainerRequestContext context,
                        @PathParam("username") String username,
                        String newUserStr); @POST @Path("{username}/password") @RolesAllowed("user") @ApiOperation("Changes a Mobi User's password if it is the User making the request") Response changePassword(@Context ContainerRequestContext context,
                            @PathParam("username") String username,
                            @QueryParam("currentPassword") String currentPassword,
                            @QueryParam("newPassword") String newPassword); @PUT @Path("{username}/password") @RolesAllowed("admin") @ApiOperation("Resets a Mobi User's password if User making request is the admin") Response resetPassword(@Context ContainerRequestContext context,
                           @PathParam("username") String username,
                           @QueryParam("newPassword") String newPassword); @DELETE @Path("{username}") @RolesAllowed("user") @ApiOperation("Remove a Mobi user's account") Response deleteUser(@Context ContainerRequestContext context,
                        @PathParam("username") String username); @GET @Path("{username}/roles") @RolesAllowed("user") @Produces(MediaType.APPLICATION_JSON) @ApiOperation("List roles of a Mobi User") Response getUserRoles(@PathParam("username") String username,
                          @DefaultValue("false") @QueryParam("includeGroups") boolean includeGroups); @PUT @Path("{username}/roles") @RolesAllowed("admin") @ApiOperation("Add roles to a Mobi User") Response addUserRoles(@PathParam("username") String username, @QueryParam("roles") List<String> roles); @DELETE @Path("{username}/roles") @RolesAllowed("admin") @ApiOperation("Remove role from a Mobi User") Response removeUserRole(@PathParam("username") String username, @QueryParam("role") String role); @GET @Path("{username}/groups") @RolesAllowed("user") @Produces(MediaType.APPLICATION_JSON) @ApiOperation("List groups of a Mobi User") Response listUserGroups(@PathParam("username") String username); @PUT @Path("{username}/groups") @RolesAllowed("admin") @ApiOperation("Add a Mobi user to a group") Response addUserGroup(@PathParam("username") String username, @QueryParam("group") String groupTitle); @DELETE @Path("{username}/groups") @RolesAllowed("admin") @ApiOperation("Remove a Mobi User from a group") Response removeUserGroup(@PathParam("username") String username, @QueryParam("group") String groupTitle); @GET @Path("username") @RolesAllowed("user") @Produces(MediaType.TEXT_PLAIN) @ApiOperation("Retrieve a username based on the passed User IRI") Response getUsername(@QueryParam("iri") String userIri);  }
@Test public void updateUserTest() { Response response = target().path("users/" + UsernameTestFilter.USERNAME) .request().put(Entity.entity(groupedModelToString(user.getModel(), getRDFFormat("jsonld"), transformer), MediaType.APPLICATION_JSON_TYPE)); assertEquals(response.getStatus(), 200); verify(engineManager, atLeastOnce()).retrieveUser(ENGINE_NAME, UsernameTestFilter.USERNAME); verify(engineManager).updateUser(eq(ENGINE_NAME), any(User.class)); }