| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 1 | package de.ids_mannheim.korap.web.controller; |
| 2 | |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 4 | |
| 5 | import org.apache.http.entity.ContentType; |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 6 | import org.junit.jupiter.api.Test; |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 7 | import com.fasterxml.jackson.databind.JsonNode; |
| 8 | import com.google.common.net.HttpHeaders; |
| margaretha | 96c309d | 2023-08-16 12:24:12 +0200 | [diff] [blame] | 9 | import jakarta.ws.rs.ProcessingException; |
| 10 | import jakarta.ws.rs.core.Response; |
| 11 | import jakarta.ws.rs.core.Response.Status; |
| 12 | import jakarta.ws.rs.client.Entity; |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 13 | |
| 14 | import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler; |
| 15 | import de.ids_mannheim.korap.config.Attributes; |
| 16 | import de.ids_mannheim.korap.config.SpringJerseyTest; |
| margaretha | 652c4dc | 2021-02-12 17:07:44 +0100 | [diff] [blame] | 17 | import de.ids_mannheim.korap.constant.ResourceType; |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 18 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 19 | import de.ids_mannheim.korap.exceptions.StatusCodes; |
| margaretha | 479a447 | 2021-02-18 12:00:55 +0100 | [diff] [blame] | 20 | import de.ids_mannheim.korap.user.User.CorpusAccess; |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 21 | import de.ids_mannheim.korap.utils.JsonUtils; |
| 22 | |
| margaretha | 652c4dc | 2021-02-12 17:07:44 +0100 | [diff] [blame] | 23 | public class QueryReferenceControllerTest extends SpringJerseyTest { |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 24 | |
| 25 | private String testUser = "qRefControllerTest"; |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 26 | |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 27 | private String adminUser = "admin"; |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 28 | |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 29 | private String system = "system"; |
| margaretha | 652c4dc | 2021-02-12 17:07:44 +0100 | [diff] [blame] | 30 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 31 | private void testRetrieveQueryByName (String qName, String query, |
| 32 | String queryCreator, String username, ResourceType resourceType, |
| 33 | CorpusAccess access) throws KustvaktException { |
| 34 | Response response = target().path(API_VERSION).path("query") |
| 35 | .path("~" + queryCreator).path(qName).request() |
| 36 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 37 | .createBasicAuthorizationHeaderValue(username, "pass")) |
| 38 | .get(); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 39 | String entity = response.readEntity(String.class); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 40 | // System.out.println(entity); |
| 41 | assertEquals(Status.OK.getStatusCode(), response.getStatus()); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 42 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 43 | assertEquals(qName, node.at("/name").asText()); |
| 44 | assertEquals(resourceType.displayName(), node.at("/type").asText()); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 45 | assertEquals(queryCreator, node.at("/createdBy").asText()); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 46 | assertEquals(query, node.at("/query").asText()); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 47 | assertEquals(node.at("/queryLanguage").asText(), "poliqarp"); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 48 | assertEquals(access.name(), node.at("/requiredAccess").asText()); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 49 | } |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 50 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 51 | private void testUpdateQuery (String qName, String qCreator, |
| 52 | String username, ResourceType type) |
| 53 | throws ProcessingException, KustvaktException { |
| 54 | String json = "{\"query\": \"Sonne\"" |
| 55 | + ",\"queryLanguage\": \"poliqarp\"}"; |
| 56 | Response response = target().path(API_VERSION).path("query") |
| 57 | .path("~" + qCreator).path(qName).request() |
| 58 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 59 | .createBasicAuthorizationHeaderValue(username, "pass")) |
| 60 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 61 | .put(Entity.json(json)); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 62 | assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 63 | testRetrieveQueryByName(qName, "Sonne", qCreator, username, type, |
| 64 | CorpusAccess.PUB); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 65 | } |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 66 | |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 67 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 68 | public void testCreatePrivateQuery () throws KustvaktException { |
| 69 | String json = "{\"type\": \"PRIVATE\"" + ",\"queryType\": \"QUERY\"" |
| 70 | + ",\"queryLanguage\": \"poliqarp\"" + ",\"query\": \"der\"}"; |
| margaretha | 652c4dc | 2021-02-12 17:07:44 +0100 | [diff] [blame] | 71 | String qName = "new_query"; |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 72 | Response response = target().path(API_VERSION).path("query") |
| 73 | .path("~" + testUser).path(qName).request() |
| 74 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 75 | .createBasicAuthorizationHeaderValue(testUser, "pass")) |
| 76 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 77 | .put(Entity.json(json)); |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 78 | assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 79 | testRetrieveQueryByName(qName, "der", testUser, testUser, |
| 80 | ResourceType.PRIVATE, CorpusAccess.PUB); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 81 | testUpdateQuery(qName, testUser, testUser, ResourceType.PRIVATE); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 82 | testDeleteQueryByName(qName, testUser, testUser); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 83 | } |
| 84 | |
| 85 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 86 | public void testCreatePublishQuery () throws KustvaktException { |
| 87 | String json = "{\"type\": \"PUBLISHED\"" + ",\"queryType\": \"QUERY\"" |
| 88 | + ",\"queryLanguage\": \"poliqarp\"" + ",\"query\": \"Regen\"}"; |
| margaretha | 1703c16 | 2021-08-13 17:13:42 +0200 | [diff] [blame] | 89 | String qName = "publish_query"; |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 90 | Response response = target().path(API_VERSION).path("query") |
| 91 | .path("~" + testUser).path(qName).request() |
| 92 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 93 | .createBasicAuthorizationHeaderValue(testUser, "pass")) |
| 94 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 95 | .put(Entity.json(json)); |
| margaretha | 1703c16 | 2021-08-13 17:13:42 +0200 | [diff] [blame] | 96 | assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 97 | testRetrieveQueryByName(qName, "Regen", testUser, testUser, |
| 98 | ResourceType.PUBLISHED, CorpusAccess.PUB); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 99 | testDeleteQueryByName(qName, testUser, testUser); |
| margaretha | 1703c16 | 2021-08-13 17:13:42 +0200 | [diff] [blame] | 100 | // check if hidden group has been created |
| margaretha | 1703c16 | 2021-08-13 17:13:42 +0200 | [diff] [blame] | 101 | } |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 102 | |
| margaretha | 1703c16 | 2021-08-13 17:13:42 +0200 | [diff] [blame] | 103 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 104 | public void testCreateUserQueryByAdmin () throws KustvaktException { |
| 105 | String json = "{\"type\": \"PRIVATE\"" + ",\"queryType\": \"QUERY\"" |
| 106 | + ",\"queryLanguage\": \"poliqarp\"" |
| 107 | + ",\"query\": \"Sommer\"}"; |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 108 | String qName = "marlin-query"; |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 109 | Response response = target().path(API_VERSION).path("query") |
| 110 | .path("~marlin").path(qName).request() |
| 111 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 112 | .createBasicAuthorizationHeaderValue(adminUser, "pass")) |
| 113 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 114 | .put(Entity.json(json)); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 115 | assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 116 | testRetrieveQueryByName(qName, "Sommer", "marlin", adminUser, |
| 117 | ResourceType.PRIVATE, CorpusAccess.PUB); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 118 | testUpdateQuery(qName, "marlin", adminUser, ResourceType.PRIVATE); |
| 119 | testDeleteQueryByName(qName, "marlin", adminUser); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 120 | } |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 121 | |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 122 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 123 | public void testCreateSystemQuery () throws KustvaktException { |
| 124 | String json = "{\"type\": \"SYSTEM\"" + ",\"queryType\": \"QUERY\"" |
| 125 | + ",\"queryLanguage\": \"poliqarp\"" |
| 126 | + ",\"query\": \"Sommer\"}"; |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 127 | String qName = "system-query"; |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 128 | Response response = target().path(API_VERSION).path("query") |
| 129 | .path("~system").path(qName).request() |
| 130 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 131 | .createBasicAuthorizationHeaderValue(adminUser, "pass")) |
| 132 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 133 | .put(Entity.json(json)); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 134 | assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 135 | testRetrieveQueryByName(qName, "Sommer", system, adminUser, |
| 136 | ResourceType.SYSTEM, CorpusAccess.PUB); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 137 | testUpdateQuery(qName, system, adminUser, ResourceType.SYSTEM); |
| 138 | testDeleteSystemQueryUnauthorized(qName); |
| 139 | testDeleteQueryByName(qName, system, adminUser); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 140 | } |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 141 | |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 142 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 143 | public void testCreateSystemQueryUnauthorized () throws KustvaktException { |
| 144 | String json = "{\"type\": \"SYSTEM\"" + ",\"queryType\": \"QUERY\"" |
| 145 | + ",\"queryLanguage\": \"poliqarp\"" |
| 146 | + ",\"query\": \"Sommer\"}"; |
| 147 | Response response = target().path(API_VERSION).path("query") |
| 148 | .path("~" + testUser).path("system-query").request() |
| 149 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 150 | .createBasicAuthorizationHeaderValue(testUser, "pass")) |
| 151 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 152 | .put(Entity.json(json)); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 153 | assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus()); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 154 | String entity = response.readEntity(String.class); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 155 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 156 | assertEquals(StatusCodes.AUTHORIZATION_FAILED, |
| 157 | node.at("/errors/0/0").asInt()); |
| 158 | assertEquals("Unauthorized operation for user: " + testUser, |
| 159 | node.at("/errors/0/1").asText()); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 160 | } |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 161 | |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 162 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 163 | public void testCreateQueryMissingQueryType () throws KustvaktException { |
| 164 | String json = "{\"type\": \"PRIVATE\"" |
| 165 | + ",\"queryLanguage\": \"poliqarp\"" + ",\"query\": \"Sohn\"}"; |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 166 | String qName = "new_query"; |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 167 | Response response = target().path(API_VERSION).path("query") |
| 168 | .path("~" + testUser).path(qName).request() |
| 169 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 170 | .createBasicAuthorizationHeaderValue(testUser, "pass")) |
| 171 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 172 | .put(Entity.json(json)); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 173 | assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 174 | testRetrieveQueryByName(qName, "Sohn", testUser, testUser, |
| 175 | ResourceType.PRIVATE, CorpusAccess.PUB); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 176 | testDeleteQueryByName(qName, testUser, testUser); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 177 | } |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 178 | |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 179 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 180 | public void testCreateQueryMissingQueryLanguage () |
| 181 | throws KustvaktException { |
| 182 | String json = "{\"type\": \"PRIVATE\"" + ",\"queryType\": \"QUERY\"" |
| 183 | + ",\"query\": \"Sohn\"}"; |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 184 | String qName = "new_query"; |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 185 | Response response = target().path(API_VERSION).path("query") |
| 186 | .path("~" + testUser).path(qName).request() |
| 187 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 188 | .createBasicAuthorizationHeaderValue(testUser, "pass")) |
| 189 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 190 | .put(Entity.json(json)); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 191 | assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 192 | String entity = response.readEntity(String.class); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 193 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 194 | assertEquals(StatusCodes.INVALID_ARGUMENT, |
| 195 | node.at("/errors/0/0").asInt()); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 196 | assertEquals(node.at("/errors/0/1").asText(), "queryLanguage is null"); |
| 197 | assertEquals(node.at("/errors/0/2").asText(), "queryLanguage"); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 198 | } |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 199 | |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 200 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 201 | public void testCreateQueryMissingQuery () throws KustvaktException { |
| 202 | String json = "{\"type\": \"PRIVATE\"" + ",\"queryType\": \"QUERY\"" |
| 203 | + ",\"queryLanguage\": \"poliqarp\"}"; |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 204 | String qName = "new_query"; |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 205 | Response response = target().path(API_VERSION).path("query") |
| 206 | .path("~" + testUser).path(qName).request() |
| 207 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 208 | .createBasicAuthorizationHeaderValue(testUser, "pass")) |
| 209 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 210 | .put(Entity.json(json)); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 211 | assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 212 | String entity = response.readEntity(String.class); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 213 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 214 | assertEquals(StatusCodes.INVALID_ARGUMENT, |
| 215 | node.at("/errors/0/0").asInt()); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 216 | assertEquals(node.at("/errors/0/1").asText(), "query is null"); |
| 217 | assertEquals(node.at("/errors/0/2").asText(), "query"); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 218 | } |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 219 | |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 220 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 221 | public void testCreateQueryMissingResourceType () throws KustvaktException { |
| 222 | String json = "{\"query\": \"Wind\"" |
| 223 | + ",\"queryLanguage\": \"poliqarp\"}"; |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 224 | String qName = "new_query"; |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 225 | Response response = target().path(API_VERSION).path("query") |
| 226 | .path("~" + testUser).path(qName).request() |
| 227 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 228 | .createBasicAuthorizationHeaderValue(testUser, "pass")) |
| 229 | .header(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON) |
| 230 | .put(Entity.json(json)); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 231 | assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 232 | String entity = response.readEntity(String.class); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 233 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 234 | assertEquals(StatusCodes.INVALID_ARGUMENT, |
| 235 | node.at("/errors/0/0").asInt()); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 236 | assertEquals(node.at("/errors/0/1").asText(), "type is null"); |
| 237 | assertEquals(node.at("/errors/0/2").asText(), "type"); |
| margaretha | 3b6972a | 2021-08-12 11:22:07 +0200 | [diff] [blame] | 238 | } |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 239 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 240 | private void testDeleteQueryByName (String qName, String qCreator, |
| 241 | String username) throws KustvaktException { |
| 242 | Response response = target().path(API_VERSION).path("query") |
| 243 | .path("~" + qCreator).path(qName).request() |
| 244 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 245 | .createBasicAuthorizationHeaderValue(username, "pass")) |
| 246 | .delete(); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 247 | assertEquals(Status.OK.getStatusCode(), response.getStatus()); |
| 248 | } |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 249 | |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 250 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 251 | public void testDeleteQueryUnauthorized () throws KustvaktException { |
| 252 | Response response = target().path(API_VERSION).path("query") |
| 253 | .path("~dory").path("dory-q").request() |
| 254 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 255 | .createBasicAuthorizationHeaderValue(testUser, "pass")) |
| 256 | .delete(); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 257 | String entity = response.readEntity(String.class); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 258 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 259 | assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus()); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 260 | assertEquals(StatusCodes.AUTHORIZATION_FAILED, |
| 261 | node.at("/errors/0/0").asInt()); |
| 262 | assertEquals("Unauthorized operation for user: " + testUser, |
| 263 | node.at("/errors/0/1").asText()); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 264 | } |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 265 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 266 | private void testDeleteSystemQueryUnauthorized (String qName) |
| 267 | throws KustvaktException { |
| 268 | Response response = target().path(API_VERSION).path("query") |
| 269 | .path("~system").path(qName).request() |
| 270 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 271 | .createBasicAuthorizationHeaderValue(testUser, "pass")) |
| 272 | .delete(); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 273 | String entity = response.readEntity(String.class); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 274 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 275 | assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus()); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 276 | assertEquals(StatusCodes.AUTHORIZATION_FAILED, |
| 277 | node.at("/errors/0/0").asInt()); |
| 278 | assertEquals("Unauthorized operation for user: " + testUser, |
| 279 | node.at("/errors/0/1").asText()); |
| margaretha | b3ecbe3 | 2021-08-16 12:55:54 +0200 | [diff] [blame] | 280 | } |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 281 | |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 282 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 283 | public void testDeleteNonExistingQuery () throws KustvaktException { |
| 284 | Response response = target().path(API_VERSION).path("query") |
| 285 | .path("~dory").path("non-existing-query").request() |
| 286 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 287 | .createBasicAuthorizationHeaderValue("dory", "pass")) |
| 288 | .delete(); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 289 | assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 290 | String entity = response.readEntity(String.class); |
| margaretha | 89bd8f5 | 2021-02-26 17:08:01 +0100 | [diff] [blame] | 291 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 292 | assertEquals(StatusCodes.NO_RESOURCE_FOUND, |
| 293 | node.at("/errors/0/0").asInt()); |
| 294 | assertEquals(node.at("/errors/0/1").asText(), |
| 295 | "Query dory/non-existing-query is not found."); |
| 296 | assertEquals(node.at("/errors/0/2").asText(), |
| 297 | "dory/non-existing-query"); |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 298 | } |
| margaretha | 652c4dc | 2021-02-12 17:07:44 +0100 | [diff] [blame] | 299 | |
| 300 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 301 | public void testListAvailableQueryForDory () |
| 302 | throws ProcessingException, KustvaktException { |
| margaretha | 90adf31 | 2021-02-17 10:12:41 +0100 | [diff] [blame] | 303 | JsonNode node = testListAvailableQuery("dory"); |
| 304 | assertEquals(2, node.size()); |
| 305 | } |
| 306 | |
| 307 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 308 | public void testListAvailableQueryForPearl () |
| 309 | throws ProcessingException, KustvaktException { |
| margaretha | 90adf31 | 2021-02-17 10:12:41 +0100 | [diff] [blame] | 310 | JsonNode node = testListAvailableQuery("pearl"); |
| margaretha | 90adf31 | 2021-02-17 10:12:41 +0100 | [diff] [blame] | 311 | assertEquals(1, node.size()); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 312 | assertEquals(node.at("/0/name").asText(), "system-q"); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 313 | assertEquals(ResourceType.SYSTEM.displayName(), |
| 314 | node.at("/0/type").asText()); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 315 | assertEquals(node.at("/0/description").asText(), "\"system\" query"); |
| 316 | assertEquals(node.at("/0/query").asText(), "[]"); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 317 | assertEquals(CorpusAccess.FREE.name(), |
| 318 | node.at("/0/requiredAccess").asText()); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 319 | // assertEquals("koral:token", node.at("/0/koralQuery/@type").asText()); |
| margaretha | 90adf31 | 2021-02-17 10:12:41 +0100 | [diff] [blame] | 320 | } |
| 321 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 322 | private JsonNode testListAvailableQuery (String username) |
| 323 | throws ProcessingException, KustvaktException { |
| 324 | Response response = target().path(API_VERSION).path("query").request() |
| 325 | .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler |
| 326 | .createBasicAuthorizationHeaderValue(username, "pass")) |
| 327 | .header(HttpHeaders.X_FORWARDED_FOR, "149.27.0.32").get(); |
| margaretha | 652c4dc | 2021-02-12 17:07:44 +0100 | [diff] [blame] | 328 | assertEquals(Status.OK.getStatusCode(), response.getStatus()); |
| abcpro1 | 73fe8f2 | 2022-11-08 19:56:52 +0000 | [diff] [blame] | 329 | String entity = response.readEntity(String.class); |
| margaretha | 90adf31 | 2021-02-17 10:12:41 +0100 | [diff] [blame] | 330 | // System.out.println(entity); |
| margaretha | 652c4dc | 2021-02-12 17:07:44 +0100 | [diff] [blame] | 331 | JsonNode node = JsonUtils.readTree(entity); |
| margaretha | 90adf31 | 2021-02-17 10:12:41 +0100 | [diff] [blame] | 332 | return node; |
| margaretha | 652c4dc | 2021-02-12 17:07:44 +0100 | [diff] [blame] | 333 | } |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 334 | } |