GroupRest { @GET @RolesAllowed("user") @Produces(MediaType.APPLICATION_JSON) @ApiOperation("Get all Mobi Groups") public Response getGroups() { try { JSONArray result = JSONArray.fromObject(engineManager.getGroups().stream() .map(group -> group.getModel().filter(group.getResource(), null, null)) .map(groupModel -> modelToJsonld(groupModel, transformer)) .map(RestUtils::getObjectFromJsonld) .collect(Collectors.toList())); return Response.ok(result).build(); } catch (IllegalArgumentException ex) { throw ErrorUtils.sendError(ex.getMessage(), Response.Status.BAD_REQUEST); } catch (IllegalStateException | MobiException ex) { throw ErrorUtils.sendError(ex, ex.getMessage(), Response.Status.INTERNAL_SERVER_ERROR); } }  @GET @RolesAllowed("user") @Produces(MediaType.APPLICATION_JSON) @ApiOperation("Get all Mobi Groups") Response getGroups(); @POST @RolesAllowed("admin") @ApiOperation("Create a new Mobi Group") @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.MULTIPART_FORM_DATA) Response createGroup(@FormDataParam("title") String title,
                         @FormDataParam("description") String description,
                         @FormDataParam("roles") List<FormDataBodyPart> roles,
                         @FormDataParam("members") List<FormDataBodyPart> members); @GET @Path("{groupTitle}") @RolesAllowed("user") @Produces(MediaType.APPLICATION_JSON) @ApiOperation("Get a single Mobi Group") Response getGroup(@PathParam("groupTitle") String groupTitle); @PUT @Path("{groupTitle}") @RolesAllowed("admin") @ApiOperation("Update a Mobi Group's information") @Consumes(MediaType.APPLICATION_JSON) Response updateGroup(@PathParam("groupTitle") String groupTitle, String newGroupStr); @DELETE @Path("{groupTitle}") @RolesAllowed("admin") @ApiOperation("Remove a Mobi Group") Response deleteGroup(@PathParam("groupTitle") String groupTitle); @GET @Path("{groupTitle}/roles") @RolesAllowed("user") @Produces(MediaType.APPLICATION_JSON) @ApiOperation("List roles of a Mobi Group") Response getGroupRoles(@PathParam("groupTitle") String groupTitle); @PUT @Path("{groupTitle}/roles") @RolesAllowed("admin") @ApiOperation("Add roles to a Mobi Group") Response addGroupRoles(@PathParam("groupTitle") String groupTitle, @QueryParam("roles") List<String> roles); @DELETE @Path("{groupTitle}/roles") @RolesAllowed("admin") @ApiOperation("Remove role from a Mobi Group") Response removeGroupRole(@PathParam("groupTitle") String groupTitle, @QueryParam("role") String role); @GET @Path("{groupTitle}/users") @RolesAllowed("user") @Produces(MediaType.APPLICATION_JSON) @ApiOperation("List users of a Mobi Group") Response getGroupUsers(@PathParam("groupTitle") String groupTitle); @PUT @Path("{groupTitle}/users") @RolesAllowed("admin") @ApiOperation("Add a Mobi User to a Group") Response addGroupUser(@PathParam("groupTitle") String groupTitle, 
                                 @QueryParam("users") List<String> usernames); @DELETE @Path("{groupTitle}/users") @RolesAllowed("admin") @ApiOperation("Remove a Mobi User from a Group") Response removeGroupUser(@PathParam("groupTitle") String groupTitle, @QueryParam("user") String username);  }
@Test public void getGroupsTest() { Response response = target().path("groups").request().get(); verify(engineManager, atLeastOnce()).getGroups(); assertEquals(response.getStatus(), 200); try { JSONArray result = JSONArray.fromObject(response.readEntity(String.class)); assertEquals(result.size(), groups.size()); } catch (Exception e) { fail("Expected no exception, but got: " + e.getMessage()); } }