Skip to content

Commit

Permalink
Migrate to jvm-test-suite Gradle plugin.
Browse files Browse the repository at this point in the history
  • Loading branch information
arucard21 committed May 9, 2023
1 parent de6dc7d commit 6bdd003
Show file tree
Hide file tree
Showing 12 changed files with 256 additions and 28 deletions.
28 changes: 21 additions & 7 deletions SimplyRESTful/build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,31 @@
apply plugin: "java-library"
apply plugin: 'org.unbroken-dome.test-sets'

project.description = "A framework for creating a RESTful API"

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17

testSets {
integrationTest
}

tasks.withType(Test){
useJUnitPlatform()
testing {
suites {
test {
useJUnitJupiter()
}
integrationTest(JvmTestSuite) {
dependencies {
implementation project()
}
configurations.integrationTestImplementation {
extendsFrom configurations.testImplementation
}
targets {
all {
testTask.configure {
shouldRunAfter(test)
}
}
}
}
}
}

repositories {
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
plugins{
id "org.springframework.boot" apply false
id "com.github.ben-manes.versions"
id "org.unbroken-dome.test-sets" apply false
id 'jvm-test-suite'
}

//Shared configuration for all projects (root, library and example projects) including ones with a custom build.gradle
Expand Down
45 changes: 35 additions & 10 deletions client/build.gradle
Original file line number Diff line number Diff line change
@@ -1,18 +1,43 @@
apply plugin: 'java-library'
apply plugin: 'org.unbroken-dome.test-sets'

project.description = "A generic client that can be used with any SimplyRESTful API"

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17

testSets {
integrationTest
e2eTest
}

tasks.withType(Test){
useJUnitPlatform()
testing {
suites {
test {
useJUnitJupiter()
}
integrationTest(JvmTestSuite) {
dependencies {
implementation project()
}
configurations.integrationTestImplementation {
extendsFrom configurations.testImplementation
}
targets {
all {
testTask.configure {
shouldRunAfter(test)
}
}
}
}
e2eTest(JvmTestSuite) {
configurations.e2eTestImplementation {
extendsFrom configurations.integrationTestImplementation
}
targets {
all {
testTask.configure {
shouldRunAfter(integrationTest)
}
}
}
}
}
}

repositories {
Expand All @@ -31,12 +56,12 @@ dependencies {
testImplementation project(":SimplyRESTful")
testImplementation(platform(group: "org.junit", name: "junit-bom", version: junitVersion))
testImplementation('org.junit.jupiter:junit-jupiter')
testImplementation group: "org.mockito", name: "mockito-core", version: mockitoVersion
testImplementation group: "org.mockito", name: "mockito-junit-jupiter", version: mockitoVersion
testImplementation group: "org.glassfish.jersey.core", name: "jersey-client", version: jerseyVersion
testImplementation group: "org.glassfish.jersey.inject", name: "jersey-hk2", version: jerseyVersion
testImplementation group: "org.eclipse.parsson", name: "parsson", version: parssonVersion

integrationTestImplementation group: "org.mockito", name: "mockito-core", version: mockitoVersion
integrationTestImplementation group: "org.mockito", name: "mockito-junit-jupiter", version: mockitoVersion
integrationTestImplementation group: "org.glassfish.jersey.test-framework", name: "jersey-test-framework-core", version: jerseyVersion
integrationTestImplementation group: "org.glassfish.jersey.test-framework.providers", name: "jersey-test-framework-provider-jetty", version: jerseyVersion
integrationTestImplementation group: "jakarta.xml.bind", name: "jakarta.xml.bind-api", version: jakartaXmlBindVersion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@

import io.swagger.v3.jaxrs2.integration.resources.AcceptHeaderOpenApiResource;
import io.swagger.v3.jaxrs2.integration.resources.OpenApiResource;
import simplyrestful.api.framework.client.test.implementation.TestResource;
import simplyrestful.api.framework.client.test.implementation.TestWebResource;
import simplyrestful.api.framework.client.integrationtest.implementation.TestResource;
import simplyrestful.api.framework.client.integrationtest.implementation.TestWebResource;
import simplyrestful.api.framework.filters.UriCustomizer;
import simplyrestful.api.framework.providers.ObjectMapperProvider;
import simplyrestful.api.framework.resources.Link;
import simplyrestful.api.framework.servicedocument.WebResourceRoot;

@ExtendWith(MockitoExtension.class)
public class SimplyRESTfulClientTest extends JerseyTest {
public class SimplyRESTfulClientIntegrationTest extends JerseyTest {
public static final UUID UUID_NIL = UUID.fromString("00000000-0000-0000-0000-000000000000");
public static final URI INVALID_RESOURCE_URI_DIFFERENT_HOST = URI
.create("http://invalid-host/testresources/" + UUID_NIL.toString());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package simplyrestful.api.framework.client.integrationtest.implementation;

import java.net.URI;
import java.util.Objects;
import java.util.UUID;

import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.UriBuilder;
import simplyrestful.api.framework.resources.APIResource;
import simplyrestful.api.framework.resources.Link;

public class TestResource extends APIResource {
public static final String MEDIA_TYPE_JSON = "application/x.testresource-v1+json";
public static final UUID TEST_RESOURCE_ID = UUID.randomUUID();
public static final String ADDITIONAL_FIELD_TEST_VALUE = "additional-field-value";

private String additionalField;

public static URI getResourceUri(UUID id) {
return UriBuilder.fromUri(TestWebResource.getBaseUri()).path(TestWebResource.class).path(id.toString()).build();
}

private TestResource(URI resourceUri, String additionalField) {
this.additionalField = additionalField;
this.setSelf(new Link(resourceUri, customJsonMediaType()));
}

public TestResource() {
}

public static TestResource testInstance() {
return new TestResource(TestResource.getResourceUri(TEST_RESOURCE_ID), ADDITIONAL_FIELD_TEST_VALUE);
}

public static TestResource random() {
return TestResource.withId(UUID.randomUUID());
}

public static TestResource withId(UUID resourceId) {
return new TestResource(getResourceUri(resourceId), ADDITIONAL_FIELD_TEST_VALUE);
}

@Override
public MediaType customJsonMediaType() {
return MediaType.valueOf(MEDIA_TYPE_JSON);
}

public String getAdditionalField() {
return additionalField;
}

public void setAdditionalField(String additionalField) {
this.additionalField = additionalField;
}

@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + Objects.hash(additionalField);
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
TestResource other = (TestResource) obj;
return Objects.equals(additionalField, other.additionalField);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package simplyrestful.api.framework.client.integrationtest.implementation;

import java.net.URI;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Stream;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.InternalServerErrorException;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import simplyrestful.api.framework.DefaultWebResource;
import simplyrestful.api.framework.queryparams.SortOrder;
import simplyrestful.api.framework.webresource.api.implementation.DefaultCollectionGetEventStream;

@Path(TestWebResource.WEBRESOURCE_PATH)
@OpenAPIDefinition(tags = { @Tag(name = "Test Resources") })
@Produces(TestResource.MEDIA_TYPE_JSON)
@Consumes(TestResource.MEDIA_TYPE_JSON)
public class TestWebResource implements DefaultWebResource<TestResource>, DefaultCollectionGetEventStream<TestResource> {
public static final String WEBRESOURCE_PATH = "testresources";
public static final UUID ERROR_READ_RESOURCE_ID = UUID.randomUUID();
public static final UUID ERROR_UPDATE_RESOURCE_ID = UUID.randomUUID();
private static URI baseUri;

public static URI getBaseUri() {
return baseUri;
}

public static void setBaseUri(URI baseUri) {
TestWebResource.baseUri = baseUri;
}

@Override
public TestResource create(TestResource resource, UUID resourceUUID) {
// The provided resource is not actually stored anywhere in this test API.
return resource;
}

@Override
public TestResource read(UUID resourceUUID) {
if (Objects.equals(resourceUUID, TestResource.TEST_RESOURCE_ID)) {
return TestResource.testInstance();
}
if (Objects.equals(resourceUUID, ERROR_READ_RESOURCE_ID)) {
throw new InternalServerErrorException("Pretending that something went wrong on the server");
}
return null;
}

@Override
public TestResource update(TestResource resource, UUID resourceUUID) {
if (Objects.equals(resourceUUID, ERROR_UPDATE_RESOURCE_ID)) {
throw new InternalServerErrorException("Pretending that something went wrong on the server");
}
return TestResource.testInstance();
}

@Override
public TestResource delete(UUID resourceUUID) {
if (Objects.equals(resourceUUID, TestResource.TEST_RESOURCE_ID)) {
return TestResource.testInstance();
}
return null;
}

@Override
public List<TestResource> list(int pageStart, int pageSize, List<String> fields, String query, List<SortOrder> sort) {
return Arrays.asList(TestResource.testInstance(), TestResource.random());
}

@Override
public int count(String query) {
return 2;
}

@Override
public Stream<TestResource> stream(List<String> fields, String query, List<SortOrder> sort) {
return Stream.of(TestResource.testInstance(), TestResource.random());
}

@Override
public boolean exists(UUID resourceUUID) {
return this.read(resourceUUID) != null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package simplyrestful.api.framework.client.test;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider;

import jakarta.ws.rs.client.Client;
import simplyrestful.api.framework.client.SimplyRESTfulClientFactory;
import simplyrestful.api.framework.client.test.implementation.TestResource;
import simplyrestful.api.framework.providers.ObjectMapperProvider;

@ExtendWith(MockitoExtension.class)
public class SimplyRESTfulClientFactoryTest {
@Mock
Client client;

@Test
public void clientFactory_shouldUseProvidedJaxrsClientInClientAndRegisterRequiredProviders() {
new SimplyRESTfulClientFactory<TestResource>(client).newClient(null, TestResource.class);
Mockito.verify(client).register(JacksonJsonProvider.class);
Mockito.verify(client).register(ObjectMapperProvider.class);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.UriBuilder;

import simplyrestful.api.framework.resources.APIResource;
import simplyrestful.api.framework.resources.Link;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@
import java.util.UUID;
import java.util.stream.Stream;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.InternalServerErrorException;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.tags.Tag;
import simplyrestful.api.framework.DefaultWebResource;
import simplyrestful.api.framework.queryparams.SortOrder;
import simplyrestful.api.framework.webresource.api.implementation.DefaultCollectionGetEventStream;
Expand Down
1 change: 0 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# Gradle plugins
versionsPluginVersion = 0.44.0
testsetsPluginVersion = 4.0.0
# Jakarta EE dependencies
jakartaValidationVersion = 3.0.2
jakartaInjectVersion = 2.0.1
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
1 change: 0 additions & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ pluginManagement {
plugins {
id 'org.springframework.boot' version springBootVersion
id "com.github.ben-manes.versions" version versionsPluginVersion
id 'org.unbroken-dome.test-sets' version testsetsPluginVersion
}
}

Expand Down

0 comments on commit 6bdd003

Please sign in to comment.