blob: 292c8e0278c93a92d464b1bfbc3ff00b9b67d58c [file] [log] [blame]
package de.ids_mannheim.korap.web.controller.usergroup;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.net.HttpHeaders;
import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
import de.ids_mannheim.korap.config.Attributes;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.utils.JsonUtils;
import jakarta.ws.rs.client.Entity;
import jakarta.ws.rs.core.Form;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
/**
* @author margaretha
*/
public class UserGroupControllerTest extends UserGroupTestBase {
private String username = "UserGroupControllerTest";
@Test
public void testCreateGroupEmptyDescription ()
throws KustvaktException {
String groupName = "empty_group";
Response response = createUserGroup(groupName, "", username);
assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
deleteGroupByName(groupName,username);
}
@Test
public void testCreateGroupMissingDescription ()
throws KustvaktException {
String groupName = "missing-desc-group";
Response response = testCreateGroupWithoutDescription(groupName);
assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
deleteGroupByName(groupName,username);
}
private Response testCreateGroupWithoutDescription (String groupName)
throws KustvaktException {
Response response = target().path(API_VERSION).path("group")
.path("@" + groupName).request()
.header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
.createBasicAuthorizationHeaderValue(username, "pass"))
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
.put(Entity.form(new Form()));
return response;
}
@Test
public void testCreateGroupInvalidName ()
throws KustvaktException {
String groupName = "invalid-group-name$";
Response response = testCreateGroupWithoutDescription(groupName);
assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
JsonNode node = JsonUtils.readTree(response.readEntity(String.class));
assertEquals(StatusCodes.INVALID_ARGUMENT,
node.at("/errors/0/0").asInt());
// assertEquals("User-group name must only contains letters, numbers, "
// + "underscores, hypens and spaces", node.at("/errors/0/1").asText());
assertEquals(node.at("/errors/0/2").asText(), "invalid-group-name$");
}
@Test
public void testCreateGroupNameTooShort ()
throws KustvaktException {
String groupName = "a";
Response response = testCreateGroupWithoutDescription(groupName);
assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
JsonNode node = JsonUtils.readTree(response.readEntity(String.class));
assertEquals(StatusCodes.INVALID_ARGUMENT,
node.at("/errors/0/0").asInt());
assertEquals(node.at("/errors/0/1").asText(),
"groupName must contain at least 3 characters");
assertEquals(node.at("/errors/0/2").asText(), "groupName");
}
@Test
public void testUserGroup () throws KustvaktException {
String groupName = "new-user-group";
String description = "This is new-user-group.";
Response response = createUserGroup(groupName, description, username);
assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
// same name
response = testCreateGroupWithoutDescription(groupName);
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
// list user group
JsonNode node = listUserGroups(username);
assertEquals(1, node.size());
node = node.get(0);
assertEquals(node.get("name").asText(), "new-user-group");
assertEquals(description, node.get("description").asText());
assertEquals(username, node.get("owner").asText());
assertEquals(1, node.get("members").size());
assertEquals(username, node.at("/members/0/userId").asText());
assertEquals(5, node.at("/members/0/privileges").size());
testUpdateUserGroup(groupName);
testAddMember(groupName, username, "darla");
testDeleteGroup(groupName,username);
}
private void testUpdateUserGroup (String groupName)
throws KustvaktException {
String description = "Description is updated.";
Response response = createUserGroup(groupName, description, username);
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
JsonNode node = listUserGroups(username);
assertEquals(1, node.size());
assertEquals(description, node.get(0).get("description").asText());
}
private void testDeleteGroup (String groupName, String username)
throws KustvaktException {
deleteGroupByName(groupName, username);
JsonNode node = listUserGroups(username);
assertEquals(0, node.size());
}
@Test
public void testDeleteGroupUnauthorized ()
throws KustvaktException {
createMarlinGroup();
addMember(marlinGroupName, "dory", "marlin");
addAdminRole(marlinGroupName, "dory", "marlin");
// dory is a group admin in marlin-group
Response response = target().path(API_VERSION).path("group")
.path("@marlin-group").request()
.header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
.createBasicAuthorizationHeaderValue("dory", "pass"))
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32").delete();
String entity = response.readEntity(String.class);
// System.out.println(entity);
JsonNode node = JsonUtils.readTree(entity);
assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus());
assertEquals(StatusCodes.AUTHORIZATION_FAILED,
node.at("/errors/0/0").asInt());
assertEquals(node.at("/errors/0/1").asText(),
"Unauthorized operation for user: dory");
deleteGroupByName(marlinGroupName, "marlin");
}
@Test
public void testDeleteDeletedGroup ()
throws KustvaktException {
createMarlinGroup();
deleteGroupByName(marlinGroupName, "marlin");
Response response = deleteGroupByName(marlinGroupName, "marlin");
assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
}
@Test
public void testDeleteGroupOwner ()
throws KustvaktException {
createMarlinGroup();
// delete marlin from marlin-group
// dory is a group admin in marlin-group
Response response = target().path(API_VERSION).path("group")
.path("@marlin-group").path("~marlin").request()
.header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
.createBasicAuthorizationHeaderValue("dory", "pass"))
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32").delete();
String entity = response.readEntity(String.class);
// System.out.println(entity);
JsonNode node = JsonUtils.readTree(entity);
assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
assertEquals(StatusCodes.NOT_ALLOWED, node.at("/errors/0/0").asInt());
assertEquals(node.at("/errors/0/1").asText(),
"Operation 'delete group owner'is not allowed.");
deleteGroupByName(marlinGroupName, "marlin");
}
}