blob: f71c9fa4282d04a0d7e4127b0aa30b6d263de8d5 [file] [log] [blame]
package de.ids_mannheim.korap.rewrite;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.IOException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
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.cache.VirtualCorpusCache;
import de.ids_mannheim.korap.config.Attributes;
import de.ids_mannheim.korap.config.SpringJerseyTest;
import de.ids_mannheim.korap.dao.QueryDao;
import de.ids_mannheim.korap.entity.QueryDO;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.init.NamedVCLoader;
import de.ids_mannheim.korap.util.QueryException;
import de.ids_mannheim.korap.utils.JsonUtils;
import jakarta.ws.rs.core.Response;
/**
* @author margaretha
*/
public class VirtualCorpusReferenceRewriteTest extends SpringJerseyTest {
@Autowired
private NamedVCLoader vcLoader;
@Autowired
private QueryDao dao;
@Test
public void testRefCachedVC ()
throws KustvaktException, IOException, QueryException {
vcLoader.loadVCToCache("named-vc1", "/vc/named-vc1.jsonld");
assertTrue(VirtualCorpusCache.contains("named-vc1"));
Response response = target().path(API_VERSION).path("search")
.queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
.queryParam("cq", "referTo named-vc1").request().get();
String ent = response.readEntity(String.class);
JsonNode node = JsonUtils.readTree(ent);
node = node.at("/collection");
assertEquals("koral:docGroup", node.at("/@type").asText());
assertTrue(node.at("/operands/1/rewrites").isMissingNode());
testRefCachedVCWithUsername();
QueryDO vc = dao.retrieveQueryByName("named-vc1", "system");
dao.deleteQuery(vc);
vc = dao.retrieveQueryByName("named-vc1", "system");
assertNull(vc);
VirtualCorpusCache.delete("named-vc1");
assertFalse(VirtualCorpusCache.contains("named-vc1"));
}
private void testRefCachedVCWithUsername ()
throws KustvaktException, IOException, QueryException {
Response response = target().path(API_VERSION).path("search")
.queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
.queryParam("cq", "referTo \"system/named-vc1\"").request()
.get();
String ent = response.readEntity(String.class);
JsonNode node = JsonUtils.readTree(ent);
node = node.at("/collection");
assertEquals(node.at("/@type").asText(), "koral:docGroup");
node = node.at("/operands/1/rewrites");
assertEquals(1, node.size());
assertEquals("koral:rewrite", node.at("/0/@type").asText());
assertEquals("Kustvakt", node.at("/0/origin").asText());
assertEquals("operation:override", node.at("/0/operation").asText());
assertEquals("ref", node.at("/0/scope").asText());
assertEquals("system/named-vc1", node.at("/0/source").asText());
}
@Test
public void testRewriteFreeAndSystemVCRef ()
throws KustvaktException, Exception {
Response response = target().path(API_VERSION).path("search")
.queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
.queryParam("cq", "referTo \"system-vc\"").request().get();
String ent = response.readEntity(String.class);
JsonNode node = JsonUtils.readTree(ent);
node = node.at("/collection");
assertEquals("koral:docGroup", node.at("/@type").asText());
assertEquals("operation:and", node.at("/operation").asText());
assertEquals("koral:doc", node.at("/operands/0/@type").asText());
assertEquals("CC.*", node.at("/operands/0/value").asText());
assertEquals("koral:doc", node.at("/operands/1/@type").asText());
assertEquals("GOE", node.at("/operands/1/value").asText());
assertEquals("match:eq", node.at("/operands/1/match").asText());
assertEquals("corpusSigle", node.at("/operands/1/key").asText());
node = node.at("/operands/1/rewrites/0");
assertEquals("operation:override", node.at("/operation").asText());
assertEquals("koral:docGroupRef", node.at("/source/@type").asText());
assertEquals("system-vc", node.at("/source/ref").asText());
}
@Test
public void testRewritePubAndSystemVCRef () throws KustvaktException {
Response response = target().path(API_VERSION).path("search")
.queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
.queryParam("cq", "referTo \"system/system-vc\"").request()
.header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
.createBasicAuthorizationHeaderValue("user", "pass"))
.header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32").get();
String ent = response.readEntity(String.class);
JsonNode node = JsonUtils.readTree(ent);
node = node.at("/collection");
assertEquals("koral:docGroup", node.at("/@type").asText());
assertEquals("operation:and", node.at("/operation").asText());
assertEquals(2, node.at("/operands").size());
assertEquals("koral:docGroup", node.at("/operands/0/@type").asText());
assertEquals("operation:or", node.at("/operands/0/operation").asText());
JsonNode availability = node.at("/operands/0/operands");
assertEquals(2, availability.size());
assertEquals("CC.*", availability.at("/0/value").asText());
assertEquals("operation:or", availability.at("/1/operation").asText());
assertEquals("ACA.*", availability.at("/1/operands/0/value").asText());
assertEquals("QAO-NC", availability.at("/1/operands/1/value").asText());
assertEquals("koral:doc", node.at("/operands/1/@type").asText());
assertEquals("GOE", node.at("/operands/1/value").asText());
assertEquals("match:eq", node.at("/operands/1/match").asText());
assertEquals("corpusSigle", node.at("/operands/1/key").asText());
node = node.at("/operands/1/rewrites/0");
assertEquals("operation:override", node.at("/operation").asText());
assertEquals("koral:docGroupRef", node.at("/source/@type").asText());
assertEquals("system/system-vc", node.at("/source/ref").asText());
}
@Test
public void testRewriteWithDoryVCRef ()
throws KustvaktException, IOException, QueryException {
Response response = target().path(API_VERSION).path("search")
.queryParam("q", "Fisch").queryParam("ql", "poliqarp")
.queryParam("cq", "referTo \"dory/dory-vc\"").request()
.header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
.createBasicAuthorizationHeaderValue("dory", "pass"))
.get();
String ent = response.readEntity(String.class);
JsonNode node = JsonUtils.readTree(ent);
node = node.at("/collection");
assertEquals("koral:docGroup", node.at("/@type").asText());
assertEquals("operation:and", node.at("/operation").asText());
assertEquals("koral:doc", node.at("/operands/0/@type").asText());
assertEquals("CC.*", node.at("/operands/0/value").asText());
assertEquals("koral:docGroup", node.at("/operands/1/@type").asText());
assertEquals(2, node.at("/operands/1/operands").size());
node = node.at("/operands/1/rewrites/0");
assertEquals("operation:override", node.at("/operation").asText());
assertEquals("koral:docGroupRef", node.at("/source/@type").asText());
assertEquals("dory/dory-vc", node.at("/source/ref").asText());
}
}