diff --git a/VCL/build.gradle b/VCL/build.gradle index 8d6de3c9..47b72061 100644 --- a/VCL/build.gradle +++ b/VCL/build.gradle @@ -12,8 +12,8 @@ android { defaultConfig { minSdk 24 targetSdk 34 - versionName "2.5.4" - versionCode 144 + versionName "2.5.5" + versionCode 145 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" } diff --git a/VCL/src/main/java/io/velocitycareerlabs/api/entities/error/VCLError.kt b/VCL/src/main/java/io/velocitycareerlabs/api/entities/error/VCLError.kt index 5677b6d8..78f9aa63 100644 --- a/VCL/src/main/java/io/velocitycareerlabs/api/entities/error/VCLError.kt +++ b/VCL/src/main/java/io/velocitycareerlabs/api/entities/error/VCLError.kt @@ -15,34 +15,43 @@ class VCLError( var payload: String? = null var error: String? = null var errorCode: String = VCLErrorCode.SdkError.value + var requestId: String? = null override var message: String? = null var statusCode: Int? = null constructor( error: String? = null, errorCode: String = VCLErrorCode.SdkError.value, + requestId: String? = null, message: String? = null, statusCode: Int? = null, ) : this() { this.error = error this.errorCode = errorCode + this.requestId = requestId this.message = message this.statusCode = statusCode } - constructor(payload: String?, errorCode: String? = null): this() { + constructor( + payload: String?, + errorCode: String? = null + ): this() { val payloadJson = payload?.toJsonObject() this.payload = payload this.error = payloadJson?.optString(KeyError) this.errorCode = errorCode ?: payloadJson?.optString(KeyErrorCode) ?: VCLErrorCode.SdkError.value + this.requestId = payloadJson?.optString(KeyRequestId) this.message = payloadJson?.optString(KeyMessage) this.statusCode = payloadJson?.optInt(KeyStatusCode) } - constructor(exception: Exception, statusCode: Int? = null): this() { - this.payload = null - this.error = null - this.errorCode = VCLErrorCode.SdkError.value + constructor( + exception: Exception, + errorCode: String = VCLErrorCode.SdkError.value, + statusCode: Int? = null + ): this() { + this.errorCode = errorCode this.message = exception.toString() this.statusCode = statusCode } @@ -51,6 +60,7 @@ class VCLError( .putOpt(KeyPayload, payload) .putOpt(KeyError, error) .putOpt(KeyErrorCode, errorCode) + .putOpt(KeyRequestId, requestId) .putOpt(KeyMessage, message) .putOpt(KeyStatusCode, statusCode) @@ -58,6 +68,7 @@ class VCLError( const val KeyPayload = "payload" const val KeyError = "error" const val KeyErrorCode = "errorCode" + const val KeyRequestId = "requestId" const val KeyMessage = "message" const val KeyStatusCode = "statusCode" } diff --git a/VCL/src/main/java/io/velocitycareerlabs/impl/data/infrastructure/network/NetworkServiceImpl.kt b/VCL/src/main/java/io/velocitycareerlabs/impl/data/infrastructure/network/NetworkServiceImpl.kt index 83f89628..24efcade 100644 --- a/VCL/src/main/java/io/velocitycareerlabs/impl/data/infrastructure/network/NetworkServiceImpl.kt +++ b/VCL/src/main/java/io/velocitycareerlabs/impl/data/infrastructure/network/NetworkServiceImpl.kt @@ -24,13 +24,13 @@ internal class NetworkServiceImpl: NetworkService { private val TAG = NetworkServiceImpl::class.simpleName override fun sendRequest( - endpoint: String, - body: String?, - contentType: String, - method: Request.HttpMethod, - headers: List>?, - useCaches: Boolean, - completionBlock: (VCLResult) -> Unit + endpoint: String, + body: String?, + contentType: String, + method: Request.HttpMethod, + headers: List>?, + useCaches: Boolean, + completionBlock: (VCLResult) -> Unit ) { // val endpointToSend = if(method == Request.HttpMethod.GET) { @@ -71,16 +71,30 @@ internal class NetworkServiceImpl: NetworkService { completionBlock(VCLResult.Success(response)) } else { val errorMessageStream = connection.errorStream ?: connection.inputStream - completionBlock(VCLResult.Failure( - VCLError( - payload = errorMessageStream.convertToString() + completionBlock( + VCLResult.Failure( + VCLError(payload = errorMessageStream.convertToString()) + ) ) - )) } } catch (ex: NetworkErrorException) { - completionBlock(VCLResult.Failure(VCLError(exception = ex, statusCode = VCLStatusCode.NetworkError.value))) + completionBlock( + VCLResult.Failure( + VCLError( + exception = ex, + statusCode = VCLStatusCode.NetworkError.value + ) + ) + ) } catch (ex: UnknownHostException) { - completionBlock(VCLResult.Failure(VCLError(exception = ex, statusCode = VCLStatusCode.NetworkError.value))) + completionBlock( + VCLResult.Failure( + VCLError( + exception = ex, + statusCode = VCLStatusCode.NetworkError.value + ) + ) + ) } catch (ex: Exception) { completionBlock(VCLResult.Failure(VCLError(exception = ex))) } finally { @@ -141,7 +155,7 @@ internal class NetworkServiceImpl: NetworkService { } private fun logResponse(response: Response) { - VCLLog.d(TAG, "Response:\nstatus code: "+response.code) + VCLLog.d(TAG, "Response:\nstatus code: " + response.code) VCLLog.d(TAG, response.payload) } } \ No newline at end of file diff --git a/VCL/src/test/java/io/velocitycareerlabs/entities/VCLErrorTest.kt b/VCL/src/test/java/io/velocitycareerlabs/entities/VCLErrorTest.kt index a5c291f9..6ffcc26f 100644 --- a/VCL/src/test/java/io/velocitycareerlabs/entities/VCLErrorTest.kt +++ b/VCL/src/test/java/io/velocitycareerlabs/entities/VCLErrorTest.kt @@ -20,6 +20,7 @@ class VCLErrorTest { assert(error.payload == ErrorMocks.Payload) assert(error.error == ErrorMocks.Error) assert(error.errorCode == ErrorMocks.ErrorCode) + assert(error.requestId == ErrorMocks.RequestId) assert(error.message == ErrorMocks.Message) assert(error.statusCode == ErrorMocks.StatusCode) } @@ -29,6 +30,7 @@ class VCLErrorTest { val error = VCLError( error = ErrorMocks.Error, errorCode = ErrorMocks.ErrorCode, + requestId = ErrorMocks.RequestId, message = ErrorMocks.Message, statusCode = ErrorMocks.StatusCode ) @@ -36,6 +38,7 @@ class VCLErrorTest { assert(error.payload == null) assert(error.error == ErrorMocks.Error) assert(error.errorCode == ErrorMocks.ErrorCode) + assert(error.requestId == ErrorMocks.RequestId) assert(error.message == ErrorMocks.Message) assert(error.statusCode == ErrorMocks.StatusCode) } @@ -48,6 +51,7 @@ class VCLErrorTest { assert(errorJsonObject.optString(VCLError.KeyPayload) == ErrorMocks.Payload) assert(errorJsonObject.optString(VCLError.KeyError) == ErrorMocks.Error) assert(errorJsonObject.optString(VCLError.KeyErrorCode) == ErrorMocks.ErrorCode) + assert(errorJsonObject.optString(VCLError.KeyRequestId) == ErrorMocks.RequestId) assert(errorJsonObject.optString(VCLError.KeyMessage) == ErrorMocks.Message) assert(errorJsonObject.optInt(VCLError.KeyStatusCode) == ErrorMocks.StatusCode) } @@ -57,6 +61,7 @@ class VCLErrorTest { val error = VCLError( error = ErrorMocks.Error, errorCode = ErrorMocks.ErrorCode, + requestId = ErrorMocks.RequestId, message = ErrorMocks.Message, statusCode = ErrorMocks.StatusCode ) @@ -65,6 +70,7 @@ class VCLErrorTest { assert(errorJsonObject.optString(VCLError.KeyPayload) == "") assert(errorJsonObject.optString(VCLError.KeyError) == ErrorMocks.Error) assert(errorJsonObject.optString(VCLError.KeyErrorCode) == ErrorMocks.ErrorCode) + assert(errorJsonObject.optString(VCLError.KeyRequestId) == ErrorMocks.RequestId) assert(errorJsonObject.optString(VCLError.KeyMessage) == ErrorMocks.Message) assert(errorJsonObject.optInt(VCLError.KeyStatusCode) == ErrorMocks.StatusCode) } diff --git a/VCL/src/test/java/io/velocitycareerlabs/infrastructure/resources/valid/ErrorMocks.kt b/VCL/src/test/java/io/velocitycareerlabs/infrastructure/resources/valid/ErrorMocks.kt index aae8bd66..c67c61a7 100644 --- a/VCL/src/test/java/io/velocitycareerlabs/infrastructure/resources/valid/ErrorMocks.kt +++ b/VCL/src/test/java/io/velocitycareerlabs/infrastructure/resources/valid/ErrorMocks.kt @@ -10,9 +10,10 @@ package io.velocitycareerlabs.infrastructure.resources.valid class ErrorMocks { companion object { - val Payload = "{\"error\":\"Bad Request\",\"errorCode\": \"proof_jwt_is_required\",\"message\":\"proof.jwt is missing\",\"statusCode\": 400}" + val Payload = "{\"error\":\"Bad Request\",\"errorCode\": \"proof_jwt_is_required\",\"requestId\": \"some_request_id\",\"message\":\"proof.jwt is missing\",\"statusCode\": 400}" val Error = "Bad Request" val ErrorCode = "proof_jwt_is_required" + val RequestId = "some_request_id" val Message = "proof.jwt is missing" val StatusCode = 400 } diff --git a/build.gradle b/build.gradle index bb90e049..cdfefe5f 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.5.1' + classpath 'com.android.tools.build:gradle:8.5.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong