blob: 5517c759db63000a13e9f7217e5dd6fa5cec7bef [file] [log] [blame]
margaretha2544cdf2019-07-08 11:39:43 +02001package de.ids_mannheim.korap.web.controller;
2
Marc Kupietzd43a98d2023-09-22 17:11:46 +02003import static org.junit.jupiter.api.Assertions.assertEquals;
margaretha8489f862025-02-05 11:32:16 +01004import static org.junit.jupiter.api.Assertions.assertFalse;
Marc Kupietzd43a98d2023-09-22 17:11:46 +02005import static org.junit.jupiter.api.Assertions.assertTrue;
margaretha2544cdf2019-07-08 11:39:43 +02006
Marc Kupietzd43a98d2023-09-22 17:11:46 +02007import org.junit.jupiter.api.Disabled;
8import org.junit.jupiter.api.Test;
margaretha8489f862025-02-05 11:32:16 +01009
margaretha2544cdf2019-07-08 11:39:43 +020010import com.fasterxml.jackson.databind.JsonNode;
11import com.google.common.net.HttpHeaders;
margaretha2544cdf2019-07-08 11:39:43 +020012
13import de.ids_mannheim.korap.config.SpringJerseyTest;
14import de.ids_mannheim.korap.exceptions.KustvaktException;
15import de.ids_mannheim.korap.exceptions.StatusCodes;
16import de.ids_mannheim.korap.query.serialize.MetaQueryBuilder;
17import de.ids_mannheim.korap.query.serialize.QuerySerializer;
18import de.ids_mannheim.korap.utils.JsonUtils;
margaretha8489f862025-02-05 11:32:16 +010019import jakarta.ws.rs.client.Entity;
20import jakarta.ws.rs.core.Response;
21import jakarta.ws.rs.core.Response.Status;
margaretha2544cdf2019-07-08 11:39:43 +020022
margaretha9c6493e2022-01-25 11:54:29 +010023public class SearchPublicMetadataTest extends SpringJerseyTest {
margaretha2544cdf2019-07-08 11:39:43 +020024
25 @Test
margaretha35e1ca22023-11-16 22:00:01 +010026 public void testSearchPublicMetadata () throws KustvaktException {
27 Response response = target().path(API_VERSION).path("search")
28 .queryParam("q", "Sonne").queryParam("ql", "poliqarp")
29 .queryParam("access-rewrite-disabled", "true").request().get();
Marc Kupietzd43a98d2023-09-22 17:11:46 +020030 assertEquals(Status.OK.getStatusCode(), response.getStatus());
abcpro173fe8f22022-11-08 19:56:52 +000031 String entity = response.readEntity(String.class);
margaretha2544cdf2019-07-08 11:39:43 +020032 JsonNode node = JsonUtils.readTree(entity);
margaretha8489f862025-02-05 11:32:16 +010033 assertTrue(node.at("/meta/snippet").isMissingNode());
34 assertEquals(allCorpusAccess,
35 node.at("/collection/rewrites/0/_comment").asText());
36 assertFalse(node.at("/matches/0/snippet").asBoolean());
37 assertFalse(node.at("/matches/0/tokens").asBoolean());
margaretha2544cdf2019-07-08 11:39:43 +020038 }
39
40 @Test
margaretha35e1ca22023-11-16 22:00:01 +010041 public void testSearchPublicMetadataExtern () throws KustvaktException {
42 Response response = target().path(API_VERSION).path("search")
43 .queryParam("q", "Sonne").queryParam("ql", "poliqarp")
44 .queryParam("access-rewrite-disabled", "true").request()
45 .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32").get();
Marc Kupietzd43a98d2023-09-22 17:11:46 +020046 assertEquals(Status.OK.getStatusCode(), response.getStatus());
abcpro173fe8f22022-11-08 19:56:52 +000047 String entity = response.readEntity(String.class);
margaretha2544cdf2019-07-08 11:39:43 +020048 JsonNode node = JsonUtils.readTree(entity);
margaretha8489f862025-02-05 11:32:16 +010049 assertEquals("All corpus access policy has been added.",
50 node.at("/collection/rewrites/0/_comment").asText());
margaretha2544cdf2019-07-08 11:39:43 +020051 assertTrue(node.at("/matches/0/snippet").isMissingNode());
52 }
Marc Kupietzd43a98d2023-09-22 17:11:46 +020053
margaretha85967642019-11-13 13:35:33 +010054 @Test
margaretha35e1ca22023-11-16 22:00:01 +010055 public void testSearchPublicMetadataWithCustomFields ()
56 throws KustvaktException {
57 Response response = target().path(API_VERSION).path("search")
58 .queryParam("q", "Sonne").queryParam("ql", "poliqarp")
59 .queryParam("fields", "author,title")
60 .queryParam("access-rewrite-disabled", "true").request().get();
Marc Kupietzd43a98d2023-09-22 17:11:46 +020061 assertEquals(Status.OK.getStatusCode(), response.getStatus());
abcpro173fe8f22022-11-08 19:56:52 +000062 String entity = response.readEntity(String.class);
margaretha85967642019-11-13 13:35:33 +010063 JsonNode node = JsonUtils.readTree(entity);
margaretha8489f862025-02-05 11:32:16 +010064 assertEquals(allCorpusAccess,
65 node.at("/collection/rewrites/0/_comment").asText());
margaretha85967642019-11-13 13:35:33 +010066 assertTrue(node.at("/matches/0/snippet").isMissingNode());
margaretha35e1ca22023-11-16 22:00:01 +010067 assertEquals(node.at("/matches/0/author").asText(),
68 "Goethe, Johann Wolfgang von");
69 assertEquals(node.at("/matches/0/title").asText(),
70 "Italienische Reise");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020071 // assertEquals(3, node.at("/matches/0").size());
margaretha85967642019-11-13 13:35:33 +010072 }
Marc Kupietzd43a98d2023-09-22 17:11:46 +020073
margaretha85967642019-11-13 13:35:33 +010074 @Test
margaretha35e1ca22023-11-16 22:00:01 +010075 public void testSearchPublicMetadataWithNonPublicField ()
76 throws KustvaktException {
77 Response response = target().path(API_VERSION).path("search")
78 .queryParam("q", "Sonne").queryParam("ql", "poliqarp")
79 .queryParam("fields", "author,title,snippet")
80 .queryParam("access-rewrite-disabled", "true").request().get();
Marc Kupietzd43a98d2023-09-22 17:11:46 +020081 assertEquals(Status.OK.getStatusCode(), response.getStatus());
abcpro173fe8f22022-11-08 19:56:52 +000082 String entity = response.readEntity(String.class);
margaretha85967642019-11-13 13:35:33 +010083 JsonNode node = JsonUtils.readTree(entity);
margaretha35e1ca22023-11-16 22:00:01 +010084 assertEquals(StatusCodes.NON_PUBLIC_FIELD_IGNORED,
85 node.at("/warnings/0/0").asInt());
86 assertEquals(node.at("/warnings/0/1").asText(),
87 "The requested non public fields are ignored");
Marc Kupietzd43a98d2023-09-22 17:11:46 +020088 assertEquals(node.at("/warnings/0/2").asText(), "snippet");
margaretha85967642019-11-13 13:35:33 +010089 }
margaretha2544cdf2019-07-08 11:39:43 +020090
Marc Kupietzd43a98d2023-09-22 17:11:46 +020091 // EM: The API is disabled
92 @Disabled
margaretha2544cdf2019-07-08 11:39:43 +020093 @Test
margaretha35e1ca22023-11-16 22:00:01 +010094 public void testSearchPostPublicMetadata () throws KustvaktException {
margaretha2544cdf2019-07-08 11:39:43 +020095 QuerySerializer s = new QuerySerializer();
96 s.setQuery("[orth=der]", "poliqarp");
97 s.setCollection("corpusSigle=GOE");
98 s.setQuery("Wasser", "poliqarp");
margaretha2544cdf2019-07-08 11:39:43 +020099 MetaQueryBuilder meta = new MetaQueryBuilder();
100 meta.addEntry("snippets", "true");
101 s.setMeta(meta);
margaretha35e1ca22023-11-16 22:00:01 +0100102 Response response = target().path(API_VERSION).path("search").request()
103 .post(Entity.json(s.toJSON()));
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200104 assertEquals(Status.OK.getStatusCode(), response.getStatus());
abcpro173fe8f22022-11-08 19:56:52 +0000105 String ent = response.readEntity(String.class);
margaretha2544cdf2019-07-08 11:39:43 +0200106 JsonNode node = JsonUtils.readTree(ent);
margaretha8489f862025-02-05 11:32:16 +0100107 assertEquals(allCorpusAccess,
108 node.at("/collection/rewrites/0/_comment").asText());
margaretha2544cdf2019-07-08 11:39:43 +0200109 assertTrue(node.at("/matches/0/snippet").isMissingNode());
110 }
margaretha2544cdf2019-07-08 11:39:43 +0200111
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200112 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100113 public void testSearchPublicMetadataWithSystemVC ()
114 throws KustvaktException {
115 Response response = target().path(API_VERSION).path("search")
116 .queryParam("q", "Sonne").queryParam("ql", "poliqarp")
117 .queryParam("cq", "referTo system-vc")
118 .queryParam("access-rewrite-disabled", "true").request().get();
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200119 assertEquals(Status.OK.getStatusCode(), response.getStatus());
abcpro173fe8f22022-11-08 19:56:52 +0000120 String entity = response.readEntity(String.class);
margaretha45a65092025-03-24 09:20:02 +0100121 JsonNode node = JsonUtils.readTree(entity).at("/collection");
122 assertEquals("operation:and",node.at("/operation").asText());
123
124 assertEquals("operation:override", node.at("/rewrites/0/operation").asText());
margarethad59b34d2024-12-03 10:31:30 +0100125 assertEquals("koral:docGroupRef",
margaretha4d06c122025-03-05 10:43:16 +0100126 node.at("/rewrites/0/original/@type").asText());
127 assertEquals("system-vc", node.at("/rewrites/0/original/ref").asText());
margaretha45a65092025-03-24 09:20:02 +0100128
129 node = node.at("/operands/1");
130 assertEquals("koral:docGroupRef", node.at("/@type").asText());
131 assertEquals("system-vc", node.at("/ref").asText());
132// assertEquals(node.at("/value").asText(), "GOE");
133// assertEquals(node.at("/match").asText(), "match:eq");
134// assertEquals(node.at("/key").asText(), "corpusSigle");
135
margaretha2544cdf2019-07-08 11:39:43 +0200136 }
137
138 @Test
margaretha35e1ca22023-11-16 22:00:01 +0100139 public void testSearchPublicMetadataWithPrivateVC ()
140 throws KustvaktException {
141 Response response = target().path(API_VERSION).path("search")
142 .queryParam("q", "Sonne").queryParam("ql", "poliqarp")
143 .queryParam("cq", "referTo \"dory/dory-vc\"")
144 .queryParam("access-rewrite-disabled", "true").request().get();
abcpro173fe8f22022-11-08 19:56:52 +0000145 String entity = response.readEntity(String.class);
margaretha2544cdf2019-07-08 11:39:43 +0200146 JsonNode node = JsonUtils.readTree(entity);
margaretha35e1ca22023-11-16 22:00:01 +0100147 assertEquals(StatusCodes.AUTHORIZATION_FAILED,
148 node.at("/errors/0/0").asInt());
Marc Kupietzd43a98d2023-09-22 17:11:46 +0200149 assertEquals(node.at("/errors/0/2").asText(), "guest");
margaretha2544cdf2019-07-08 11:39:43 +0200150 }
151}