blob: 38397f1bdcbfee91206c97a114fcfd29d9e03197 [file] [log] [blame]
margaretha398f4722019-01-09 19:07:20 +01001package de.ids_mannheim.korap.rewrite;
Michael Hanldaf86602016-05-12 14:31:52 +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.assertNotNull;
6import static org.junit.jupiter.api.Assertions.assertTrue;
margarethaf68daa62017-09-21 02:11:24 +02007
margarethaa9f52992025-06-24 11:50:15 +02008import java.util.HashMap;
9import java.util.Map;
10
Marc Kupietzd43a98d2023-09-22 17:11:46 +020011import org.junit.jupiter.api.Test;
margaretha5c67dd52018-12-18 17:27:05 +010012import org.springframework.beans.factory.annotation.Autowired;
margarethaa9f52992025-06-24 11:50:15 +020013
Michael Hanl1e18cb42015-08-06 20:57:35 +020014import com.fasterxml.jackson.databind.JsonNode;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020015
margaretha4fa4b062019-01-28 19:43:30 +010016import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
17import de.ids_mannheim.korap.config.Attributes;
Michael Hanl1e18cb42015-08-06 20:57:35 +020018import de.ids_mannheim.korap.config.KustvaktConfiguration;
margarethaa9f52992025-06-24 11:50:15 +020019import de.ids_mannheim.korap.config.TestBase;
Michael Hanldaf86602016-05-12 14:31:52 +020020import de.ids_mannheim.korap.exceptions.KustvaktException;
Michael Hanlbadd79c2015-06-19 07:41:03 +020021import de.ids_mannheim.korap.query.serialize.QuerySerializer;
margaretha5c67dd52018-12-18 17:27:05 +010022import de.ids_mannheim.korap.user.KorAPUser;
Michael Hanl1e18cb42015-08-06 20:57:35 +020023import de.ids_mannheim.korap.utils.JsonUtils;
margaretha96c309d2023-08-16 12:24:12 +020024import jakarta.ws.rs.client.Entity;
25import jakarta.ws.rs.core.MediaType;
26import jakarta.ws.rs.core.Response;
27import jakarta.ws.rs.core.Response.Status;
Michael Hanldaf86602016-05-12 14:31:52 +020028
Michael Hanl704211e2015-06-19 07:26:04 +020029/**
margaretha4fa4b062019-01-28 19:43:30 +010030 * @author hanl, margaretha
Michael Hanl704211e2015-06-19 07:26:04 +020031 * @date 18/06/2015
32 */
Marc Kupietzd43a98d2023-09-22 17:11:46 +020033// MH todo: check position and information of rewrites!
margarethaa9f52992025-06-24 11:50:15 +020034public class FoundryRewriteTest extends TestBase {
Michael Hanlbadd79c2015-06-19 07:41:03 +020035
Marc Kupietzd43a98d2023-09-22 17:11:46 +020036 // private static String simple_add_query = "[pos=ADJA]";
37 // private static String simple_rewrite_query = "[base=Haus]";
38 // private static String complex_rewrite_query = "<c=INFC>";
39 // private static String complex_rewrite_query2 = "[orth=laufe/i & base!=Lauf]";
40 // private static String complex_rewrite_query3 = "[(base=laufen | base=gehen) & tt/pos=VVFIN]";
margaretha5c67dd52018-12-18 17:27:05 +010041 @Autowired
42 public KustvaktConfiguration config;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020043
margaretha5c67dd52018-12-18 17:27:05 +010044 @Autowired
margaretha9b754d72025-04-01 12:46:18 +020045 public RewriteHandler rewriteHandler;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020046
margaretha4fa4b062019-01-28 19:43:30 +010047 @Autowired
48 private LayerMapper m;
Marc Kupietzd43a98d2023-09-22 17:11:46 +020049
margaretha4fa4b062019-01-28 19:43:30 +010050 @Test
margaretha35e1ca22023-11-16 22:00:01 +010051 public void testSearchRewriteFoundryWithUserSetting ()
52 throws KustvaktException {
margaretha4fa4b062019-01-28 19:43:30 +010053 // create user setting
54 String json = "{\"pos-foundry\":\"opennlp\"}";
55 String username = "foundryRewriteTest";
56 String pathUsername = "~" + username;
margaretha35e1ca22023-11-16 22:00:01 +010057 Response response = target().path(API_VERSION).path(pathUsername)
58 .path("setting").request()
59 .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
60 .createBasicAuthorizationHeaderValue(username, "pass"))
61 .put(Entity.json(json));
margaretha4fa4b062019-01-28 19:43:30 +010062 assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
margaretha4fa4b062019-01-28 19:43:30 +010063 // search
margaretha35e1ca22023-11-16 22:00:01 +010064 response = target().path(API_VERSION).path("search")
65 .queryParam("q", "[pos=ADJA]").queryParam("ql", "poliqarp")
66 .request()
67 .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
68 .createBasicAuthorizationHeaderValue(username, "pass"))
69 .accept(MediaType.APPLICATION_JSON).get();
Marc Kupietzd43a98d2023-09-22 17:11:46 +020070 assertEquals(Status.OK.getStatusCode(), response.getStatus());
abcpro173fe8f22022-11-08 19:56:52 +000071 String ent = response.readEntity(String.class);
margaretha4fa4b062019-01-28 19:43:30 +010072 JsonNode node = JsonUtils.readTree(ent);
Marc Kupietzd43a98d2023-09-22 17:11:46 +020073 assertEquals(node.at("/query/wrap/foundry").asText(), "opennlp");
margaretha35e1ca22023-11-16 22:00:01 +010074 assertEquals(node.at("/query/wrap/rewrites/0/scope").asText(),
75 "foundry");
margaretha4fa4b062019-01-28 19:43:30 +010076 }
77
78 @Test
margaretha35e1ca22023-11-16 22:00:01 +010079 public void testRewritePosFoundryWithUserSetting ()
80 throws KustvaktException {
margarethaa9f52992025-06-24 11:50:15 +020081 Map<String, Object> map = new HashMap<>();
82 map.put("pos-foundry", "corenlp");
83 map.put("lemma-foundry", "opennlp");
84 Response response = createUpdateDefaultSettings("bubbles", map);
85 assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
86
margaretha4fa4b062019-01-28 19:43:30 +010087 String username = "bubbles";
margaretha96c27762025-08-14 16:47:21 +020088 QuerySerializer s = new QuerySerializer(1.1);;
margaretha4fa4b062019-01-28 19:43:30 +010089 s.setQuery("[pos=ADJA]", "poliqarp");
margaretha9b754d72025-04-01 12:46:18 +020090 String result = rewriteHandler.processQuery(s.toJSON(),
margaretha35e1ca22023-11-16 22:00:01 +010091 new KorAPUser(username));
margaretha4fa4b062019-01-28 19:43:30 +010092 JsonNode node = JsonUtils.readTree(result);
Marc Kupietzd43a98d2023-09-22 17:11:46 +020093 assertEquals(node.at("/query/wrap/foundry").asText(), "corenlp");
margaretha35e1ca22023-11-16 22:00:01 +010094 assertEquals(node.at("/query/wrap/rewrites/0/scope").asText(),
95 "foundry");
margarethaa9f52992025-06-24 11:50:15 +020096
97 testRewriteLemmaFoundryWithUserSetting(username);
98 testDeleteSetting(username);
margaretha4fa4b062019-01-28 19:43:30 +010099 }
100
margarethaa9f52992025-06-24 11:50:15 +0200101 private void testRewriteLemmaFoundryWithUserSetting (String username)
margaretha35e1ca22023-11-16 22:00:01 +0100102 throws KustvaktException {
margaretha96c27762025-08-14 16:47:21 +0200103 QuerySerializer s = new QuerySerializer(1.1);;
margaretha4fa4b062019-01-28 19:43:30 +0100104 s.setQuery("[base=Haus]", "poliqarp");
margaretha9b754d72025-04-01 12:46:18 +0200105 String result = rewriteHandler.processQuery(s.toJSON(),
margaretha35e1ca22023-11-16 22:00:01 +0100106 new KorAPUser(username));
margaretha4fa4b062019-01-28 19:43:30 +0100107 JsonNode node = JsonUtils.readTree(result);
108 // EM: only for testing, in fact, opennlp lemma does not
109 // exist!
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200110 assertEquals(node.at("/query/wrap/foundry").asText(), "opennlp");
margaretha35e1ca22023-11-16 22:00:01 +0100111 assertEquals(node.at("/query/wrap/rewrites/0/scope").asText(),
112 "foundry");
margaretha4fa4b062019-01-28 19:43:30 +0100113 }
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200114
Michael Hanlbadd79c2015-06-19 07:41:03 +0200115 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100116 public void testDefaultLayerMapperThrowsNoException () {
Michael Hanldaf86602016-05-12 14:31:52 +0200117 assertEquals(config.getDefault_lemma(), m.findFoundry("lemma"));
118 assertEquals(config.getDefault_pos(), m.findFoundry("pos"));
margaretha798e8bd2019-02-06 15:48:58 +0100119 assertEquals(config.getDefault_orthography(), m.findFoundry("surface"));
Michael Hanldaf86602016-05-12 14:31:52 +0200120 assertEquals(config.getDefault_dep(), m.findFoundry("d"));
121 assertEquals(config.getDefault_const(), m.findFoundry("c"));
Michael Hanlbadd79c2015-06-19 07:41:03 +0200122 }
123
Michael Hanl8abaf9e2016-05-23 16:46:35 +0200124 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100125 public void testDefaultFoundryInjectLemmaThrowsNoError ()
126 throws KustvaktException {
margaretha96c27762025-08-14 16:47:21 +0200127 QuerySerializer s = new QuerySerializer(1.1);;
Michael Hanldaf86602016-05-12 14:31:52 +0200128 s.setQuery("[base=Haus]", "poliqarp");
margaretha9b754d72025-04-01 12:46:18 +0200129 String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
Michael Hanldaf86602016-05-12 14:31:52 +0200130 JsonNode node = JsonUtils.readTree(result);
Michael Hanldaf86602016-05-12 14:31:52 +0200131 assertNotNull(node);
132 assertFalse(node.at("/query/wrap/foundry").isMissingNode());
margaretha35e1ca22023-11-16 22:00:01 +0100133 assertEquals(config.getDefault_lemma(),
134 node.at("/query/wrap/foundry").asText());
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200135 assertEquals(node.at("/query/wrap/layer").asText(), "lemma");
Michael Hanldaf86602016-05-12 14:31:52 +0200136 assertFalse(node.at("/query/wrap/rewrites").isMissingNode());
margaretha35e1ca22023-11-16 22:00:01 +0100137 assertEquals(node.at("/query/wrap/rewrites/0/@type").asText(),
138 "koral:rewrite");
Michael Hanldaf86602016-05-12 14:31:52 +0200139 }
140
Michael Hanl8abaf9e2016-05-23 16:46:35 +0200141 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100142 public void testDefaultFoundryInjectPOSNoErrors ()
143 throws KustvaktException {
margaretha96c27762025-08-14 16:47:21 +0200144 QuerySerializer s = new QuerySerializer(1.1);;
Michael Hanl1e18cb42015-08-06 20:57:35 +0200145 s.setQuery("[pos=ADJA]", "poliqarp");
margaretha9b754d72025-04-01 12:46:18 +0200146 String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
Michael Hanl1e18cb42015-08-06 20:57:35 +0200147 JsonNode node = JsonUtils.readTree(result);
Michael Hanldaf86602016-05-12 14:31:52 +0200148 assertNotNull(node);
149 assertFalse(node.at("/query/wrap/foundry").isMissingNode());
margaretha35e1ca22023-11-16 22:00:01 +0100150 assertEquals(config.getDefault_pos(),
151 node.at("/query/wrap/foundry").asText());
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200152 assertEquals(node.at("/query/wrap/layer").asText(), "pos");
Michael Hanldaf86602016-05-12 14:31:52 +0200153 assertFalse(node.at("/query/wrap/rewrites").isMissingNode());
margaretha35e1ca22023-11-16 22:00:01 +0100154 assertEquals(node.at("/query/wrap/rewrites/0/@type").asText(),
155 "koral:rewrite");
Michael Hanldaf86602016-05-12 14:31:52 +0200156 }
Michael Hanldaf86602016-05-12 14:31:52 +0200157
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200158 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100159 public void testFoundryInjectJoinedQueryNoErrors ()
160 throws KustvaktException {
margaretha96c27762025-08-14 16:47:21 +0200161 QuerySerializer s = new QuerySerializer(1.1);;
Michael Hanl1e18cb42015-08-06 20:57:35 +0200162 s.setQuery("[orth=laufe/i & base!=Lauf]", "poliqarp");
margaretha9b754d72025-04-01 12:46:18 +0200163 String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
Michael Hanl1e18cb42015-08-06 20:57:35 +0200164 JsonNode node = JsonUtils.readTree(result);
Michael Hanldaf86602016-05-12 14:31:52 +0200165 assertNotNull(node);
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200166 assertEquals(node.at("/query/wrap/@type").asText(), "koral:termGroup");
Michael Hanldaf86602016-05-12 14:31:52 +0200167 assertFalse(node.at("/query/wrap/operands/0/foundry").isMissingNode());
168 assertFalse(node.at("/query/wrap/operands/0/rewrites").isMissingNode());
169 assertFalse(node.at("/query/wrap/operands/1/foundry").isMissingNode());
170 assertFalse(node.at("/query/wrap/operands/1/rewrites").isMissingNode());
Michael Hanl1e18cb42015-08-06 20:57:35 +0200171 }
172
173 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100174 public void testFoundryInjectGroupedQueryNoErrors ()
175 throws KustvaktException {
margaretha96c27762025-08-14 16:47:21 +0200176 QuerySerializer s = new QuerySerializer(1.1);;
Michael Hanlc0ed00f2016-06-23 14:33:10 +0200177 s.setQuery("[(base=laufen | tt/pos=VVFIN)]", "poliqarp");
margaretha9b754d72025-04-01 12:46:18 +0200178 String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
Michael Hanl1e18cb42015-08-06 20:57:35 +0200179 JsonNode node = JsonUtils.readTree(result);
Michael Hanlc0ed00f2016-06-23 14:33:10 +0200180 assertNotNull(node);
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200181 assertEquals(node.at("/query/wrap/@type").asText(), "koral:termGroup");
182 assertFalse(node.at("/query/wrap/operands/0/foundry").isMissingNode());
183 assertFalse(node.at("/query/wrap/operands/0/rewrites").isMissingNode());
Michael Hanlc0ed00f2016-06-23 14:33:10 +0200184 assertFalse(node.at("/query/wrap/operands/1/foundry").isMissingNode());
185 assertTrue(node.at("/query/wrap/operands/1/rewrites").isMissingNode());
186 }
Michael Hanl1e18cb42015-08-06 20:57:35 +0200187
Michael Hanlc0ed00f2016-06-23 14:33:10 +0200188 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100189 public void testFoundryBaseRewrite () throws KustvaktException {
margaretha96c27762025-08-14 16:47:21 +0200190 QuerySerializer s = new QuerySerializer(1.1);;
Michael Hanlc0ed00f2016-06-23 14:33:10 +0200191 s.setQuery("[orth=laufen]", "poliqarp");
margaretha9b754d72025-04-01 12:46:18 +0200192 String result = rewriteHandler.processQuery(s.toJSON(), new KorAPUser("test"));
Michael Hanlc0ed00f2016-06-23 14:33:10 +0200193 JsonNode node = JsonUtils.readTree(result);
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200194 assertEquals(node.at("/query/wrap/@type").asText(), "koral:term");
195 assertFalse(node.at("/query/wrap/foundry").isMissingNode());
196 assertFalse(node.at("/query/wrap/rewrites").isMissingNode());
Michael Hanl1e18cb42015-08-06 20:57:35 +0200197 }
Michael Hanl704211e2015-06-19 07:26:04 +0200198}