UserRest { @POST @RolesAllowed("admin") @ApiOperation("Create a Mobi User account") @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.MULTIPART_FORM_DATA) public 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) { if (StringUtils.isEmpty(username)) { throw ErrorUtils.sendError("Username must be provided", Response.Status.BAD_REQUEST); } if (StringUtils.isEmpty(password)) { throw ErrorUtils.sendError("Password must be provided", Response.Status.BAD_REQUEST); } try { if (engineManager.userExists(username)) { throw ErrorUtils.sendError("User already exists", Response.Status.BAD_REQUEST); } Set<String> roleSet = new HashSet<>(); if (roles != null && roles.size() > 0) { roleSet = roles.stream().map(FormDataBodyPart::getValue).collect(Collectors.toSet()); } UserConfig.Builder builder = new UserConfig.Builder(username, password, roleSet); if (firstName != null) { builder.firstName(firstName); } if (lastName != null) { builder.lastName(lastName); } if (email != null) { builder.email(email); } User user = engineManager.createUser(rdfEngine.getEngineName(), builder.build()); if (!user.getUsername().isPresent()) { throw ErrorUtils.sendError("User must have a username", Response.Status.INTERNAL_SERVER_ERROR); } engineManager.storeUser(rdfEngine.getEngineName(), user); logger.info("Created user " + user.getResource() + " with username " + username); return Response.status(201).entity(user.getUsername().get().stringValue()).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 createUserTest() { FormDataMultiPart fd = new FormDataMultiPart(); fd.field("username", "testUser"); fd.field("email", "example@example.com"); fd.field("firstName", "John"); fd.field("lastName", "Doe"); fd.field("password", "123"); fd.field("roles", "admin"); fd.field("roles", "user"); when(engineManager.userExists(anyString())).thenReturn(false); Response response = target().path("users") .request().post(Entity.entity(fd, MediaType.MULTIPART_FORM_DATA)); assertEquals(response.getStatus(), 201); verify(engineManager).storeUser(eq(ENGINE_NAME), any(User.class)); }