'Android Mockito test cases with Retrofit

I am new to test cases and I am trying to write test cases for the below code but I did not get success after trying several method. My main target is to cover code coverage of MaintenanceStatusResponseHandler.kt class. I am using mockito to write the test cases. I am already implemented jococo for code coverage but I am facing some issue to write a test cases. Please help me to write test cases of MaintenanceStatusResponseHandler class

Thanks in advance

    internal class MaintenanceStatusResponseHandler {

    public fun getMaintenanceResponse(voiceAiConfig : VoiceAiConfig):MaintenanceStatus{
        
        val maintenanceStatus = MaintenanceStatus()
        val retrofitRepository = RetrofitRepository()
        val maintenanceUrl : String
        val jwtToken : String

            when (voiceAiConfig.server) {
                BuildConfig.ENV_PRODUCTION_SERVER -> {
                    jwtToken = BuildConfig.JWT_TOKEN_PRODUCTION
                    maintenanceUrl = BuildConfig.MAINTENANCE_PROD_URL
                }
                BuildConfig.ENV_STAGING_SERVER -> {
                    jwtToken = BuildConfig.JWT_TOKEN_STAGING
                    maintenanceUrl = BuildConfig.MAINTENANCE_SANDBOX_URL
                }
                else -> {
                    jwtToken = BuildConfig.JWT_TOKEN_SANDBOX
                    maintenanceUrl = BuildConfig.MAINTENANCE_SANDBOX_URL
                }
            }

        val header = "${VoiceAISDKConstant.JWT_TOKEN_PREFIX} $jwtToken"

        retrofitRepository.getRetrofit(maintenanceUrl)
            .getMaintenanceStatus(header)
            .subscribe { response: MaintenanceStatus.Content, error: Throwable? ->
                error.let {
                    if (error != null) {
                        maintenanceStatus.error = error
                    }
                }
                response.let {
                   maintenanceStatus.content = response
                }
            }
       return maintenanceStatus
    }
}

repository class

 class RetrofitRepository() {
    val TAG = RetrofitRepository::class.java.canonicalName

    fun getRetrofit(baseUrl: String?): VoiceAiServices {
      val voiceAiServices: VoiceAiServices =  Retrofit.Builder()
            .baseUrl(baseUrl!!)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build().create(VoiceAiServices::class.java)

        return voiceAiServices
    }
}

interface

interface VoiceAiServices {
@GET("/v1/api/status")
fun getMaintenanceStatus(@Header("Authorization")header: String): Single<MaintenanceStatus.Content>

}

Pojo class

 data class MaintenanceStatus(
    var error: Throwable? = null,
    var content: Content? = null
) {
    data class Content(
        val enabled: Boolean,
        val maintenanceMsg: String
    )
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source