blob: f35096c88bde49c49ed2daebe47cad6fb1adefb9 [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
margaretha563aabe2018-09-13 20:39:45 +020015import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
margaretha7c1f4282021-11-29 17:27:53 +010016import de.ids_mannheim.korap.cache.VirtualCorpusCache;
margaretha563aabe2018-09-13 20:39:45 +020017import de.ids_mannheim.korap.config.Attributes;
18import de.ids_mannheim.korap.config.SpringJerseyTest;
margarethab097fb02021-02-22 19:28:33 +010019import de.ids_mannheim.korap.dao.QueryDao;
20import de.ids_mannheim.korap.entity.QueryDO;
margaretha563aabe2018-09-13 20:39:45 +020021import de.ids_mannheim.korap.exceptions.KustvaktException;
margarethac8588902024-06-13 09:36:53 +020022import de.ids_mannheim.korap.init.NamedVCLoader;
margaretha9e53bb22018-09-14 19:39:15 +020023import de.ids_mannheim.korap.util.QueryException;
margaretha563aabe2018-09-13 20:39:45 +020024import de.ids_mannheim.korap.utils.JsonUtils;
margaretha96c309d2023-08-16 12:24:12 +020025import jakarta.ws.rs.core.Response;
margaretha563aabe2018-09-13 20:39:45 +020026
27/**
28 * @author margaretha
margaretha563aabe2018-09-13 20:39:45 +020029 */
30public class VirtualCorpusRewriteTest extends SpringJerseyTest {
31
margaretha9e53bb22018-09-14 19:39:15 +020032 @Autowired
33 private NamedVCLoader vcLoader;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020034
margaretha9e53bb22018-09-14 19:39:15 +020035 @Autowired
margarethab097fb02021-02-22 19:28:33 +010036 private QueryDao dao;
margaretha488e04b2018-09-19 18:17:45 +020037
margaretha563aabe2018-09-13 20:39:45 +020038 @Test
margaretha35e1ca22023-11-16 22:00:01 +010039 public void testRefCachedVC ()
40 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"));
margaretha35e1ca22023-11-16 22:00:01 +010043 Response response = target().path(API_VERSION).path("search")
44 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
45 .queryParam("cq", "referTo named-vc1").request().get();
abcpro173fe8f22022-11-08 19:56:52 +000046 String ent = response.readEntity(String.class);
margaretha1bc9cca2018-12-11 15:09:44 +010047 JsonNode node = JsonUtils.readTree(ent);
48 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020049 assertEquals(node.at("/@type").asText(), "koral:docGroup");
margaretha1bc9cca2018-12-11 15:09:44 +010050 assertTrue(node.at("/operands/1/rewrites").isMissingNode());
margaretha7c1f4282021-11-29 17:27:53 +010051 testRefCachedVCWithUsername();
margarethab097fb02021-02-22 19:28:33 +010052 QueryDO vc = dao.retrieveQueryByName("named-vc1", "system");
53 dao.deleteQuery(vc);
margaretha7c1f4282021-11-29 17:27:53 +010054 vc = dao.retrieveQueryByName("named-vc1", "system");
55 assertNull(vc);
margarethaad1300b2021-12-13 17:36:29 +010056 VirtualCorpusCache.delete("named-vc1");
57 assertFalse(VirtualCorpusCache.contains("named-vc1"));
margaretha488e04b2018-09-19 18:17:45 +020058 }
59
margaretha35e1ca22023-11-16 22:00:01 +010060 private void testRefCachedVCWithUsername ()
61 throws KustvaktException, IOException, QueryException {
62 Response response = target().path(API_VERSION).path("search")
63 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
64 .queryParam("cq", "referTo \"system/named-vc1\"").request()
65 .get();
abcpro173fe8f22022-11-08 19:56:52 +000066 String ent = response.readEntity(String.class);
margaretha9e53bb22018-09-14 19:39:15 +020067 JsonNode node = JsonUtils.readTree(ent);
68 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020069 assertEquals(node.at("/@type").asText(), "koral:docGroup");
margaretha488e04b2018-09-19 18:17:45 +020070 node = node.at("/operands/1/rewrites");
71 assertEquals(2, node.size());
Marc Kupietzd43a98d2023-09-22 17:11:46 +020072 assertEquals(node.at("/0/operation").asText(), "operation:deletion");
73 assertEquals(node.at("/1/operation").asText(), "operation:insertion");
margaretha9e53bb22018-09-14 19:39:15 +020074 }
margaretha488e04b2018-09-19 18:17:45 +020075
margaretha9e53bb22018-09-14 19:39:15 +020076 @Test
margaretha35e1ca22023-11-16 22:00:01 +010077 public void testRewriteFreeAndSystemVCRef ()
78 throws KustvaktException, Exception {
79 Response response = target().path(API_VERSION).path("search")
80 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
81 .queryParam("cq", "referTo \"system-vc\"").request().get();
abcpro173fe8f22022-11-08 19:56:52 +000082 String ent = response.readEntity(String.class);
margaretha563aabe2018-09-13 20:39:45 +020083 JsonNode node = JsonUtils.readTree(ent);
84 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020085 assertEquals(node.at("/@type").asText(), "koral:docGroup");
86 assertEquals(node.at("/operands/0/@type").asText(), "koral:doc");
87 assertEquals(node.at("/operands/1/@type").asText(), "koral:doc");
88 assertEquals(node.at("/operands/1/value").asText(), "GOE");
89 assertEquals(node.at("/operands/1/key").asText(), "corpusSigle");
margaretha563aabe2018-09-13 20:39:45 +020090 node = node.at("/operands/1/rewrites");
margaretha9e53bb22018-09-14 19:39:15 +020091 assertEquals(3, node.size());
Marc Kupietzd43a98d2023-09-22 17:11:46 +020092 assertEquals(node.at("/0/operation").asText(), "operation:deletion");
93 assertEquals(node.at("/1/operation").asText(), "operation:deletion");
94 assertEquals(node.at("/2/operation").asText(), "operation:insertion");
margaretha563aabe2018-09-13 20:39:45 +020095 }
96
97 @Test
margaretha35e1ca22023-11-16 22:00:01 +010098 public void testRewritePubAndSystemVCRef () throws KustvaktException {
99 Response response = target().path(API_VERSION).path("search")
100 .queryParam("q", "[orth=der]").queryParam("ql", "poliqarp")
101 .queryParam("cq", "referTo \"system/system-vc\"").request()
102 .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
103 .createBasicAuthorizationHeaderValue("user", "pass"))
104 .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32").get();
abcpro173fe8f22022-11-08 19:56:52 +0000105 String ent = response.readEntity(String.class);
margaretha563aabe2018-09-13 20:39:45 +0200106 JsonNode node = JsonUtils.readTree(ent);
107 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200108 assertEquals(node.at("/@type").asText(), "koral:docGroup");
109 assertEquals(node.at("/operands/0/@type").asText(), "koral:docGroup");
margaretha9e53bb22018-09-14 19:39:15 +0200110 node = node.at("/operands/1/rewrites");
111 assertEquals(3, node.size());
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200112 assertEquals(node.at("/0/operation").asText(), "operation:deletion");
113 assertEquals(node.at("/1/operation").asText(), "operation:deletion");
114 assertEquals(node.at("/2/operation").asText(), "operation:insertion");
margaretha9e53bb22018-09-14 19:39:15 +0200115 }
116
117 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100118 public void testRewriteWithDoryVCRef ()
119 throws KustvaktException, IOException, QueryException {
120 Response response = target().path(API_VERSION).path("search")
121 .queryParam("q", "Fisch").queryParam("ql", "poliqarp")
122 .queryParam("cq", "referTo \"dory/dory-vc\"").request()
123 .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
124 .createBasicAuthorizationHeaderValue("dory", "pass"))
125 .get();
abcpro173fe8f22022-11-08 19:56:52 +0000126 String ent = response.readEntity(String.class);
margaretha9e53bb22018-09-14 19:39:15 +0200127 JsonNode node = JsonUtils.readTree(ent);
128 node = node.at("/collection");
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200129 assertEquals(node.at("/@type").asText(), "koral:docGroup");
margaretha9e53bb22018-09-14 19:39:15 +0200130 node = node.at("/operands/1/rewrites");
131 assertEquals(3, node.size());
margaretha563aabe2018-09-13 20:39:45 +0200132 }
133}