Skip to content

Commit

Permalink
add requestId to VCLError
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelavoyan committed Aug 15, 2024
1 parent ac0b9c5 commit 65b2bb0
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 23 deletions.
4 changes: 2 additions & 2 deletions VCL/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -51,13 +60,15 @@ class VCLError(
.putOpt(KeyPayload, payload)
.putOpt(KeyError, error)
.putOpt(KeyErrorCode, errorCode)
.putOpt(KeyRequestId, requestId)
.putOpt(KeyMessage, message)
.putOpt(KeyStatusCode, statusCode)

companion object CodingKeys {
const val KeyPayload = "payload"
const val KeyError = "error"
const val KeyErrorCode = "errorCode"
const val KeyRequestId = "requestId"
const val KeyMessage = "message"
const val KeyStatusCode = "statusCode"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Pair<String, String>>?,
useCaches: Boolean,
completionBlock: (VCLResult<Response>) -> Unit
endpoint: String,
body: String?,
contentType: String,
method: Request.HttpMethod,
headers: List<Pair<String, String>>?,
useCaches: Boolean,
completionBlock: (VCLResult<Response>) -> Unit
) {

// val endpointToSend = if(method == Request.HttpMethod.GET) {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand All @@ -29,13 +30,15 @@ class VCLErrorTest {
val error = VCLError(
error = ErrorMocks.Error,
errorCode = ErrorMocks.ErrorCode,
requestId = ErrorMocks.RequestId,
message = ErrorMocks.Message,
statusCode = ErrorMocks.StatusCode
)

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)
}
Expand All @@ -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)
}
Expand All @@ -57,6 +61,7 @@ class VCLErrorTest {
val error = VCLError(
error = ErrorMocks.Error,
errorCode = ErrorMocks.ErrorCode,
requestId = ErrorMocks.RequestId,
message = ErrorMocks.Message,
statusCode = ErrorMocks.StatusCode
)
Expand All @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 65b2bb0

Please sign in to comment.