blob: 135b5160853b8f25ba5dce53bc8c0900178c889a [file] [log] [blame]
margaretha398f4722019-01-09 19:07:20 +01001package de.ids_mannheim.korap.rewrite;
margaretha563aabe2018-09-13 20:39:45 +02002
Marc Kupietzd43a98d2023-09-22 17:11:46 +02003import static org.junit.jupiter.api.Assertions.assertEquals;
4import static org.junit.jupiter.api.Assertions.assertFalse;
5import static org.junit.jupiter.api.Assertions.assertNull;
6import static org.junit.jupiter.api.Assertions.assertTrue;
margaretha9e53bb22018-09-14 19:39:15 +02007
8import java.io.IOException;
margaretha563aabe2018-09-13 20:39:45 +02009
Marc Kupietzd43a98d2023-09-22 17:11:46 +020010import org.junit.jupiter.api.Test;
margaretha9e53bb22018-09-14 19:39:15 +020011import org.springframework.beans.factory.annotation.Autowired;
margaretha563aabe2018-09-13 20:39:45 +020012import com.fasterxml.jackson.databind.JsonNode;
13import com.google.common.net.HttpHeaders;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020014
abcpro173fe8f22022-11-08 19:56:52 +000015import javax.ws.rs.core.Response;
margaretha563aabe2018-09-13 20:39:45 +020016
17import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
margaretha7c1f4282021-11-29 17:27:53 +010018import de.ids_mannheim.korap.cache.VirtualCorpusCache;
margaretha563aabe2018-09-13 20:39:45 +020019import de.ids_mannheim.korap.config.Attributes;
margaretha9e53bb22018-09-14 19:39:15 +020020import de.ids_mannheim.korap.config.NamedVCLoader;
margaretha563aabe2018-09-13 20:39:45 +020021import de.ids_mannheim.korap.config.SpringJerseyTest;
margarethab097fb02021-02-22 19:28:33 +010022import de.ids_mannheim.korap.dao.QueryDao;
23import de.ids_mannheim.korap.entity.QueryDO;
margaretha563aabe2018-09-13 20:39:45 +020024import de.ids_mannheim.korap.exceptions.KustvaktException;
margaretha9e53bb22018-09-14 19:39:15 +020025import de.ids_mannheim.korap.util.QueryException;
margaretha563aabe2018-09-13 20:39:45 +020026import de.ids_mannheim.korap.utils.JsonUtils;
27
28/**
29 * @author margaretha
margaretha563aabe2018-09-13 20:39:45 +020030 */
31public class VirtualCorpusRewriteTest extends SpringJerseyTest {
32
margaretha9e53bb22018-09-14 19:39:15 +020033 @Autowired
34 private NamedVCLoader vcLoader;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020035
margaretha9e53bb22018-09-14 19:39:15 +020036 @Autowired
margarethab097fb02021-02-22 19:28:33 +010037 private QueryDao dao;
margaretha488e04b2018-09-19 18:17:45 +020038
margaretha563aabe2018-09-13 20:39:45 +020039 @Test
Marc Kupietzd43a98d2023-09-22 17:11:46 +020040 public void testRefCachedVC() throws KustvaktException, IOException, QueryException {
margaretha9e53bb22018-09-14 19:39:15 +020041 vcLoader.loadVCToCache("named-vc1", "/vc/named-vc1.jsonld");
margaretha7c1f4282021-11-29 17:27:53 +010042 assertTrue(VirtualCorpusCache.contains("named-vc1"));
Marc Kupietzd43a98d2023-09-22 17:11:46 +020043 Response response = target().path(API_VERSION).path("search").queryParam("q", "[orth=der]").queryParam("ql", "poliqarp").queryParam("cq", "referTo named-vc1").request().get();
abcpro173fe8f22022-11-08 19:56:52 +000044 String ent = response.readEntity(String.class);
margaretha1bc9cca2018-12-11 15:09:44 +010045 JsonNode node = JsonUtils.readTree(ent);
46 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020047 assertEquals(node.at("/@type").asText(), "koral:docGroup");
margaretha1bc9cca2018-12-11 15:09:44 +010048 assertTrue(node.at("/operands/1/rewrites").isMissingNode());
margaretha7c1f4282021-11-29 17:27:53 +010049 testRefCachedVCWithUsername();
margarethab097fb02021-02-22 19:28:33 +010050 QueryDO vc = dao.retrieveQueryByName("named-vc1", "system");
51 dao.deleteQuery(vc);
margaretha7c1f4282021-11-29 17:27:53 +010052 vc = dao.retrieveQueryByName("named-vc1", "system");
53 assertNull(vc);
margarethaad1300b2021-12-13 17:36:29 +010054 VirtualCorpusCache.delete("named-vc1");
55 assertFalse(VirtualCorpusCache.contains("named-vc1"));
margaretha488e04b2018-09-19 18:17:45 +020056 }
57
Marc Kupietzd43a98d2023-09-22 17:11:46 +020058 private void testRefCachedVCWithUsername() throws KustvaktException, IOException, QueryException {
59 Response response = target().path(API_VERSION).path("search").queryParam("q", "[orth=der]").queryParam("ql", "poliqarp").queryParam("cq", "referTo \"system/named-vc1\"").request().get();
abcpro173fe8f22022-11-08 19:56:52 +000060 String ent = response.readEntity(String.class);
margaretha9e53bb22018-09-14 19:39:15 +020061 JsonNode node = JsonUtils.readTree(ent);
62 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020063 assertEquals(node.at("/@type").asText(), "koral:docGroup");
margaretha488e04b2018-09-19 18:17:45 +020064 node = node.at("/operands/1/rewrites");
65 assertEquals(2, node.size());
Marc Kupietzd43a98d2023-09-22 17:11:46 +020066 assertEquals(node.at("/0/operation").asText(), "operation:deletion");
67 assertEquals(node.at("/1/operation").asText(), "operation:insertion");
margaretha9e53bb22018-09-14 19:39:15 +020068 }
margaretha488e04b2018-09-19 18:17:45 +020069
margaretha9e53bb22018-09-14 19:39:15 +020070 @Test
Marc Kupietzd43a98d2023-09-22 17:11:46 +020071 public void testRewriteFreeAndSystemVCRef() throws KustvaktException, Exception {
72 Response response = target().path(API_VERSION).path("search").queryParam("q", "[orth=der]").queryParam("ql", "poliqarp").queryParam("cq", "referTo \"system-vc\"").request().get();
abcpro173fe8f22022-11-08 19:56:52 +000073 String ent = response.readEntity(String.class);
margaretha563aabe2018-09-13 20:39:45 +020074 JsonNode node = JsonUtils.readTree(ent);
75 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020076 assertEquals(node.at("/@type").asText(), "koral:docGroup");
77 assertEquals(node.at("/operands/0/@type").asText(), "koral:doc");
78 assertEquals(node.at("/operands/1/@type").asText(), "koral:doc");
79 assertEquals(node.at("/operands/1/value").asText(), "GOE");
80 assertEquals(node.at("/operands/1/key").asText(), "corpusSigle");
margaretha563aabe2018-09-13 20:39:45 +020081 node = node.at("/operands/1/rewrites");
margaretha9e53bb22018-09-14 19:39:15 +020082 assertEquals(3, node.size());
Marc Kupietzd43a98d2023-09-22 17:11:46 +020083 assertEquals(node.at("/0/operation").asText(), "operation:deletion");
84 assertEquals(node.at("/1/operation").asText(), "operation:deletion");
85 assertEquals(node.at("/2/operation").asText(), "operation:insertion");
margaretha563aabe2018-09-13 20:39:45 +020086 }
87
88 @Test
Marc Kupietzd43a98d2023-09-22 17:11:46 +020089 public void testRewritePubAndSystemVCRef() throws KustvaktException {
90 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();
abcpro173fe8f22022-11-08 19:56:52 +000091 String ent = response.readEntity(String.class);
margaretha563aabe2018-09-13 20:39:45 +020092 JsonNode node = JsonUtils.readTree(ent);
93 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020094 assertEquals(node.at("/@type").asText(), "koral:docGroup");
95 assertEquals(node.at("/operands/0/@type").asText(), "koral:docGroup");
margaretha9e53bb22018-09-14 19:39:15 +020096 node = node.at("/operands/1/rewrites");
97 assertEquals(3, node.size());
Marc Kupietzd43a98d2023-09-22 17:11:46 +020098 assertEquals(node.at("/0/operation").asText(), "operation:deletion");
99 assertEquals(node.at("/1/operation").asText(), "operation:deletion");
100 assertEquals(node.at("/2/operation").asText(), "operation:insertion");
margaretha9e53bb22018-09-14 19:39:15 +0200101 }
102
103 @Test
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200104 public void testRewriteWithDoryVCRef() throws KustvaktException, IOException, QueryException {
105 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();
abcpro173fe8f22022-11-08 19:56:52 +0000106 String ent = response.readEntity(String.class);
margaretha9e53bb22018-09-14 19:39:15 +0200107 JsonNode node = JsonUtils.readTree(ent);
108 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200109 assertEquals(node.at("/@type").asText(), "koral:docGroup");
margaretha9e53bb22018-09-14 19:39:15 +0200110 node = node.at("/operands/1/rewrites");
111 assertEquals(3, node.size());
margaretha563aabe2018-09-13 20:39:45 +0200112 }
113}