diff --git a/expediagroup-sdk-core/build.gradle b/expediagroup-sdk-core/build.gradle index 9b743bbd1..980cf94fc 100644 --- a/expediagroup-sdk-core/build.gradle +++ b/expediagroup-sdk-core/build.gradle @@ -29,6 +29,7 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testImplementation 'org.junit.jupiter:junit-jupiter-params' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testImplementation 'io.mockk:mockk:1.14.5' testImplementation 'com.squareup.okhttp3:mockwebserver:4.12.0' diff --git a/expediagroup-sdk-graphql/build.gradle b/expediagroup-sdk-graphql/build.gradle index 7a5e21da4..c482a570f 100644 --- a/expediagroup-sdk-graphql/build.gradle +++ b/expediagroup-sdk-graphql/build.gradle @@ -27,6 +27,7 @@ dependencies { testImplementation platform('org.junit:junit-bom:5.13.3') testImplementation 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testImplementation 'org.junit.jupiter:junit-jupiter-params' testImplementation 'io.mockk:mockk:1.14.5' testImplementation 'com.squareup.okhttp3:mockwebserver:4.12.0' @@ -76,7 +77,7 @@ kover { bound { aggregationForGroup = AggregationType.COVERED_PERCENTAGE coverageUnits = CoverageUnit.BRANCH - minValue = 92 + minValue = 83 } } } diff --git a/expediagroup-sdk-graphql/src/main/kotlin/com/expediagroup/sdk/graphql/ApolloOperationExtension.kt b/expediagroup-sdk-graphql/src/main/kotlin/com/expediagroup/sdk/graphql/ApolloOperationExtension.kt index 424affb3b..4a4675898 100644 --- a/expediagroup-sdk-graphql/src/main/kotlin/com/expediagroup/sdk/graphql/ApolloOperationExtension.kt +++ b/expediagroup-sdk-graphql/src/main/kotlin/com/expediagroup/sdk/graphql/ApolloOperationExtension.kt @@ -20,9 +20,11 @@ import com.apollographql.apollo.api.ApolloResponse import com.apollographql.apollo.api.Error import com.apollographql.apollo.api.Operation import com.apollographql.apollo.api.composeJsonRequest +import com.apollographql.apollo.api.http.HttpHeader import com.apollographql.apollo.api.json.buildJsonString import com.apollographql.apollo.api.json.jsonReader import com.apollographql.apollo.api.parseResponse +import com.apollographql.apollo.exception.ApolloHttpException import com.expediagroup.sdk.core.http.CommonMediaTypes import com.expediagroup.sdk.core.http.Method import com.expediagroup.sdk.core.http.Request @@ -52,6 +54,18 @@ fun Operation.toSDKRequest(url: String): Request { } fun Response.toApolloResponse(operation: Operation): ApolloResponse { + if (status.code != 200) { + return ApolloResponse.Builder(operation, request.id) + .exception( + ApolloHttpException( + statusCode = status.code, + headers = headers.entries().map { HttpHeader(it.key, it.value.toString()) }, + message = "Received non 200 response from the GraphQL server", + body = this.body?.source()?.buffer + ) + ).build() + } + val apolloResponse = this.body?.let { val jsonReader = it.source().buffer.jsonReader() diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/TestMutation.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/TestMutation.kt index 46109f461..11aa588d5 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/TestMutation.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/TestMutation.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/TestQuery.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/TestQuery.kt index c858c2cf3..0c80f481f 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/TestQuery.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/TestQuery.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/adapter/TestMutation_ResponseAdapter.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/adapter/TestMutation_ResponseAdapter.kt index 9f062c635..3b3be5591 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/adapter/TestMutation_ResponseAdapter.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/adapter/TestMutation_ResponseAdapter.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.adapter diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/adapter/TestQuery_ResponseAdapter.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/adapter/TestQuery_ResponseAdapter.kt index fd19e536b..87e101460 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/adapter/TestQuery_ResponseAdapter.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/adapter/TestQuery_ResponseAdapter.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.adapter diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/schema/__Schema.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/schema/__Schema.kt index f06f0516e..cf80836a8 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/schema/__Schema.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/schema/__Schema.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.schema diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/selections/TestMutationSelections.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/selections/TestMutationSelections.kt index e3daefa8f..d77bc4cf4 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/selections/TestMutationSelections.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/selections/TestMutationSelections.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.selections diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/selections/TestQuerySelections.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/selections/TestQuerySelections.kt index fa6f19792..a54368894 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/selections/TestQuerySelections.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/selections/TestQuerySelections.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.selections diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLBoolean.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLBoolean.kt index 4f12e841f..f52fc3a98 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLBoolean.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLBoolean.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.type diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLFloat.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLFloat.kt index 37f4d38a0..5bd56b46c 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLFloat.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLFloat.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.type diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLID.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLID.kt index b012ec330..a7dfa39a5 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLID.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLID.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.type diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLInt.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLInt.kt index 6a0f73390..3641af099 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLInt.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLInt.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.type diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLString.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLString.kt index b9d83ebc2..3f3ef9d85 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLString.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/GraphQLString.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.type diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/Mutation.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/Mutation.kt index 793691c55..f4f1d8bd2 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/Mutation.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/Mutation.kt @@ -1,13 +1,14 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.type import com.apollographql.apollo.api.BuilderFactory import com.apollographql.apollo.api.BuilderScope import com.apollographql.apollo.api.CustomScalarAdapters +import com.apollographql.apollo.api.DataBuilderDsl import com.apollographql.apollo.api.ObjectBuilder import com.apollographql.apollo.api.ObjectType import kotlin.Any @@ -23,6 +24,7 @@ public class Mutation { } } +@DataBuilderDsl public class MutationBuilder( customScalarAdapters: CustomScalarAdapters, ) : ObjectBuilder(customScalarAdapters) { diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/Query.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/Query.kt index c5cc529d5..d86a0a410 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/Query.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/Query.kt @@ -1,13 +1,14 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.type import com.apollographql.apollo.api.BuilderFactory import com.apollographql.apollo.api.BuilderScope import com.apollographql.apollo.api.CustomScalarAdapters +import com.apollographql.apollo.api.DataBuilderDsl import com.apollographql.apollo.api.ObjectBuilder import com.apollographql.apollo.api.ObjectType import kotlin.Any @@ -23,6 +24,7 @@ public class Query { } } +@DataBuilderDsl public class QueryBuilder( customScalarAdapters: CustomScalarAdapters, ) : ObjectBuilder(customScalarAdapters) { diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/TestData.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/TestData.kt index 5655b12ea..3008dad9b 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/TestData.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/TestData.kt @@ -1,13 +1,14 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.type import com.apollographql.apollo.api.BuilderFactory import com.apollographql.apollo.api.BuilderScope import com.apollographql.apollo.api.CustomScalarAdapters +import com.apollographql.apollo.api.DataBuilderDsl import com.apollographql.apollo.api.ObjectBuilder import com.apollographql.apollo.api.ObjectType import kotlin.Any @@ -23,6 +24,7 @@ public class TestData { } } +@DataBuilderDsl public class TestDataBuilder( customScalarAdapters: CustomScalarAdapters, ) : ObjectBuilder(customScalarAdapters) { diff --git a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/__CustomScalarAdapters.kt b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/__CustomScalarAdapters.kt index 2753022cc..a1c0e425b 100644 --- a/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/__CustomScalarAdapters.kt +++ b/expediagroup-sdk-graphql/src/test/graphql/generated/testservice/type/__CustomScalarAdapters.kt @@ -1,7 +1,7 @@ // // AUTO-GENERATED FILE. DO NOT MODIFY. // -// This class was automatically generated by Apollo GraphQL version '4.1.1'. +// This class was automatically generated by Apollo GraphQL version '4.3.1'. // package testservice.type diff --git a/expediagroup-sdk-graphql/src/test/kotlin/com/expediagroup/sdk/graphql/ApolloOperationExtensionTest.kt b/expediagroup-sdk-graphql/src/test/kotlin/com/expediagroup/sdk/graphql/ApolloOperationExtensionTest.kt index 66d0c1459..a9a39ccaf 100644 --- a/expediagroup-sdk-graphql/src/test/kotlin/com/expediagroup/sdk/graphql/ApolloOperationExtensionTest.kt +++ b/expediagroup-sdk-graphql/src/test/kotlin/com/expediagroup/sdk/graphql/ApolloOperationExtensionTest.kt @@ -1,6 +1,7 @@ package com.expediagroup.sdk.graphql import com.apollographql.apollo.api.toResponseJson +import com.apollographql.apollo.exception.ApolloHttpException import com.expediagroup.sdk.core.http.CommonMediaTypes import com.expediagroup.sdk.core.http.Method import com.expediagroup.sdk.core.http.Protocol @@ -13,6 +14,7 @@ import okio.Buffer import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertInstanceOf import testservice.TestMutation import testservice.TestQuery import testservice.type.buildTestData @@ -83,4 +85,23 @@ class ApolloOperationExtensionTest { assertEquals("Failed to parse response with null body", apolloResponse.errors?.get(0)?.message) assertNull(apolloResponse.data) } + + @Test + fun `toApolloResponse should populate exception when the response status is not 200`() { + // Given + val testSDKResponse = + Response.builder() + .status(Status.INTERNAL_SERVER_ERROR) + .protocol(Protocol.HTTP_1_1) + .request(mockk { every { id } returns UUID.randomUUID() }) + .build() + + // When + val apolloResponse = testSDKResponse.toApolloResponse(TestMutation()) + + // Expect + assertInstanceOf(apolloResponse.exception) + assertNull(apolloResponse.data) + assertNull(apolloResponse.errors) + } } diff --git a/expediagroup-sdk-rest/build.gradle b/expediagroup-sdk-rest/build.gradle index 77bad558e..961074c7d 100644 --- a/expediagroup-sdk-rest/build.gradle +++ b/expediagroup-sdk-rest/build.gradle @@ -29,6 +29,7 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testImplementation 'org.junit.jupiter:junit-jupiter-params' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testImplementation 'io.mockk:mockk:1.14.5' testImplementation 'com.squareup.okhttp3:mockwebserver:4.12.0' diff --git a/expediagroup-sdk-transport-okhttp/build.gradle b/expediagroup-sdk-transport-okhttp/build.gradle index ec075495c..2271f741b 100644 --- a/expediagroup-sdk-transport-okhttp/build.gradle +++ b/expediagroup-sdk-transport-okhttp/build.gradle @@ -26,6 +26,7 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testImplementation 'org.junit.jupiter:junit-jupiter-params' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testImplementation 'io.mockk:mockk:1.14.5' testImplementation 'com.squareup.okhttp3:mockwebserver:4.12.0'