From 83f589a9adfe1dc61ba486047d7e665488aedde6 Mon Sep 17 00:00:00 2001 From: sonallux Date: Tue, 2 Dec 2025 20:44:02 +0100 Subject: [PATCH] chore: update to Java 21 --- .github/workflows/build.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/update.yml | 2 +- CHANGELOG.md | 1 + pom.xml | 2 +- .../java/generators/EndpointSplitter.java | 4 +- .../java/generators/ObjectGenerator.java | 33 +++++---- .../generators/SpotifyWebApiGenerator.java | 2 +- .../generator/java/util/JavaPackage.java | 3 +- .../generator/java/util/JavaUtils.java | 67 ++++++++++--------- .../spotify/api/SpotifyWebApiBuilder.java | 2 +- .../de/sonallux/spotify/api/http/Request.java | 6 +- .../sonallux/spotify/api/util/SpotifyUri.java | 2 +- .../sonallux/spotify/api/util/TextUtil.java | 2 +- .../sonallux/spotify/api/ConversionTest.java | 2 +- .../sonallux/spotify/api/SpotifyApiTest.java | 53 ++++++++------- .../AuthorizationRedirectResponseTest.java | 2 +- .../AuthorizationCodeFlowTest.java | 15 +++-- .../AuthorizationCodePKCEFlowTest.java | 15 +++-- .../ClientCredentialsFlowTest.java | 13 ++-- .../spotify/api/http/ApiClientTest.java | 6 ++ 21 files changed, 125 insertions(+), 111 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cbceb0cd..8767a29b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: ['17', '21', '25'] + java: ['21', '25'] name: Build on Java ${{ matrix.java }} steps: - name: Checkout diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7b2d883f..63d48f98 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -15,7 +15,7 @@ jobs: - name: Setup java uses: actions/setup-java@v5 with: - java-version: 17 + java-version: 21 distribution: 'temurin' cache: 'maven' server-id: central diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index e26a4574..bc3ff8dc 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -14,7 +14,7 @@ jobs: - name: Setup java uses: actions/setup-java@v5 with: - java-version: 17 + java-version: 21 distribution: 'temurin' cache: 'maven' - name: Get latest fixed open api definition diff --git a/CHANGELOG.md b/CHANGELOG.md index f4ecf2a1..772e7914 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] - Update to okhttp `5.3.2` +- Requiring Java 21 ## [4.3.2] - Remove `followers` property from `PlaylistUser` object diff --git a/pom.xml b/pom.xml index 2e69c27b..0bfb48bb 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ - 17 + 21 UTF-8 UTF-8 diff --git a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/EndpointSplitter.java b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/EndpointSplitter.java index b9073f8b..b9867668 100644 --- a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/EndpointSplitter.java +++ b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/EndpointSplitter.java @@ -26,7 +26,7 @@ public static void splitEndpoints(SpotifyWebApi spotifyWebApi) { endpoint.getScopes(), false ); - reorderEndpoint.addPathParameter(endpoint.getRequiredPathParameters().get(0), true); + reorderEndpoint.addPathParameter(endpoint.getRequiredPathParameters().getFirst(), true); endpoint.getOptionalBodyParameters().stream() .filter(param -> List.of("range_start", "insert_before", "range_length", "snapshot_id").contains(param.getName())) .forEach(param -> reorderEndpoint.addBodyParameter(param, List.of("range_start", "insert_before").contains(param.getName()))); @@ -42,7 +42,7 @@ public static void splitEndpoints(SpotifyWebApi spotifyWebApi) { endpoint.getScopes(), false ); - replaceEndpoint.addPathParameter(endpoint.getRequiredPathParameters().get(0), true); + replaceEndpoint.addPathParameter(endpoint.getRequiredPathParameters().getFirst(), true); endpoint.getOptionalQueryParameters().stream() .filter(param -> "uris".equals(param.getName())) .forEach(param -> replaceEndpoint.addQueryParameter(param, false)); diff --git a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/ObjectGenerator.java b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/ObjectGenerator.java index f4536677..15457058 100644 --- a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/ObjectGenerator.java +++ b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/ObjectGenerator.java @@ -94,25 +94,24 @@ private String generateApiObject(String openApiName, Schema schema) { if (composedSchema.getAllOf() != null) { var allOf = composedSchema.getAllOf(); if (allOf.size() == 1) { - if (allOf.get(0).get$ref().equals("#/components/schemas/PagingObject")) { + var ref = allOf.getFirst().get$ref(); + if (ref.equals("#/components/schemas/PagingObject")) { var itemsSchema = (ArraySchema) composedSchema.getProperties().get("items"); var itemsSchemaName = OpenApiUtils.getSchemaName(itemsSchema.getItems().get$ref()); var itemsObjectName = getObjectNameOrGenerate(itemsSchemaName, itemsSchema.getItems()); return "Paging<" + itemsObjectName + ">"; } - if (allOf.get(0).get$ref() != null) { - var referencedSchemaName = OpenApiUtils.getSchemaName(allOf.get(0).get$ref()); - var referencedObjectName = getObjectNameOrGenerate(referencedSchemaName, allOf.get(0)); - var apiObject = ApiObject.builder() - .name(objectName) - .openApiName(openApiName) - .superClassName(referencedObjectName) - .description(composedSchema.getDescription()) - .build(); - this.schemaObjects.put(objectName, apiObject); - return objectName; - } + var referencedSchemaName = OpenApiUtils.getSchemaName(ref); + var referencedObjectName = getObjectNameOrGenerate(referencedSchemaName, allOf.getFirst()); + var apiObject = ApiObject.builder() + .name(objectName) + .openApiName(openApiName) + .superClassName(referencedObjectName) + .description(composedSchema.getDescription()) + .build(); + this.schemaObjects.put(objectName, apiObject); + return objectName; } if (allOf.size() == 2) { if (allOf.get(0).get$ref().equals("#/components/schemas/PagingObject")) { @@ -128,7 +127,7 @@ private String generateApiObject(String openApiName, Schema schema) { return "CursorPaging<" + itemsObjectName + ">"; } - if (allOf.get(0).get$ref() != null && allOf.get(1) instanceof ObjectSchema objectSchema) { + if (allOf.get(1) instanceof ObjectSchema objectSchema) { var referencedSchemaName = OpenApiUtils.getSchemaName(allOf.get(0).get$ref()); var referencedObjectName = getObjectNameOrGenerate(referencedSchemaName, allOf.get(0)); @@ -169,8 +168,8 @@ private ApiObject.Property generateApiObjectProperty(String objectName, String n var resolvedSchema = generationContext.resolveSchema(schema); if (resolvedSchema instanceof ComposedSchema composedSchema && composedSchema.getAllOf() != null && composedSchema.getAllOf().size() == 1 && composedSchema.getProperties() == null) { - var innerSchemaName = OpenApiUtils.getSchemaName(composedSchema.getAllOf().get(0).get$ref()); - var innerSchema = generationContext.resolveSchema(composedSchema.getAllOf().get(0).get$ref()); + var innerSchemaName = OpenApiUtils.getSchemaName(composedSchema.getAllOf().getFirst().get$ref()); + var innerSchema = generationContext.resolveSchema(composedSchema.getAllOf().getFirst().get$ref()); var innerType = JavaUtils.getPrimitiveTypeOfSchema(innerSchema) .orElse(innerSchemaName.replace("Object", "")); @@ -253,7 +252,7 @@ private void fixContextForPaging(Map context) { context.put("className", context.get("className") + ""); @SuppressWarnings("unchecked") var properties = (List>)context.get("properties"); - properties.add(0, Map.of( + properties.addFirst(Map.of( "fieldName", "items", "hasDescription", true, "description", List.of("

