blob: e93582f33f683799baee4f700819c4a2db6ead05 [file] [log] [blame]
package de.ids_mannheim.korap.web.controller;
import static org.junit.jupiter.api.Assertions.assertEquals;
import jakarta.ws.rs.ProcessingException;
import jakarta.ws.rs.client.Entity;
import jakarta.ws.rs.core.Form;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
import org.apache.http.entity.ContentType;
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.constant.ResourceType;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.utils.JsonUtils;
/**
* @author margaretha
*/
public class VirtualCorpusControllerAdminTest extends VirtualCorpusTestBase {
private String admin = "admin";
private String testUser = "VirtualCorpusControllerAdminTest";
private JsonNode testAdminListVC(String username) throws ProcessingException, KustvaktException {
Form f = new Form();
f.param("createdBy", username);
Response response = target().path(API_VERSION).path("admin").path("vc").path("list").request().header(Attributes.AUTHORIZATION, HttpAuthorizationHandler.createBasicAuthorizationHeaderValue(admin, "pass")).header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED).post(Entity.form(f));
assertEquals(Status.OK.getStatusCode(), response.getStatus());
String entity = response.readEntity(String.class);
return JsonUtils.readTree(entity);
}
private JsonNode testAdminListVC_UsingAdminToken(String username, ResourceType type) throws ProcessingException, KustvaktException {
Form f = new Form();
f.param("createdBy", username);
f.param("type", type.toString());
f.param("token", "secret");
Response response = target().path(API_VERSION).path("admin").path("vc").path("list").request().header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED).post(Entity.form(f));
assertEquals(Status.OK.getStatusCode(), response.getStatus());
String entity = response.readEntity(String.class);
return JsonUtils.readTree(entity);
}
@Test
public void testCreateSystemVC() throws KustvaktException {
String json = "{\"type\": \"SYSTEM\"" + ",\"queryType\": \"VIRTUAL_CORPUS\"" + ",\"corpusQuery\": \"creationDate since 1820\"}";
Response response = target().path(API_VERSION).path("vc").path("~system").path("new-system-vc").request().header(Attributes.AUTHORIZATION, HttpAuthorizationHandler.createBasicAuthorizationHeaderValue(admin, "pass")).header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON).put(Entity.json(json));
assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
JsonNode node = testAdminListVC_UsingAdminToken("system", ResourceType.SYSTEM);
assertEquals(2, node.size());
testDeleteSystemVC(admin, "new-system-vc");
}
private void testDeleteSystemVC(String vcCreator, String vcName) throws ProcessingException, KustvaktException {
Response response = target().path(API_VERSION).path("vc").path("~system").path(vcName).request().header(Attributes.AUTHORIZATION, HttpAuthorizationHandler.createBasicAuthorizationHeaderValue(admin, "pass")).delete();
assertEquals(Status.OK.getStatusCode(), response.getStatus());
JsonNode node = testAdminListVC_UsingAdminToken("system", ResourceType.SYSTEM);
assertEquals(1, node.size());
}
@Test
public void testCreatePrivateVC() throws ProcessingException, KustvaktException {
String json = "{\"type\": \"PRIVATE\"" + ",\"queryType\": \"VIRTUAL_CORPUS\"" + ",\"corpusQuery\": \"corpusSigle=GOE\"}";
String vcName = "new-vc";
Response response = target().path(API_VERSION).path("vc").path("~" + testUser).path(vcName).request().header(Attributes.AUTHORIZATION, HttpAuthorizationHandler.createBasicAuthorizationHeaderValue(admin, "pass")).header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON).put(Entity.json(json));
assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
JsonNode node = testAdminListVC(testUser);
assertEquals(1, node.size());
testEditPrivateVC(testUser, vcName);
testDeletePrivateVC(testUser, vcName);
}
private void testEditPrivateVC(String vcCreator, String vcName) throws ProcessingException, KustvaktException {
String json = "{\"description\": \"edited vc\"}";
Response response = target().path(API_VERSION).path("vc").path("~" + vcCreator).path(vcName).request().header(Attributes.AUTHORIZATION, HttpAuthorizationHandler.createBasicAuthorizationHeaderValue(admin, "pass")).header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON).put(Entity.json(json));
assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus());
JsonNode node = testAdminListVC(testUser);
assertEquals(node.at("/0/description").asText(), "edited vc");
}
private void testDeletePrivateVC(String vcCreator, String vcName) throws ProcessingException, KustvaktException {
Response response = target().path(API_VERSION).path("vc").path("~" + vcCreator).path(vcName).request().header(Attributes.AUTHORIZATION, HttpAuthorizationHandler.createBasicAuthorizationHeaderValue(admin, "pass")).delete();
assertEquals(Status.OK.getStatusCode(), response.getStatus());
JsonNode node = testAdminListVC(vcCreator);
assertEquals(0, node.size());
}
// @Deprecated
// private String testlistAccessByVC (String groupName) throws KustvaktException {
// Response response = target().path(API_VERSION).path("vc")
// .path("access")
// .queryParam("groupName", groupName)
// .request()
// .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
// .createBasicAuthorizationHeaderValue(admin, "pass"))
// .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32")
// .get();
//
// String entity = response.readEntity(String.class);
// JsonNode node = JsonUtils.readTree(entity);
// assertEquals(1, node.size());
// node = node.get(0);
//
// assertEquals(admin, node.at("/createdBy").asText());
// assertEquals(5, node.at("/vcId").asInt());
// assertEquals("marlin-vc", node.at("/vcName").asText());
// assertEquals(1, node.at("/userGroupId").asInt());
// assertEquals("marlin group", node.at("/userGroupName").asText());
//
// return node.at("/accessId").asText();
// }
private JsonNode testlistAccessByGroup(String groupName) throws KustvaktException {
Response response = target().path(API_VERSION).path("vc").path("access").queryParam("groupName", groupName).request().header(Attributes.AUTHORIZATION, HttpAuthorizationHandler.createBasicAuthorizationHeaderValue(admin, "pass")).get();
String entity = response.readEntity(String.class);
JsonNode node = JsonUtils.readTree(entity);
assertEquals(2, node.size());
return node.get(node.size() - 1);
}
@Test
public void testVCSharing() throws ProcessingException, KustvaktException {
String vcCreator = "marlin";
String vcName = "marlin-vc";
String groupName = "marlin-group";
JsonNode node2 = testAdminListVC_UsingAdminToken(vcCreator, ResourceType.PROJECT);
assertEquals(0, node2.size());
testCreateVCAccess(vcCreator, vcName, groupName);
JsonNode node = testlistAccessByGroup(groupName);
String accessId = node.at("/accessId").asText();
testDeleteVCAccess(accessId);
node2 = testAdminListVC_UsingAdminToken(vcCreator, ResourceType.PROJECT);
assertEquals(1, node2.size());
String json = "{\"type\": \"" + ResourceType.PRIVATE + "\"}";
editVC(admin, vcCreator, vcName, json);
node = retrieveVCInfo(admin, vcCreator, vcName);
assertEquals(ResourceType.PRIVATE.displayName(), node.at("/type").asText());
node2 = testAdminListVC_UsingAdminToken(vcCreator, ResourceType.PROJECT);
assertEquals(0, node2.size());
}
private void testCreateVCAccess(String vcCreator, String vcName, String groupName) throws ProcessingException, KustvaktException {
Response response;
// share VC
response = target().path(API_VERSION).path("vc").path("~" + vcCreator).path(vcName).path("share").path("@" + groupName).request().header(Attributes.AUTHORIZATION, HttpAuthorizationHandler.createBasicAuthorizationHeaderValue(admin, "pass")).post(Entity.form(new Form()));
assertEquals(Status.OK.getStatusCode(), response.getStatus());
}
private void testDeleteVCAccess(String accessId) throws ProcessingException, KustvaktException {
Response response = target().path(API_VERSION).path("vc").path("access").path(accessId).request().header(Attributes.AUTHORIZATION, HttpAuthorizationHandler.createBasicAuthorizationHeaderValue(admin, "pass")).delete();
assertEquals(Status.OK.getStatusCode(), response.getStatus());
}
}