| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 1 | package de.ids_mannheim.korap.rewrite; |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 2 | |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 3 | import static org.junit.Assert.assertEquals; |
| 4 | import static org.junit.Assert.assertFalse; |
| 5 | import static org.junit.Assert.assertNotNull; |
| 6 | import static org.junit.Assert.assertTrue; |
| 7 | |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 8 | import javax.ws.rs.core.MediaType; |
| 9 | |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 10 | import org.junit.Test; |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 11 | import org.springframework.beans.factory.annotation.Autowired; |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 12 | |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 13 | import com.fasterxml.jackson.databind.JsonNode; |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 14 | import com.sun.jersey.api.client.ClientResponse; |
| 15 | import com.sun.jersey.api.client.ClientResponse.Status; |
| margaretha | f68daa6 | 2017-09-21 02:11:24 +0200 | [diff] [blame] | 16 | |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 17 | import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler; |
| 18 | import de.ids_mannheim.korap.config.Attributes; |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 19 | import de.ids_mannheim.korap.config.KustvaktConfiguration; |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 20 | import de.ids_mannheim.korap.config.SpringJerseyTest; |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 21 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 22 | import de.ids_mannheim.korap.query.serialize.QuerySerializer; |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 23 | import de.ids_mannheim.korap.user.KorAPUser; |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 24 | import de.ids_mannheim.korap.utils.JsonUtils; |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 25 | |
| Michael Hanl | 704211e | 2015-06-19 07:26:04 +0200 | [diff] [blame] | 26 | /** |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 27 | * @author hanl, margaretha |
| Michael Hanl | 704211e | 2015-06-19 07:26:04 +0200 | [diff] [blame] | 28 | * @date 18/06/2015 |
| 29 | */ |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 30 | //MH todo: check position and information of rewrites! |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 31 | public class FoundryRewriteTest extends SpringJerseyTest { |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 32 | |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 33 | // private static String simple_add_query = "[pos=ADJA]"; |
| 34 | // private static String simple_rewrite_query = "[base=Haus]"; |
| 35 | // private static String complex_rewrite_query = "<c=INFC>"; |
| 36 | // private static String complex_rewrite_query2 = "[orth=laufe/i & base!=Lauf]"; |
| 37 | // private static String complex_rewrite_query3 = "[(base=laufen | base=gehen) & tt/pos=VVFIN]"; |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 38 | |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 39 | @Autowired |
| 40 | public KustvaktConfiguration config; |
| 41 | @Autowired |
| 42 | public RewriteHandler handler; |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 43 | @Autowired |
| 44 | private LayerMapper m; |
| 45 | |
| 46 | @Test |
| 47 | public void testSearchRewriteFoundryWithUserSetting () throws KustvaktException { |
| 48 | // create user setting |
| 49 | String json = "{\"pos-foundry\":\"opennlp\"}"; |
| 50 | String username = "foundryRewriteTest"; |
| 51 | String pathUsername = "~" + username; |
| 52 | ClientResponse response = resource().path(API_VERSION) |
| 53 | .path(pathUsername).path("setting") |
| 54 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 55 | .createBasicAuthorizationHeaderValue(username, "pass")) |
| 56 | .type(MediaType.APPLICATION_JSON).entity(json) |
| 57 | .put(ClientResponse.class); |
| 58 | |
| 59 | assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); |
| 60 | |
| 61 | // search |
| 62 | response = resource().path(API_VERSION).path("search") |
| 63 | .queryParam("q", "[pos=ADJA]").queryParam("ql", "poliqarp") |
| 64 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 65 | .createBasicAuthorizationHeaderValue(username, "pass")) |
| 66 | .accept(MediaType.APPLICATION_JSON).get(ClientResponse.class); |
| 67 | |
| 68 | assertEquals(ClientResponse.Status.OK.getStatusCode(), |
| 69 | response.getStatus()); |
| 70 | String ent = response.getEntity(String.class); |
| 71 | JsonNode node = JsonUtils.readTree(ent); |
| 72 | assertEquals("opennlp", node.at("/query/wrap/foundry").asText()); |
| 73 | assertEquals("foundry", |
| 74 | node.at("/query/wrap/rewrites/0/scope").asText()); |
| 75 | |
| 76 | } |
| 77 | |
| 78 | @Test |
| 79 | public void testRewritePosFoundryWithUserSetting () |
| 80 | throws KustvaktException { |
| 81 | // EM: see |
| 82 | // full/src/main/resources/db/insert/V3.6__insert_default_settings.sql |
| 83 | |
| 84 | String username = "bubbles"; |
| 85 | QuerySerializer s = new QuerySerializer(); |
| 86 | s.setQuery("[pos=ADJA]", "poliqarp"); |
| 87 | String result = |
| 88 | handler.processQuery(s.toJSON(), new KorAPUser(username)); |
| 89 | JsonNode node = JsonUtils.readTree(result); |
| 90 | assertEquals("corenlp", node.at("/query/wrap/foundry").asText()); |
| 91 | assertEquals("foundry", |
| 92 | node.at("/query/wrap/rewrites/0/scope").asText()); |
| 93 | |
| 94 | } |
| 95 | |
| 96 | @Test |
| 97 | public void testRewriteLemmaFoundryWithUserSetting () |
| 98 | throws KustvaktException { |
| 99 | String username = "bubbles"; |
| 100 | QuerySerializer s = new QuerySerializer(); |
| 101 | s.setQuery("[base=Haus]", "poliqarp"); |
| 102 | String result = |
| 103 | handler.processQuery(s.toJSON(), new KorAPUser(username)); |
| 104 | JsonNode node = JsonUtils.readTree(result); |
| 105 | // EM: only for testing, in fact, opennlp lemma does not |
| 106 | // exist! |
| 107 | assertEquals("opennlp", node.at("/query/wrap/foundry").asText()); |
| 108 | assertEquals("foundry", |
| 109 | node.at("/query/wrap/rewrites/0/scope").asText()); |
| 110 | } |
| 111 | |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 112 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 113 | @Test |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 114 | public void testDefaultLayerMapperThrowsNoException () { |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 115 | assertEquals(config.getDefault_lemma(), m.findFoundry("lemma")); |
| 116 | assertEquals(config.getDefault_pos(), m.findFoundry("pos")); |
| margaretha | 798e8bd | 2019-02-06 15:48:58 +0100 | [diff] [blame] | 117 | assertEquals(config.getDefault_orthography(), m.findFoundry("surface")); |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 118 | assertEquals(config.getDefault_dep(), m.findFoundry("d")); |
| 119 | assertEquals(config.getDefault_const(), m.findFoundry("c")); |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 120 | } |
| 121 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 122 | @Test |
| Michael Hanl | f8fcc7a | 2016-06-03 17:41:07 +0200 | [diff] [blame] | 123 | public void testDefaultFoundryInjectLemmaThrowsNoError () |
| 124 | throws KustvaktException { |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 125 | |
| Michael Hanl | badd79c | 2015-06-19 07:41:03 +0200 | [diff] [blame] | 126 | QuerySerializer s = new QuerySerializer(); |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 127 | s.setQuery("[base=Haus]", "poliqarp"); |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 128 | String result = handler.processQuery(s.toJSON(), new KorAPUser("test")); |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 129 | JsonNode node = JsonUtils.readTree(result); |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 130 | assertNotNull(node); |
| 131 | assertFalse(node.at("/query/wrap/foundry").isMissingNode()); |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 132 | assertEquals(config.getDefault_lemma(), node.at("/query/wrap/foundry") |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 133 | .asText()); |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 134 | assertEquals("lemma", node.at("/query/wrap/layer").asText()); |
| 135 | assertFalse(node.at("/query/wrap/rewrites").isMissingNode()); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 136 | assertEquals("koral:rewrite", node.at("/query/wrap/rewrites/0/@type") |
| 137 | .asText()); |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 138 | } |
| 139 | |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 140 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 141 | @Test |
| Michael Hanl | f8fcc7a | 2016-06-03 17:41:07 +0200 | [diff] [blame] | 142 | public void testDefaultFoundryInjectPOSNoErrors () throws KustvaktException { |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 143 | |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 144 | QuerySerializer s = new QuerySerializer(); |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 145 | s.setQuery("[pos=ADJA]", "poliqarp"); |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 146 | String result = handler.processQuery(s.toJSON(), new KorAPUser("test")); |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 147 | JsonNode node = JsonUtils.readTree(result); |
| Michael Hanl | 0f6ffd7 | 2015-08-27 19:23:15 +0200 | [diff] [blame] | 148 | |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 149 | assertNotNull(node); |
| 150 | assertFalse(node.at("/query/wrap/foundry").isMissingNode()); |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 151 | assertEquals(config.getDefault_pos(), node.at("/query/wrap/foundry") |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 152 | .asText()); |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 153 | assertEquals("pos", node.at("/query/wrap/layer").asText()); |
| 154 | assertFalse(node.at("/query/wrap/rewrites").isMissingNode()); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 155 | assertEquals("koral:rewrite", node.at("/query/wrap/rewrites/0/@type") |
| 156 | .asText()); |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 157 | |
| 158 | } |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 159 | |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 160 | @Test |
| Michael Hanl | f8fcc7a | 2016-06-03 17:41:07 +0200 | [diff] [blame] | 161 | public void testFoundryInjectJoinedQueryNoErrors () |
| 162 | throws KustvaktException { |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 163 | |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 164 | QuerySerializer s = new QuerySerializer(); |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 165 | s.setQuery("[orth=laufe/i & base!=Lauf]", "poliqarp"); |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 166 | String result = handler.processQuery(s.toJSON(), new KorAPUser("test")); |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 167 | JsonNode node = JsonUtils.readTree(result); |
| Michael Hanl | 0f6ffd7 | 2015-08-27 19:23:15 +0200 | [diff] [blame] | 168 | |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 169 | assertNotNull(node); |
| 170 | assertEquals("koral:termGroup", node.at("/query/wrap/@type").asText()); |
| 171 | assertFalse(node.at("/query/wrap/operands/0/foundry").isMissingNode()); |
| 172 | assertFalse(node.at("/query/wrap/operands/0/rewrites").isMissingNode()); |
| 173 | assertFalse(node.at("/query/wrap/operands/1/foundry").isMissingNode()); |
| 174 | assertFalse(node.at("/query/wrap/operands/1/rewrites").isMissingNode()); |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 175 | } |
| 176 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 177 | |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 178 | @Test |
| Michael Hanl | f8fcc7a | 2016-06-03 17:41:07 +0200 | [diff] [blame] | 179 | public void testFoundryInjectGroupedQueryNoErrors () |
| 180 | throws KustvaktException { |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 181 | QuerySerializer s = new QuerySerializer(); |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 182 | s.setQuery("[(base=laufen | tt/pos=VVFIN)]", "poliqarp"); |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 183 | String result = handler.processQuery(s.toJSON(), new KorAPUser("test")); |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 184 | JsonNode node = JsonUtils.readTree(result); |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 185 | |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 186 | assertNotNull(node); |
| 187 | assertEquals("koral:termGroup", node.at("/query/wrap/@type").asText()); |
| 188 | assertFalse(node.at("/query/wrap/operands/0/foundry") |
| 189 | .isMissingNode()); |
| 190 | assertFalse(node.at("/query/wrap/operands/0/rewrites") |
| 191 | .isMissingNode()); |
| 192 | assertFalse(node.at("/query/wrap/operands/1/foundry").isMissingNode()); |
| 193 | assertTrue(node.at("/query/wrap/operands/1/rewrites").isMissingNode()); |
| 194 | } |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 195 | |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 196 | @Test |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 197 | public void testFoundryBaseRewrite() throws KustvaktException { |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 198 | QuerySerializer s = new QuerySerializer(); |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 199 | s.setQuery("[orth=laufen]", "poliqarp"); |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 200 | String result = handler.processQuery(s.toJSON(), new KorAPUser("test")); |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 201 | JsonNode node = JsonUtils.readTree(result); |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 202 | |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 203 | assertEquals("koral:term", node.at("/query/wrap/@type").asText()); |
| 204 | assertFalse(node.at("/query/wrap/foundry") |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 205 | .isMissingNode()); |
| margaretha | 5c67dd5 | 2018-12-18 17:27:05 +0100 | [diff] [blame] | 206 | assertFalse(node.at("/query/wrap/rewrites") |
| Michael Hanl | daf8660 | 2016-05-12 14:31:52 +0200 | [diff] [blame] | 207 | .isMissingNode()); |
| Michael Hanl | 1e18cb4 | 2015-08-06 20:57:35 +0200 | [diff] [blame] | 208 | } |
| 209 | |
| Michael Hanl | 704211e | 2015-06-19 07:26:04 +0200 | [diff] [blame] | 210 | } |