| margaretha | 541b8cc | 2018-01-10 13:02:46 +0100 | [diff] [blame] | 1 | package de.ids_mannheim.korap.web.controller; |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 2 | |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| 4 | import static org.junit.jupiter.api.Assertions.assertNotNull; |
| 5 | import static org.junit.jupiter.api.Assertions.assertTrue; |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 6 | |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 7 | import org.junit.jupiter.api.Test; |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 8 | import com.fasterxml.jackson.databind.JsonNode; |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 9 | import com.google.common.net.HttpHeaders; |
| margaretha | 96c309d | 2023-08-16 12:24:12 +0200 | [diff] [blame] | 10 | import jakarta.ws.rs.core.Response; |
| 11 | import jakarta.ws.rs.core.Response.Status; |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 12 | |
| margaretha | 56e8e55 | 2017-12-05 16:31:21 +0100 | [diff] [blame] | 13 | import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler; |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 14 | import de.ids_mannheim.korap.config.Attributes; |
| margaretha | ee0cbfe | 2018-08-28 17:47:14 +0200 | [diff] [blame] | 15 | import de.ids_mannheim.korap.config.SpringJerseyTest; |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 16 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 17 | import de.ids_mannheim.korap.exceptions.StatusCodes; |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 18 | import de.ids_mannheim.korap.utils.JsonUtils; |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 19 | |
| margaretha | ee0cbfe | 2018-08-28 17:47:14 +0200 | [diff] [blame] | 20 | public class MatchInfoControllerTest extends SpringJerseyTest { |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 21 | |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 22 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 23 | public void testGetMatchInfoPublicCorpus () throws KustvaktException { |
| 24 | Response response = target().path(API_VERSION).path("corpus") |
| 25 | .path("GOE").path("AGA").path("01784").path("p36-100") |
| margaretha | d709be5 | 2024-06-05 11:31:41 +0200 | [diff] [blame] | 26 | .queryParam("foundry", "*").request().get(); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 27 | assertEquals(Status.OK.getStatusCode(), response.getStatus()); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 28 | String entity = response.readEntity(String.class); |
| margaretha | 65b6714 | 2017-05-29 16:23:16 +0200 | [diff] [blame] | 29 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 65b6714 | 2017-05-29 16:23:16 +0200 | [diff] [blame] | 30 | assertNotNull(node); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 31 | assertEquals(node.at("/textSigle").asText(), "GOE/AGA/01784"); |
| 32 | assertEquals(node.at("/title").asText(), "Belagerung von Mainz"); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 33 | assertEquals(node.at("/author").asText(), |
| 34 | "Goethe, Johann Wolfgang von"); |
| 35 | assertTrue(node.at("/snippet").asText() |
| 36 | .startsWith("<span class=\"context-left\"></span>" |
| 37 | + "<span class=\"match\">")); |
| margaretha | 65b6714 | 2017-05-29 16:23:16 +0200 | [diff] [blame] | 38 | } |
| margaretha | 064eb6f | 2018-07-10 18:33:01 +0200 | [diff] [blame] | 39 | |
| margaretha | 65b6714 | 2017-05-29 16:23:16 +0200 | [diff] [blame] | 40 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 41 | public void testGetMatchInfoNotAllowed () throws KustvaktException { |
| 42 | Response response = target().path(API_VERSION).path("corpus") |
| 43 | .path("GOE").path("AGI").path("04846").path("p36875-36876") |
| margaretha | d709be5 | 2024-06-05 11:31:41 +0200 | [diff] [blame] | 44 | .queryParam("foundry", "*").request().get(); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 45 | assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus()); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 46 | String entity = response.readEntity(String.class); |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 47 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 48 | assertEquals(StatusCodes.AUTHORIZATION_FAILED, |
| 49 | node.at("/errors/0/0").asInt()); |
| 50 | assertEquals( |
| 51 | "Retrieving resource with ID " |
| 52 | + "match-GOE/AGI/04846-p36875-36876 is not allowed.", |
| 53 | node.at("/errors/0/1").asText()); |
| margaretha | aec93f7 | 2017-05-29 16:51:41 +0200 | [diff] [blame] | 54 | assertTrue(node.at("/snippet").isMissingNode()); |
| margaretha | 65b6714 | 2017-05-29 16:23:16 +0200 | [diff] [blame] | 55 | } |
| margaretha | c7f8f80 | 2024-06-05 12:52:45 +0200 | [diff] [blame] | 56 | |
| 57 | @Test |
| 58 | public void testUsingDeprecatedMatchInfoService () throws KustvaktException { |
| 59 | Response response = target().path(API_VERSION).path("corpus") |
| 60 | .path("GOE").path("AGA").path("01784").path("p36-100") |
| 61 | .path("matchInfo") |
| 62 | .queryParam("foundry", "*").request().get(); |
| 63 | assertEquals(Status.OK.getStatusCode(), response.getStatus()); |
| 64 | String entity = response.readEntity(String.class); |
| 65 | JsonNode node = JsonUtils.readTree(entity); |
| 66 | assertEquals(StatusCodes.DEPRECATED, |
| 67 | node.at("/warnings/0/0").asInt()); |
| 68 | assertEquals("This service is deprecated. Please use the following " |
| 69 | + "service URL instead: {version}/corpus/{corpusId}/{docId}/" |
| 70 | + "{textId}/{matchId}", |
| 71 | node.at("/warnings/0/1").asText()); |
| 72 | } |
| margaretha | 65b6714 | 2017-05-29 16:23:16 +0200 | [diff] [blame] | 73 | |
| 74 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 75 | public void testGetMatchInfoWithAuthentication () throws KustvaktException { |
| 76 | Response response = target().path(API_VERSION).path("corpus") |
| 77 | .path("GOE").path("AGI").path("04846").path("p36875-36876") |
| margaretha | d709be5 | 2024-06-05 11:31:41 +0200 | [diff] [blame] | 78 | .queryParam("foundry", "*").request() |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 79 | .header(Attributes.AUTHORIZATION, |
| 80 | HttpAuthorizationHandler |
| 81 | .createBasicAuthorizationHeaderValue("kustvakt", |
| 82 | "kustvakt2015")) |
| 83 | .header(HttpHeaders.X_FORWARDED_FOR, "172.27.0.32").get(); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 84 | String entity = response.readEntity(String.class); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 85 | assertEquals(Status.OK.getStatusCode(), response.getStatus()); |
| margaretha | 65b6714 | 2017-05-29 16:23:16 +0200 | [diff] [blame] | 86 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 87 | assertNotNull(node); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 88 | assertEquals(node.at("/textSigle").asText(), "GOE/AGI/04846"); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 89 | assertEquals(node.at("/title").asText(), |
| 90 | "Zweiter römischer Aufenthalt"); |
| 91 | assertEquals(node.at("/subTitle").asText(), |
| 92 | "vom Juni 1787 bis April 1788"); |
| 93 | assertEquals(node.at("/author").asText(), |
| 94 | "Goethe, Johann Wolfgang von"); |
| 95 | assertTrue(node.at("/snippet").asText() |
| 96 | .startsWith("<span class=\"context-left\"></span>" |
| 97 | + "<span class=\"match\">")); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 98 | assertEquals(node.at("/availability").asText(), "QAO-NC-LOC:ids"); |
| margaretha | 61471cc | 2017-04-20 18:42:23 +0200 | [diff] [blame] | 99 | } |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 100 | |
| 101 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 102 | public void testAvailabilityAll () throws KustvaktException { |
| 103 | Response response = target().path(API_VERSION).path("corpus") |
| 104 | .path("GOE").path("AGD").path("00000").path("p75-76").request() |
| 105 | .header(Attributes.AUTHORIZATION, |
| 106 | HttpAuthorizationHandler |
| 107 | .createBasicAuthorizationHeaderValue("kustvakt", |
| 108 | "kustvakt2015")) |
| 109 | .header(HttpHeaders.X_FORWARDED_FOR, "10.27.0.32").get(); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 110 | assertEquals(Status.OK.getStatusCode(), response.getStatus()); |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 111 | } |
| 112 | |
| 113 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 114 | public void testAvailabilityAllUnauthorized () throws KustvaktException { |
| 115 | Response response = target().path(API_VERSION).path("corpus") |
| 116 | .path("GOE").path("AGD").path("00000").path("p75-76").request() |
| 117 | .header(Attributes.AUTHORIZATION, |
| 118 | HttpAuthorizationHandler |
| 119 | .createBasicAuthorizationHeaderValue("kustvakt", |
| 120 | "kustvakt2015")) |
| 121 | .header(HttpHeaders.X_FORWARDED_FOR, "170.27.0.32").get(); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 122 | JsonNode node = JsonUtils.readTree(response.readEntity(String.class)); |
| margaretha | c7f8f80 | 2024-06-05 12:52:45 +0200 | [diff] [blame] | 123 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 124 | assertEquals(StatusCodes.AUTHORIZATION_FAILED, |
| 125 | node.at("/errors/0/0").asInt()); |
| 126 | assertEquals( |
| 127 | "Retrieving resource with ID " |
| 128 | + "match-GOE/AGD/00000-p75-76 is not allowed.", |
| 129 | node.at("/errors/0/1").asText()); |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 130 | } |
| Akron | 15b05be | 2017-05-22 17:15:28 +0200 | [diff] [blame] | 131 | } |