diff --git a/commafeed-server/pom.xml b/commafeed-server/pom.xml index 95b2c255..f8747493 100644 --- a/commafeed-server/pom.xml +++ b/commafeed-server/pom.xml @@ -15,7 +15,6 @@ 3.13.1 6.6 2.1.0 - 3.1.8 1.2.1 h2 @@ -441,24 +440,6 @@ 5.15.0 test - - org.glassfish.jersey.core - jersey-client - ${jersey.version} - test - - - org.glassfish.jersey.media - jersey-media-multipart - ${jersey.version} - test - - - org.glassfish.jersey.media - jersey-media-json-jackson - ${jersey.version} - test - io.rest-assured rest-assured diff --git a/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java b/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java index 0d2f40a0..00ebe118 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java @@ -11,8 +11,6 @@ import java.util.Objects; import org.apache.commons.io.IOUtils; import org.apache.hc.core5.http.HttpStatus; import org.awaitility.Awaitility; -import org.glassfish.jersey.client.JerseyClientBuilder; -import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.mockserver.client.MockServerClient; @@ -20,19 +18,15 @@ import org.mockserver.integration.ClientAndServer; import org.mockserver.model.HttpRequest; import org.mockserver.model.HttpResponse; -import com.commafeed.JacksonCustomizer; import com.commafeed.frontend.model.Entries; import com.commafeed.frontend.model.Subscription; import com.commafeed.frontend.model.request.SubscribeRequest; -import com.fasterxml.jackson.databind.ObjectMapper; import io.restassured.RestAssured; import io.restassured.http.Header; import jakarta.ws.rs.client.Client; -import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Form; import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.MediaType; import lombok.Getter; @Getter @@ -47,17 +41,10 @@ public abstract class BaseIT { private String apiBaseUrl; private String webSocketUrl; - protected JerseyClientBuilder configureClientBuilder(JerseyClientBuilder base) { - return base; - } - @BeforeEach void init() throws IOException { this.mockServerClient = ClientAndServer.startClientAndServer(0); - ObjectMapper mapper = new ObjectMapper(); - new JacksonCustomizer().customize(mapper); - this.client = configureClientBuilder(new JerseyClientBuilder().register(new JacksonJsonProvider(mapper))).build(); this.feedUrl = "http://localhost:" + mockServerClient.getPort() + "/"; this.baseUrl = "http://localhost:8085/"; this.apiBaseUrl = this.baseUrl + "rest/"; @@ -87,13 +74,11 @@ public abstract class BaseIT { } protected List login() { - Form form = new Form(); - form.param("j_username", "admin"); - form.param("j_password", "admin"); - List
setCookieHeaders = RestAssured.given() + .auth() + .none() .formParams("j_username", "admin", "j_password", "admin") - .post(baseUrl + "j_security_check") + .post("j_security_check") .then() .statusCode(HttpStatus.SC_OK) .extract() @@ -106,7 +91,14 @@ public abstract class BaseIT { SubscribeRequest subscribeRequest = new SubscribeRequest(); subscribeRequest.setUrl(feedUrl); subscribeRequest.setTitle("my title for this feed"); - return client.target(apiBaseUrl + "feed/subscribe").request().post(Entity.json(subscribeRequest), Long.class); + return RestAssured.given() + .body(subscribeRequest) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/feed/subscribe") + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .as(Long.class); } protected Long subscribeAndWaitForEntries(String feedUrl) { @@ -116,19 +108,24 @@ public abstract class BaseIT { } protected Subscription getSubscription(Long subscriptionId) { - return client.target(apiBaseUrl + "feed/get/{id}").resolveTemplate("id", subscriptionId).request().get(Subscription.class); + return RestAssured.given() + .get("rest/feed/get/{id}", subscriptionId) + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .as(Subscription.class); } protected Entries getFeedEntries(long subscriptionId) { - Response response = client.target(apiBaseUrl + "feed/entries") - .queryParam("id", subscriptionId) - .queryParam("readType", "all") - .request() - .get(); - return response.readEntity(Entries.class); + return RestAssured.given() + .get("rest/feed/entries?id={id}&readType=all", subscriptionId) + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .as(Entries.class); } protected void forceRefreshAllFeeds() { - client.target(apiBaseUrl + "feed/refreshAll").request().get(Void.class); + RestAssured.given().get("rest/feed/refreshAll").then().statusCode(HttpStatus.SC_OK); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/SecurityIT.java b/commafeed-server/src/test/java/com/commafeed/integration/SecurityIT.java index 5ba7c6c6..f2b1e124 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/SecurityIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/SecurityIT.java @@ -1,7 +1,6 @@ package com.commafeed.integration; import java.net.HttpCookie; -import java.util.Base64; import java.util.List; import java.util.stream.Collectors; @@ -16,114 +15,117 @@ import com.commafeed.frontend.model.request.ProfileModificationRequest; import com.commafeed.frontend.model.request.SubscribeRequest; import io.quarkus.test.junit.QuarkusTest; -import jakarta.ws.rs.client.Entity; +import io.restassured.RestAssured; import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.MediaType; @QuarkusTest class SecurityIT extends BaseIT { @Test void notLoggedIn() { - try (Response response = getClient().target(getApiBaseUrl() + "user/profile").request().get()) { - Assertions.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getStatus()); - } + RestAssured.given().get("rest/user/profile").then().statusCode(HttpStatus.SC_UNAUTHORIZED); } @Test void formLogin() { List cookies = login(); + cookies.forEach(c -> Assertions.assertTrue(c.getMaxAge() > 0)); - try (Response response = getClient().target(getApiBaseUrl() + "user/profile") - .request() + RestAssured.given() .header(HttpHeaders.COOKIE, cookies.stream().map(HttpCookie::toString).collect(Collectors.joining(";"))) - .get()) { - Assertions.assertEquals(HttpStatus.SC_OK, response.getStatus()); - cookies.forEach(c -> Assertions.assertTrue(c.getMaxAge() > 0)); - } + .get("rest/user/profile") + .then() + .statusCode(HttpStatus.SC_OK); } @Test void basicAuthLogin() { - String auth = "Basic " + Base64.getEncoder().encodeToString("admin:admin".getBytes()); - try (Response response = getClient().target(getApiBaseUrl() + "user/profile") - .request() - .header(HttpHeaders.AUTHORIZATION, auth) - .get()) { - Assertions.assertEquals(HttpStatus.SC_OK, response.getStatus()); - } + RestAssured.given().auth().preemptive().basic("admin", "admin").get("rest/user/profile").then().statusCode(HttpStatus.SC_OK); } @Test void wrongPassword() { - String auth = "Basic " + Base64.getEncoder().encodeToString("admin:wrong-password".getBytes()); - try (Response response = getClient().target(getApiBaseUrl() + "user/profile") - .request() - .header(HttpHeaders.AUTHORIZATION, auth) - .get()) { - Assertions.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getStatus()); - } + RestAssured.given() + .auth() + .preemptive() + .basic("admin", "wrong-password") + .get("rest/user/profile") + .then() + .statusCode(HttpStatus.SC_UNAUTHORIZED); } @Test void missingRole() { - String auth = "Basic " + Base64.getEncoder().encodeToString("demo:demo".getBytes()); - try (Response response = getClient().target(getApiBaseUrl() + "admin/metrics") - .request() - .header(HttpHeaders.AUTHORIZATION, auth) - .get()) { - Assertions.assertEquals(HttpStatus.SC_FORBIDDEN, response.getStatus()); - } + RestAssured.given().auth().preemptive().basic("demo", "demo").get("rest/admin/metrics").then().statusCode(HttpStatus.SC_FORBIDDEN); } @Test void apiKey() { - String auth = "Basic " + Base64.getEncoder().encodeToString("admin:admin".getBytes()); - // create api key ProfileModificationRequest req = new ProfileModificationRequest(); req.setCurrentPassword("admin"); req.setNewApiKey(true); - getClient().target(getApiBaseUrl() + "user/profile") - .request() - .header(HttpHeaders.AUTHORIZATION, auth) - .post(Entity.json(req)) - .close(); + RestAssured.given() + .auth() + .preemptive() + .basic("admin", "admin") + .body(req) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/user/profile") + .then() + .statusCode(HttpStatus.SC_OK); // fetch api key - String apiKey = getClient().target(getApiBaseUrl() + "user/profile") - .request() - .header(HttpHeaders.AUTHORIZATION, auth) - .get(UserModel.class) + String apiKey = RestAssured.given() + .auth() + .preemptive() + .basic("admin", "admin") + .get("rest/user/profile") + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .as(UserModel.class) .getApiKey(); // subscribe to a feed SubscribeRequest subscribeRequest = new SubscribeRequest(); subscribeRequest.setUrl(getFeedUrl()); subscribeRequest.setTitle("my title for this feed"); - long subscriptionId = getClient().target(getApiBaseUrl() + "feed/subscribe") - .request() - .header(HttpHeaders.AUTHORIZATION, auth) - .post(Entity.json(subscribeRequest), Long.class); + long subscriptionId = RestAssured.given() + .auth() + .preemptive() + .basic("admin", "admin") + .body(subscribeRequest) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/feed/subscribe") + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .as(Long.class); // get entries with api key - Entries entries = getClient().target(getApiBaseUrl() + "feed/entries") + Entries entries = RestAssured.given() .queryParam("id", subscriptionId) .queryParam("readType", "unread") .queryParam("apiKey", apiKey) - .request() - .get(Entries.class); + .get("rest/feed/entries") + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .as(Entries.class); Assertions.assertEquals("my title for this feed", entries.getName()); // mark entry as read and expect it won't work because it's not a GET request MarkRequest markRequest = new MarkRequest(); markRequest.setId("1"); markRequest.setRead(true); - try (Response markResponse = getClient().target(getApiBaseUrl() + "entry/mark") + RestAssured.given() + .body(markRequest) + .contentType(MediaType.APPLICATION_JSON) .queryParam("apiKey", apiKey) - .request() - .post(Entity.json(markRequest))) { - Assertions.assertEquals(HttpStatus.SC_UNAUTHORIZED, markResponse.getStatus()); - } + .post("rest/entry/mark") + .then() + .statusCode(HttpStatus.SC_UNAUTHORIZED); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/WebSocketIT.java b/commafeed-server/src/test/java/com/commafeed/integration/WebSocketIT.java index d5acb22c..bfeb64ea 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/WebSocketIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/WebSocketIT.java @@ -11,15 +11,16 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; +import org.apache.hc.core5.http.HttpStatus; import org.awaitility.Awaitility; -import org.glassfish.jersey.client.JerseyClientBuilder; -import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.commafeed.frontend.model.request.FeedModificationRequest; import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; import jakarta.websocket.ClientEndpointConfig; import jakarta.websocket.CloseReason; import jakarta.websocket.ContainerProvider; @@ -27,17 +28,17 @@ import jakarta.websocket.DeploymentException; import jakarta.websocket.Endpoint; import jakarta.websocket.EndpointConfig; import jakarta.websocket.Session; -import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import lombok.extern.slf4j.Slf4j; @QuarkusTest @Slf4j class WebSocketIT extends BaseIT { - @Override - protected JerseyClientBuilder configureClientBuilder(JerseyClientBuilder base) { - return base.register(HttpAuthenticationFeature.basic("admin", "admin")); + @BeforeEach + void setup() { + RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); } @Test @@ -94,7 +95,7 @@ class WebSocketIT extends BaseIT { req.setId(subscriptionId); req.setName("feed-name"); req.setFilter("!title.contains('item 4')"); - getClient().target(getApiBaseUrl() + "feed/modify").request().post(Entity.json(req), Void.class); + RestAssured.given().body(req).contentType(MediaType.APPLICATION_JSON).post("rest/feed/modify").then().statusCode(HttpStatus.SC_OK); AtomicBoolean connected = new AtomicBoolean(); AtomicReference messageRef = new AtomicReference<>(); diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/AdminIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/AdminIT.java index c6e53815..ceeef49f 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/AdminIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/AdminIT.java @@ -1,11 +1,10 @@ package com.commafeed.integration.rest; -import java.util.Arrays; import java.util.List; -import org.glassfish.jersey.client.JerseyClientBuilder; -import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; +import org.apache.hc.core5.http.HttpStatus; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -15,14 +14,15 @@ import com.commafeed.frontend.model.request.IDRequest; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; -import jakarta.ws.rs.client.Entity; +import io.restassured.RestAssured; +import jakarta.ws.rs.core.MediaType; @QuarkusTest class AdminIT extends BaseIT { - @Override - protected JerseyClientBuilder configureClientBuilder(JerseyClientBuilder base) { - return base.register(HttpAuthenticationFeature.basic("admin", "admin")); + @BeforeEach + void setup() { + RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); } @Nested @@ -46,7 +46,12 @@ class AdminIT extends BaseIT { user.setName("test"); user.setPassword("test".getBytes()); user.setEmail("test@test.com"); - getClient().target(getApiBaseUrl() + "admin/user/save").request().post(Entity.json(user), Void.TYPE); + RestAssured.given() + .body(user) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/admin/user/save") + .then() + .statusCode(HttpStatus.SC_OK); } private void modifyUser() { @@ -56,7 +61,12 @@ class AdminIT extends BaseIT { .findFirst() .orElseThrow(() -> new NullPointerException("User not found")); user.setEmail("new-email@provider.com"); - getClient().target(getApiBaseUrl() + "admin/user/save").request().post(Entity.json(user), Void.TYPE); + RestAssured.given() + .body(user) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/admin/user/save") + .then() + .statusCode(HttpStatus.SC_OK); } private void deleteUser() { @@ -68,11 +78,17 @@ class AdminIT extends BaseIT { IDRequest req = new IDRequest(); req.setId(user.getId()); - getClient().target(getApiBaseUrl() + "admin/user/delete").request().post(Entity.json(req), Void.TYPE); + RestAssured.given() + .body(req) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/admin/user/delete") + .then() + .statusCode(HttpStatus.SC_OK); } private List getAllUsers() { - return Arrays.asList(getClient().target(getApiBaseUrl() + "admin/user/getAll").request().get(UserModel[].class)); + return List.of( + RestAssured.given().get("rest/admin/user/getAll").then().statusCode(HttpStatus.SC_OK).extract().as(UserModel[].class)); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeedIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeedIT.java index 6b561c2d..1e91f079 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeedIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeedIT.java @@ -11,12 +11,8 @@ import java.util.Objects; import org.apache.commons.io.IOUtils; import org.apache.hc.core5.http.HttpStatus; import org.awaitility.Awaitility; -import org.glassfish.jersey.client.ClientProperties; -import org.glassfish.jersey.client.JerseyClientBuilder; -import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; -import org.glassfish.jersey.media.multipart.MultiPart; -import org.glassfish.jersey.media.multipart.file.StreamDataBodyPart; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -30,16 +26,15 @@ import com.commafeed.frontend.model.request.MarkRequest; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; -import jakarta.ws.rs.client.Entity; +import io.restassured.RestAssured; import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; @QuarkusTest class FeedIT extends BaseIT { - @Override - protected JerseyClientBuilder configureClientBuilder(JerseyClientBuilder base) { - return base.register(HttpAuthenticationFeature.basic("admin", "admin")); + @BeforeEach + void setup() { + RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); } @Nested @@ -49,7 +44,14 @@ class FeedIT extends BaseIT { FeedInfoRequest req = new FeedInfoRequest(); req.setUrl(getFeedUrl()); - FeedInfo feedInfo = getClient().target(getApiBaseUrl() + "feed/fetch").request().post(Entity.json(req), FeedInfo.class); + FeedInfo feedInfo = RestAssured.given() + .body(req) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/feed/fetch") + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .as(FeedInfo.class); Assertions.assertEquals("CommaFeed test feed", feedInfo.getTitle()); Assertions.assertEquals(getFeedUrl(), feedInfo.getUrl()); } @@ -65,13 +67,13 @@ class FeedIT extends BaseIT { @Test void subscribeFromUrl() { - try (Response response = getClient().target(getApiBaseUrl() + "feed/subscribe") + RestAssured.given() .queryParam("url", getFeedUrl()) - .property(ClientProperties.FOLLOW_REDIRECTS, Boolean.FALSE) - .request() - .get()) { - Assertions.assertEquals(HttpStatus.SC_TEMPORARY_REDIRECT, response.getStatus()); - } + .redirects() + .follow(false) + .get("rest/feed/subscribe") + .then() + .statusCode(HttpStatus.SC_TEMPORARY_REDIRECT); } @Test @@ -89,9 +91,13 @@ class FeedIT extends BaseIT { IDRequest request = new IDRequest(); request.setId(subscriptionId); - try (Response response = getClient().target(getApiBaseUrl() + "feed/unsubscribe").request().post(Entity.json(request))) { - return response.getStatus(); - } + return RestAssured.given() + .body(request) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/feed/unsubscribe") + .then() + .extract() + .statusCode(); } } @@ -137,7 +143,13 @@ class FeedIT extends BaseIT { request.setId(String.valueOf(subscriptionId)); request.setOlderThan(olderThan == null ? null : olderThan.toEpochMilli()); request.setInsertedBefore(insertedBefore == null ? null : insertedBefore.toEpochMilli()); - getClient().target(getApiBaseUrl() + "feed/mark").request().post(Entity.json(request), Void.TYPE); + + RestAssured.given() + .body(request) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/feed/mark") + .then() + .statusCode(HttpStatus.SC_OK); } } @@ -152,7 +164,12 @@ class FeedIT extends BaseIT { IDRequest request = new IDRequest(); request.setId(subscriptionId); - getClient().target(getApiBaseUrl() + "feed/refresh").request().post(Entity.json(request), Void.TYPE); + RestAssured.given() + .body(request) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/feed/refresh") + .then() + .statusCode(HttpStatus.SC_OK); Awaitility.await() .atMost(Duration.ofSeconds(15)) @@ -165,7 +182,7 @@ class FeedIT extends BaseIT { // mariadb/mysql timestamp precision is 1 second Instant threshold = Instant.now().minus(Duration.ofSeconds(1)); - getClient().target(getApiBaseUrl() + "feed/refreshAll").request().get(Void.TYPE); + forceRefreshAllFeeds(); Awaitility.await() .atMost(Duration.ofSeconds(15)) @@ -185,7 +202,12 @@ class FeedIT extends BaseIT { req.setId(subscriptionId); req.setName("new name"); req.setCategoryId(subscription.getCategoryId()); - getClient().target(getApiBaseUrl() + "feed/modify").request().post(Entity.json(req), Void.TYPE); + RestAssured.given() + .body(req) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/feed/modify") + .then() + .statusCode(HttpStatus.SC_OK); subscription = getSubscription(subscriptionId); Assertions.assertEquals("new name", subscription.getName()); @@ -198,10 +220,13 @@ class FeedIT extends BaseIT { void favicon() throws IOException { Long subscriptionId = subscribe(getFeedUrl()); - byte[] icon = getClient().target(getApiBaseUrl() + "feed/favicon/{id}") - .resolveTemplate("id", subscriptionId) - .request() - .get(byte[].class); + byte[] icon = RestAssured.given() + .get("rest/feed/favicon/{id}", subscriptionId) + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .response() + .asByteArray(); byte[] defaultFavicon = IOUtils.toByteArray(Objects.requireNonNull(getClass().getResource("/images/default_favicon.gif"))); Assertions.assertArrayEquals(defaultFavicon, icon); } @@ -210,22 +235,20 @@ class FeedIT extends BaseIT { @Nested class Opml { @Test - void importExportOpml() throws IOException { + void importExportOpml() { importOpml(); - String opml = getClient().target(getApiBaseUrl() + "feed/export").request().get(String.class); + String opml = RestAssured.given().get("rest/feed/export").then().statusCode(HttpStatus.SC_OK).extract().asString(); Assertions.assertTrue(opml.contains("admin subscriptions in CommaFeed")); } - void importOpml() throws IOException { + void importOpml() { InputStream stream = Objects.requireNonNull(getClass().getResourceAsStream("/opml/opml_v2.0.xml")); - try (MultiPart multiPart = new MultiPart()) { - multiPart.bodyPart(new StreamDataBodyPart("file", stream)); - multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE); - getClient().target(getApiBaseUrl() + "feed/import") - .request() - .post(Entity.entity(multiPart, multiPart.getMediaType()), Void.TYPE); - } + RestAssured.given() + .multiPart("file", "opml_v2.0.xml", stream, MediaType.MULTIPART_FORM_DATA) + .post("rest/feed/import") + .then() + .statusCode(HttpStatus.SC_OK); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java index 8a52a003..533e034b 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java @@ -1,7 +1,6 @@ package com.commafeed.integration.rest; -import org.glassfish.jersey.client.JerseyClientBuilder; -import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; +import org.apache.hc.core5.http.HttpStatus; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -13,8 +12,8 @@ import com.commafeed.frontend.resource.fever.FeverResponse; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; -import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.Form; +import io.restassured.RestAssured; +import jakarta.ws.rs.core.MediaType; @QuarkusTest class FeverIT extends BaseIT { @@ -22,21 +21,18 @@ class FeverIT extends BaseIT { private Long userId; private String apiKey; - @Override - protected JerseyClientBuilder configureClientBuilder(JerseyClientBuilder base) { - return base.register(HttpAuthenticationFeature.basic("admin", "admin")); - } - @BeforeEach void setup() { + RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + // create api key ProfileModificationRequest req = new ProfileModificationRequest(); req.setCurrentPassword("admin"); req.setNewApiKey(true); - getClient().target(getApiBaseUrl() + "user/profile").request().post(Entity.json(req), Void.TYPE); + RestAssured.given().body(req).contentType(MediaType.APPLICATION_JSON).post("rest/user/profile").then().statusCode(HttpStatus.SC_OK); // retrieve api key - UserModel user = getClient().target(getApiBaseUrl() + "user/profile").request().get(UserModel.class); + UserModel user = RestAssured.given().get("rest/user/profile").then().statusCode(HttpStatus.SC_OK).extract().as(UserModel.class); this.apiKey = user.getApiKey(); this.userId = user.getId(); } @@ -72,13 +68,15 @@ class FeverIT extends BaseIT { } private FeverResponse fetch(String what, String apiKey) { - Form form = new Form(); - form.param("api_key", Digests.md5Hex("admin:" + apiKey)); - form.param(what, "1"); - - return getClient().target(getApiBaseUrl() + "fever/user/{userId}") - .resolveTemplate("userId", userId) - .request() - .post(Entity.form(form), FeverResponse.class); + return RestAssured.given() + .auth() + .none() + .formParam("api_key", Digests.md5Hex("admin:" + apiKey)) + .formParam(what, 1) + .post("rest/fever/user/{userId}", userId) + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .as(FeverResponse.class); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/ServerIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/ServerIT.java index 2a9a6958..3977d967 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/ServerIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/ServerIT.java @@ -7,13 +7,14 @@ import com.commafeed.frontend.model.ServerInfo; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; @QuarkusTest class ServerIT extends BaseIT { @Test void getServerInfos() { - ServerInfo serverInfos = getClient().target(getApiBaseUrl() + "server/get").request().get(ServerInfo.class); + ServerInfo serverInfos = RestAssured.given().get("/rest/server/get").then().statusCode(200).extract().as(ServerInfo.class); Assertions.assertTrue(serverInfos.isAllowRegistrations()); Assertions.assertTrue(serverInfos.isSmtpEnabled()); Assertions.assertTrue(serverInfos.isDemoAccountEnabled()); diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java index 60f6d317..2e7b6cb4 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java @@ -11,9 +11,10 @@ import com.commafeed.integration.BaseIT; import io.quarkus.mailer.MockMailbox; import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; import io.vertx.ext.mail.MailMessage; import jakarta.inject.Inject; -import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.MediaType; @QuarkusTest class UserIT extends BaseIT { @@ -23,6 +24,8 @@ class UserIT extends BaseIT { @BeforeEach void setup() { + RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + mailbox.clear(); } @@ -30,8 +33,7 @@ class UserIT extends BaseIT { void resetPassword() { PasswordResetRequest req = new PasswordResetRequest(); req.setEmail("admin@commafeed.com"); - - getClient().target(getApiBaseUrl() + "user/passwordReset").request().post(Entity.json(req), Void.TYPE); + RestAssured.given().body(req).contentType(MediaType.APPLICATION_JSON).post("rest/user/passwordReset").then().statusCode(200); List mails = mailbox.getMailMessagesSentTo("admin@commafeed.com"); Assertions.assertEquals(1, mails.size()); diff --git a/commafeed-server/src/test/java/com/commafeed/integration/servlet/CustomCodeIT.java b/commafeed-server/src/test/java/com/commafeed/integration/servlet/CustomCodeIT.java index 9e6229c6..de6947e1 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/servlet/CustomCodeIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/servlet/CustomCodeIT.java @@ -1,53 +1,42 @@ package com.commafeed.integration.servlet; -import java.net.HttpCookie; -import java.util.List; -import java.util.stream.Collectors; - -import org.glassfish.jersey.client.JerseyClientBuilder; -import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; -import org.junit.jupiter.api.Assertions; +import org.apache.hc.core5.http.HttpStatus; +import org.hamcrest.CoreMatchers; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.commafeed.frontend.model.Settings; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; -import jakarta.ws.rs.client.Entity; -import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.Response; +import io.restassured.RestAssured; +import jakarta.ws.rs.core.MediaType; @QuarkusTest class CustomCodeIT extends BaseIT { - @Override - protected JerseyClientBuilder configureClientBuilder(JerseyClientBuilder base) { - return base.register(HttpAuthenticationFeature.basic("admin", "admin")); + @BeforeEach + void setup() { + RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); } @Test void test() { // get settings - Settings settings = getClient().target(getApiBaseUrl() + "user/settings").request().get(Settings.class); + Settings settings = RestAssured.given().get("rest/user/settings").then().statusCode(200).extract().as(Settings.class); // update settings settings.setCustomJs("custom-js"); settings.setCustomCss("custom-css"); - getClient().target(getApiBaseUrl() + "user/settings").request().post(Entity.json(settings), Void.TYPE); + RestAssured.given() + .body(settings) + .contentType(MediaType.APPLICATION_JSON) + .post("rest/user/settings") + .then() + .statusCode(HttpStatus.SC_OK); // check custom code servlets - List cookies = login(); - try (Response response = getClient().target(getBaseUrl() + "custom_js.js") - .request() - .header(HttpHeaders.COOKIE, cookies.stream().map(HttpCookie::toString).collect(Collectors.joining(";"))) - .get()) { - Assertions.assertEquals("custom-js", response.readEntity(String.class)); - } - try (Response response = getClient().target(getBaseUrl() + "custom_css.css") - .request() - .header(HttpHeaders.COOKIE, cookies.stream().map(HttpCookie::toString).collect(Collectors.joining(";"))) - .get()) { - Assertions.assertEquals("custom-css", response.readEntity(String.class)); - } + RestAssured.given().get("custom_js.js").then().statusCode(HttpStatus.SC_OK).body(CoreMatchers.is("custom-js")); + RestAssured.given().get("custom_css.css").then().statusCode(HttpStatus.SC_OK).body(CoreMatchers.is("custom-css")); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/servlet/LogoutIT.java b/commafeed-server/src/test/java/com/commafeed/integration/servlet/LogoutIT.java index b12aedb1..9feb018c 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/servlet/LogoutIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/servlet/LogoutIT.java @@ -5,15 +5,15 @@ import java.util.List; import java.util.stream.Collectors; import org.apache.hc.core5.http.HttpStatus; -import org.glassfish.jersey.client.ClientProperties; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; +import io.restassured.http.Headers; import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.Response; @QuarkusTest class LogoutIT extends BaseIT { @@ -21,14 +21,17 @@ class LogoutIT extends BaseIT { @Test void test() { List cookies = login(); - try (Response response = getClient().target(getBaseUrl() + "logout") - .request() + Headers responseHeaders = RestAssured.given() .header(HttpHeaders.COOKIE, cookies.stream().map(HttpCookie::toString).collect(Collectors.joining(";"))) - .property(ClientProperties.FOLLOW_REDIRECTS, Boolean.FALSE) - .get()) { - Assertions.assertEquals(HttpStatus.SC_TEMPORARY_REDIRECT, response.getStatus()); - List setCookieHeaders = response.getStringHeaders().get(HttpHeaders.SET_COOKIE); - Assertions.assertTrue(setCookieHeaders.stream().flatMap(c -> HttpCookie.parse(c).stream()).allMatch(c -> c.getMaxAge() == 0)); - } + .redirects() + .follow(false) + .get("logout") + .then() + .statusCode(HttpStatus.SC_TEMPORARY_REDIRECT) + .extract() + .headers(); + + List setCookieHeaders = responseHeaders.getValues(HttpHeaders.SET_COOKIE); + Assertions.assertTrue(setCookieHeaders.stream().flatMap(c -> HttpCookie.parse(c).stream()).allMatch(c -> c.getMaxAge() == 0)); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/servlet/NextUnreadIT.java b/commafeed-server/src/test/java/com/commafeed/integration/servlet/NextUnreadIT.java index 60331b75..661275fd 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/servlet/NextUnreadIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/servlet/NextUnreadIT.java @@ -1,42 +1,34 @@ package com.commafeed.integration.servlet; -import java.net.HttpCookie; -import java.util.List; -import java.util.stream.Collectors; - import org.apache.hc.core5.http.HttpStatus; -import org.glassfish.jersey.client.ClientProperties; -import org.glassfish.jersey.client.JerseyClientBuilder; -import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; -import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.Response; @QuarkusTest class NextUnreadIT extends BaseIT { - @Override - protected JerseyClientBuilder configureClientBuilder(JerseyClientBuilder base) { - return base.register(HttpAuthenticationFeature.basic("admin", "admin")); + @BeforeEach + void setup() { + RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); } @Test void test() { subscribeAndWaitForEntries(getFeedUrl()); - List cookies = login(); - Response response = getClient().target(getBaseUrl() + "next") - .property(ClientProperties.FOLLOW_REDIRECTS, Boolean.FALSE) - .request() - .header(HttpHeaders.COOKIE, cookies.stream().map(HttpCookie::toString).collect(Collectors.joining(";"))) - .get(); - Assertions.assertEquals(HttpStatus.SC_TEMPORARY_REDIRECT, response.getStatus()); - Assertions.assertEquals("https://hostname.local/commafeed/2", response.getHeaderString(HttpHeaders.LOCATION)); + RestAssured.given() + .redirects() + .follow(false) + .get("next") + .then() + .statusCode(HttpStatus.SC_TEMPORARY_REDIRECT) + .header(HttpHeaders.LOCATION, "https://hostname.local/commafeed/2"); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/servlet/RobotsTxtIT.java b/commafeed-server/src/test/java/com/commafeed/integration/servlet/RobotsTxtIT.java index f16a5fa9..aa153217 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/servlet/RobotsTxtIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/servlet/RobotsTxtIT.java @@ -1,19 +1,17 @@ package com.commafeed.integration.servlet; -import org.junit.jupiter.api.Assertions; +import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.Test; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; -import jakarta.ws.rs.core.Response; +import io.restassured.RestAssured; @QuarkusTest class RobotsTxtIT extends BaseIT { @Test void test() { - try (Response response = getClient().target(getBaseUrl() + "robots.txt").request().get()) { - Assertions.assertEquals("User-agent: *\nDisallow: /", response.readEntity(String.class)); - } + RestAssured.given().get("robots.txt").then().statusCode(200).body(CoreMatchers.is("User-agent: *\nDisallow: /")); } }