The requested data.

"), diff --git a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/SpotifyWebApiGenerator.java b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/SpotifyWebApiGenerator.java index 8f9e8461..f9b44453 100644 --- a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/SpotifyWebApiGenerator.java +++ b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/generators/SpotifyWebApiGenerator.java @@ -26,7 +26,7 @@ public void generate() { private Map createContext(OpenAPI openAPI, JavaPackage javaPackage) { var context = new HashMap(); context.put("package", javaPackage.getName()); - context.put("endpointUrl", openAPI.getServers().get(0).getUrl()); + context.put("endpointUrl", openAPI.getServers().getFirst().getUrl()); var apis = openAPI.getPaths().values().stream() .flatMap(pathItem -> pathItem.readOperationsMap().values().stream()) diff --git a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/util/JavaPackage.java b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/util/JavaPackage.java index 94b8af7a..06eaa01c 100644 --- a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/util/JavaPackage.java +++ b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/util/JavaPackage.java @@ -23,8 +23,7 @@ public static JavaPackage fromNames(String... packageNames) { public static JavaPackage fromPackage(String packageName) { Preconditions.checkArgument(packageName != null); var packageNames = packageName.split("\\."); - Preconditions.checkArgument(isValidJavaPackageName(packageNames), "Invalid java package"); - return new JavaPackage(packageNames); + return fromNames(packageNames); } private static boolean isValidJavaPackageName(String[] packageNames) { diff --git a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/util/JavaUtils.java b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/util/JavaUtils.java index 4b64f69f..442ee61d 100644 --- a/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/util/JavaUtils.java +++ b/spotify-web-api-java-generator/src/main/java/de/sonallux/spotify/generator/java/util/JavaUtils.java @@ -97,52 +97,57 @@ public static Optional getTypeOfSchema(Schema schema) { // if no format is present, use single precision floating point number, for compatability reasons return Optional.of("Float"); } - if (schema instanceof ArraySchema arraySchema) { - return getTypeOfSchema(arraySchema.getItems()) + switch (schema) { + case ArraySchema arraySchema -> { + return getTypeOfSchema(arraySchema.getItems()) .map(itemsType -> "java.util.List<" + itemsType + ">") .or(() -> Optional.of("java.util.List>")); - } - if (schema instanceof ComposedSchema composedSchema) { - var allOf = composedSchema.getAllOf(); - if (allOf != null) { - if (allOf.size() == 1) { - if (allOf.get(0).get$ref().equals("#/components/schemas/PagingObject")) { - var itemsSchema = (ArraySchema) schema.getProperties().get("items"); - return getTypeOfSchema(itemsSchema.getItems()) + } + case ComposedSchema composedSchema -> { + var allOf = composedSchema.getAllOf(); + if (allOf != null) { + if (allOf.size() == 1) { + if (allOf.getFirst().get$ref().equals("#/components/schemas/PagingObject")) { + var itemsSchema = (ArraySchema) schema.getProperties().get("items"); + return getTypeOfSchema(itemsSchema.getItems()) .map(itemsType -> "Paging<" + itemsType + ">"); + } } - } - if (allOf.size() == 2) { - if (allOf.get(0).get$ref().equals("#/components/schemas/PagingObject")) { - var itemsSchema = (ArraySchema) allOf.get(1).getProperties().get("items"); - return getTypeOfSchema(itemsSchema.getItems()) + if (allOf.size() == 2) { + if (allOf.get(0).get$ref().equals("#/components/schemas/PagingObject")) { + var itemsSchema = (ArraySchema) allOf.get(1).getProperties().get("items"); + return getTypeOfSchema(itemsSchema.getItems()) .map(itemsType -> "Paging<" + itemsType + ">"); - } - if (allOf.get(0).get$ref().equals("#/components/schemas/CursorPagingObject")) { - var itemsSchema = (ArraySchema) allOf.get(1).getProperties().get("items"); - return getTypeOfSchema(itemsSchema.getItems()) + } + if (allOf.get(0).get$ref().equals("#/components/schemas/CursorPagingObject")) { + var itemsSchema = (ArraySchema) allOf.get(1).getProperties().get("items"); + return getTypeOfSchema(itemsSchema.getItems()) .map(itemsType -> "CursorPaging<" + itemsType + ">"); + } } } - } - var oneOf = composedSchema.getOneOf(); - if (oneOf != null) { - var allBaseObjects = oneOf.stream().map(JavaUtils::getTypeOfSchema) + var oneOf = composedSchema.getOneOf(); + if (oneOf != null) { + var allBaseObjects = oneOf.stream().map(JavaUtils::getTypeOfSchema) .filter(Optional::isPresent) .map(Optional::get) .allMatch(BaseObjectGenerator.BASE_OBJECT_NAMES::contains); - if (allBaseObjects) { - return Optional.of("BaseObject"); + if (allBaseObjects) { + return Optional.of("BaseObject"); + } } - } - // Resolve type of other composed schema via reference name - return Optional.empty(); - } + // Resolve type of other composed schema via reference name + return Optional.empty(); - if (schema instanceof MapSchema) { - return Optional.of("java.util.Map"); + // Resolve type of other composed schema via reference name + } + case MapSchema mapSchema -> { + return Optional.of("java.util.Map"); + } + default -> { + } } // Type can not be resolved just by schema diff --git a/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/SpotifyWebApiBuilder.java b/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/SpotifyWebApiBuilder.java index 4d0df366..ea7bf66c 100644 --- a/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/SpotifyWebApiBuilder.java +++ b/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/SpotifyWebApiBuilder.java @@ -86,7 +86,7 @@ public SpotifyWebApi build() { private ObjectMapper createDefaultObjectMapper() { return new ObjectMapper() .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .setSerializationInclusion(JsonInclude.Include.NON_NULL) + .setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL) .setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE) .registerModule(new JavaTimeModule()); } diff --git a/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/http/Request.java b/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/http/Request.java index fbbc7d10..82a417a6 100644 --- a/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/http/Request.java +++ b/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/http/Request.java @@ -88,12 +88,12 @@ private RequestBody createRequestBody(ObjectMapper objectMapper) throws IOExcept return rawBody.get(); } - if (getBodyParameters().size() > 0 && getFormParameters().size() > 0) { + if (!getBodyParameters().isEmpty() && !getFormParameters().isEmpty()) { throw new IllegalArgumentException("Can not use body parameters and form fields in one request"); - } else if (getBodyParameters().size() > 0) { + } else if (!getBodyParameters().isEmpty()) { byte[] bytes = objectMapper.writeValueAsBytes(getBodyParameters()); return RequestBody.create(bytes, JSON_MEDIA_TYPE); - } else if (getFormParameters().size() > 0) { + } else if (!getFormParameters().isEmpty()) { var formBuilder = new FormBody.Builder(); getFormParameters().forEach(formBuilder::add); return formBuilder.build(); diff --git a/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/util/SpotifyUri.java b/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/util/SpotifyUri.java index ef8c16e6..a95ff0fc 100644 --- a/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/util/SpotifyUri.java +++ b/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/util/SpotifyUri.java @@ -96,7 +96,7 @@ public String toString() { } public static SpotifyUri parseUri(String string) throws SpotifyUriException { - if (string == null || string.length() == 0) { + if (string == null || string.isEmpty()) { throw new SpotifyUriException("Can not parse empty spotifyUri"); } diff --git a/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/util/TextUtil.java b/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/util/TextUtil.java index 6d954719..2cf7a223 100644 --- a/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/util/TextUtil.java +++ b/spotify-web-api-java/src/main/java/de/sonallux/spotify/api/util/TextUtil.java @@ -4,6 +4,6 @@ public final class TextUtil { private TextUtil() {} public static boolean hasText(String str) { - return str != null && str.length() > 0; + return str != null && !str.isEmpty(); } } diff --git a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/ConversionTest.java b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/ConversionTest.java index 96fcc3a2..c45035b4 100644 --- a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/ConversionTest.java +++ b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/ConversionTest.java @@ -28,7 +28,7 @@ void setup() throws IOException { } @AfterEach - void teardown() throws IOException{ + void teardown() { webServer.close(); } diff --git a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/SpotifyApiTest.java b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/SpotifyApiTest.java index b191f79d..f769838b 100644 --- a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/SpotifyApiTest.java +++ b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/SpotifyApiTest.java @@ -32,7 +32,7 @@ void setup() throws IOException { } @AfterEach - void teardown() throws IOException{ + void teardown() { webServer.close(); } @@ -110,30 +110,31 @@ void handlesUnauthorizedResponseWithFailure() throws Exception { private final MockResponse mockResponseArtist = new MockResponse.Builder() .code(200) - .body("{\n" + - " \"external_urls\" : {\n" + - " \"spotify\" : \"https://open.spotify.com/artist/0OdUWJ0sBjDrqHygGUXeCF\"\n" + - " },\n" + - " \"followers\" : {\n" + - " \"href\" : null,\n" + - " \"total\" : 306565\n" + - " },\n" + - " \"genres\" : [ \"indie folk\", \"indie pop\" ],\n" + - " \"href\" : \"https://api.spotify.com/v1/artists/0OdUWJ0sBjDrqHygGUXeCF\",\n" + - " \"id\" : \"0OdUWJ0sBjDrqHygGUXeCF\",\n" + - " \"images\" : [ {\n" + - " \"height\" : 816,\n" + - " \"url\" : \"https://i.scdn.co/image/eb266625dab075341e8c4378a177a27370f91903\",\n" + - " \"width\" : 1000\n" + - " }, {\n" + - " \"height\" : 52,\n" + - " \"url\" : \"https://i.scdn.co/image/4f25297750dfa4051195c36809a9049f6b841a23\",\n" + - " \"width\" : 64\n" + - " } ],\n" + - " \"name\" : \"Band of Horses\",\n" + - " \"popularity\" : 59,\n" + - " \"type\" : \"artist\",\n" + - " \"uri\" : \"spotify:artist:0OdUWJ0sBjDrqHygGUXeCF\"\n" + - "}") + .body(""" + { + "external_urls" : { + "spotify" : "https://open.spotify.com/artist/0OdUWJ0sBjDrqHygGUXeCF" + }, + "followers" : { + "href" : null, + "total" : 306565 + }, + "genres" : [ "indie folk", "indie pop" ], + "href" : "https://api.spotify.com/v1/artists/0OdUWJ0sBjDrqHygGUXeCF", + "id" : "0OdUWJ0sBjDrqHygGUXeCF", + "images" : [ { + "height" : 816, + "url" : "https://i.scdn.co/image/eb266625dab075341e8c4378a177a27370f91903", + "width" : 1000 + }, { + "height" : 52, + "url" : "https://i.scdn.co/image/4f25297750dfa4051195c36809a9049f6b841a23", + "width" : 64 + } ], + "name" : "Band of Horses", + "popularity" : 59, + "type" : "artist", + "uri" : "spotify:artist:0OdUWJ0sBjDrqHygGUXeCF" + }""") .build(); } diff --git a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/AuthorizationRedirectResponseTest.java b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/AuthorizationRedirectResponseTest.java index 23a54ff1..3fad5905 100644 --- a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/AuthorizationRedirectResponseTest.java +++ b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/AuthorizationRedirectResponseTest.java @@ -11,7 +11,7 @@ public class AuthorizationRedirectResponseTest { private final Function contentExtractor = httpUrl -> { var code = httpUrl.queryParameter("code"); - if (code != null && code.length() > 0) { + if (code != null && !code.isEmpty()) { return code; } return null; diff --git a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/authorization_code/AuthorizationCodeFlowTest.java b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/authorization_code/AuthorizationCodeFlowTest.java index 018a1867..60df4aaa 100644 --- a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/authorization_code/AuthorizationCodeFlowTest.java +++ b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/authorization_code/AuthorizationCodeFlowTest.java @@ -35,7 +35,7 @@ void setup() throws IOException { } @AfterEach - void teardown() throws IOException{ + void teardown() { webServer.close(); } @@ -186,12 +186,13 @@ private void assertStoreAuthTokensFromResponse() { private final MockResponse mockResponseAuthTokens = new MockResponse.Builder() .code(200) - .body("{\n" + - " \"access_token\": \"NgA6ZcYIixn8bU\",\n" + - " \"token_type\": \"Bearer\",\n" + - " \"scope\": \"user-read-private user-read-email\",\n" + - " \"expires_in\": 3600\n" + - "}") + .body(""" + { + "access_token": "NgA6ZcYIixn8bU", + "token_type": "Bearer", + "scope": "user-read-private user-read-email", + "expires_in": 3600 + }""") .build(); private final MockResponse mockResponseBadRequestAuthTokens = new MockResponse.Builder() diff --git a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/authorization_code/AuthorizationCodePKCEFlowTest.java b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/authorization_code/AuthorizationCodePKCEFlowTest.java index 1639fcf0..04b6fb5e 100644 --- a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/authorization_code/AuthorizationCodePKCEFlowTest.java +++ b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/authorization_code/AuthorizationCodePKCEFlowTest.java @@ -35,7 +35,7 @@ void setup() throws IOException { } @AfterEach - void teardown() throws IOException{ + void teardown() { webServer.close(); } @@ -180,12 +180,13 @@ private void assertStoreAuthTokensFromResponse() { private final MockResponse mockResponseAuthTokens = new MockResponse.Builder() .code(200) - .body("{\n" + - " \"access_token\": \"NgA6ZcYIixn8bU\",\n" + - " \"token_type\": \"Bearer\",\n" + - " \"scope\": \"user-read-private user-read-email\",\n" + - " \"expires_in\": 3600\n" + - "}") + .body(""" + { + "access_token": "NgA6ZcYIixn8bU", + "token_type": "Bearer", + "scope": "user-read-private user-read-email", + "expires_in": 3600 + }""") .build(); private final MockResponse mockResponseBadRequestAuthTokens = new MockResponse.Builder() diff --git a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/client_credentials/ClientCredentialsFlowTest.java b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/client_credentials/ClientCredentialsFlowTest.java index 1ddd93e0..af956186 100644 --- a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/client_credentials/ClientCredentialsFlowTest.java +++ b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/authorization/client_credentials/ClientCredentialsFlowTest.java @@ -37,7 +37,7 @@ void setup() throws IOException { } @AfterEach - void teardown() throws IOException{ + void teardown() { webServer.close(); } @@ -82,11 +82,12 @@ private void assertAuthTokensRequest(RecordedRequest request) { private final MockResponse mockResponseAuthTokens = new MockResponse.Builder() .code(200) - .body("{\n" + - " \"access_token\": \"NgA6ZcYIixn8bU\",\n" + - " \"token_type\": \"Bearer\",\n" + - " \"expires_in\": 3600\n" + - "}") + .body(""" + { + "access_token": "NgA6ZcYIixn8bU", + "token_type": "Bearer", + "expires_in": 3600 + }""") .build(); private final MockResponse mockResponseBadRequestAuthTokens = new MockResponse.Builder() diff --git a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/http/ApiClientTest.java b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/http/ApiClientTest.java index 7373e796..9144edaa 100644 --- a/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/http/ApiClientTest.java +++ b/spotify-web-api-java/src/test/java/de/sonallux/spotify/api/http/ApiClientTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import mockwebserver3.MockResponse; import mockwebserver3.MockWebServer; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -26,6 +27,11 @@ void setup() throws IOException { .build(); } + @AfterEach + void teardown() { + webServer.close(); + } + @Test void getRequest() throws Exception { webServer.enqueue(new MockResponse.Builder()