Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6b83e0b authored by Nishant Dande's avatar Nishant Dande
Browse files

Update the code as per review comment

parent dc40dc7f
Loading
Loading
Loading
Loading
Loading
+29 −14
Original line number Diff line number Diff line
@@ -4,9 +4,10 @@ import app.lounge.model.AnonymousAuthDataRequestBody
import app.lounge.model.AnonymousAuthDataValidationRequestBody
import app.lounge.model.AuthDataResponse
import app.lounge.model.AuthDataValidationResponse
import app.lounge.networking.NetworkFetching
import app.lounge.networking.NetworkFetchingRetrofitAPI
import app.lounge.networking.NetworkFetchingRetrofitImpl
import app.lounge.networking.NetworkResult
import app.lounge.networking.UserAuthentication
import app.lounge.networking.UserAuthenticationRetrofitAPI
import app.lounge.networking.UserAuthenticationRetrofitImpl
import kotlinx.coroutines.runBlocking
import okhttp3.OkHttpClient
import org.junit.Test
@@ -16,11 +17,11 @@ import java.io.InterruptedIOException
import java.util.Properties
import java.util.concurrent.TimeUnit

class NetworkFetchingAPITest {
class UserAuthenticationAPITest {

    private val networkFetchingToken: NetworkFetching = NetworkFetchingRetrofitImpl(
    private val userAuthenticationToken: UserAuthentication = UserAuthenticationRetrofitImpl(
        Retrofit.Builder()
            .baseUrl(NetworkFetchingRetrofitAPI.tokenBaseURL)
            .baseUrl(UserAuthenticationRetrofitAPI.tokenBaseURL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(
                OkHttpClient.Builder()
@@ -30,9 +31,9 @@ class NetworkFetchingAPITest {
            .build()
    )

    private val networkFetchingGoogle: NetworkFetching = NetworkFetchingRetrofitImpl(
    private val userAuthenticationGoogle: UserAuthentication = UserAuthenticationRetrofitImpl(
        Retrofit.Builder()
            .baseUrl(NetworkFetchingRetrofitAPI.googlePlayBaseURL)
            .baseUrl(UserAuthenticationRetrofitAPI.googlePlayBaseURL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(
                OkHttpClient.Builder()
@@ -42,9 +43,9 @@ class NetworkFetchingAPITest {
            .build()
    )

    private val networkFetchingTimeoutGoogle: NetworkFetching = NetworkFetchingRetrofitImpl(
    private val userAuthenticationTimeoutGoogle: UserAuthentication = UserAuthenticationRetrofitImpl(
        Retrofit.Builder()
            .baseUrl(NetworkFetchingRetrofitAPI.googlePlayBaseURL)
            .baseUrl(UserAuthenticationRetrofitAPI.googlePlayBaseURL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(
                OkHttpClient.Builder()
@@ -65,9 +66,14 @@ class NetworkFetchingAPITest {

    @Test
    fun test1OnSuccessReturnsAuthData() = runBlocking {
        authData = networkFetchingToken.requestAuthData(
        val response = userAuthenticationToken.requestAuthData(
            anonymousAuthDataRequestBody = requestBodyData,
        )
        when(response){
            is NetworkResult.Success -> authData = response.data
            else -> {}
        }

        assert(authData is AuthDataResponse) { "Assert!! Success must return data" }
    }

@@ -77,11 +83,15 @@ class NetworkFetchingAPITest {
        authData?.let { authData ->
            authData.dfeCookie = "null"

            result = networkFetchingGoogle.requestAuthDataValidation(
            val response = userAuthenticationGoogle.requestAuthDataValidation(
                anonymousAuthDataValidationRequestBody = AnonymousAuthDataValidationRequestBody(
                    authDataResponse = authData
                )
            )
            when(response){
                is NetworkResult.Success -> result = response.data
                else -> {}
            }
        }

        assert(authData is AuthDataResponse) { "Assert!! AuthData must be present" }
@@ -90,16 +100,21 @@ class NetworkFetchingAPITest {

    @Test
    fun test3OnTimeoutFailureReturnsError(): Unit = runBlocking {
        var failure: Exception = Exception("No Error")
        var failure: Throwable = Exception("No Error")
        authData?.let { authData ->
            authData.dfeCookie = "null"

            try {
                networkFetchingTimeoutGoogle.requestAuthDataValidation(
                val response = userAuthenticationTimeoutGoogle.requestAuthDataValidation(
                    anonymousAuthDataValidationRequestBody = AnonymousAuthDataValidationRequestBody(
                        authDataResponse = authData
                    )
                )

                when(response){
                    is NetworkResult.Error -> failure = response.exception
                    else -> {}
                }
            } catch (e: InterruptedIOException) { failure = e }
        }
        assert(authData is AuthDataResponse) { "Assert!! AuthData must be present" }
+2 −3
Original line number Diff line number Diff line
package app.lounge.di

import app.lounge.networking.NetworkFetchingRetrofitAPI
import dagger.Binds
import app.lounge.networking.UserAuthenticationRetrofitAPI
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@@ -24,7 +23,7 @@ internal object NetworkModule {
    @Singleton
    internal fun providesRetrofit(
        okHttpClient: OkHttpClient,
        baseUrl: String = NetworkFetchingRetrofitAPI.tokenBaseURL
        baseUrl: String = UserAuthenticationRetrofitAPI.tokenBaseURL
    ) : Retrofit {
        return Retrofit.Builder()
            .baseUrl(baseUrl)
+35 −0
Original line number Diff line number Diff line
package app.lounge.networking

import retrofit2.Response

sealed interface NetworkResult<T> {
    data class Success<T>(val data: T) : NetworkResult<T>
    data class Error<T>(
        val exception: Throwable,
        val code: Int,
        val errorMessage: String,
    ) : NetworkResult<T>
}

suspend fun <T> fetch(call: suspend () -> Response<T>): NetworkResult<T> {
    try {
        val response = call()
        if (response.isSuccessful) {
            response.body()?.let { result ->
                return NetworkResult.Success(result)
            }
        }

        return NetworkResult.Error(
            exception = Exception(response.message()),
            code = response.code(),
            errorMessage = " ${response.code()} ${response.message()}"
        )
    } catch (exception: Exception) {
        return NetworkResult.Error(
            exception = exception,
            code = exception.hashCode(),
            errorMessage = exception.toString()
        )
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -5,13 +5,13 @@ import app.lounge.model.AnonymousAuthDataValidationRequestBody
import app.lounge.model.AuthDataResponse
import app.lounge.model.AuthDataValidationResponse

interface NetworkFetching {
interface UserAuthentication {
    suspend  fun requestAuthData(
        anonymousAuthDataRequestBody: AnonymousAuthDataRequestBody
    ) : AuthDataResponse
    ) : NetworkResult<AuthDataResponse>

    suspend fun requestAuthDataValidation(
        anonymousAuthDataValidationRequestBody: AnonymousAuthDataValidationRequestBody
    ) : AuthDataValidationResponse
    ) : NetworkResult<AuthDataValidationResponse>
}
+23 −18
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import com.aurora.gplayapi.GooglePlayApi
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.http.Body
import retrofit2.http.HeaderMap
@@ -16,7 +17,7 @@ import retrofit2.http.POST
import javax.inject.Inject
import javax.inject.Singleton

interface NetworkFetchingRetrofitAPI {
interface UserAuthenticationRetrofitAPI {

    companion object {
        const val tokenBaseURL: String = "https://eu.gtoken.ecloud.global"
@@ -27,12 +28,12 @@ interface NetworkFetchingRetrofitAPI {
    suspend fun authDataRequest(
        @HeaderMap headers: Map<String, String>,
        @Body requestBody: RequestBody
    ): AuthDataResponse
    ): Response<AuthDataResponse>

    @POST(Path.sync)
    suspend fun validateAuthentication(
        @HeaderMap headers: Map<String, String>
    ): AuthDataValidationResponse
    ): Response<AuthDataValidationResponse>



@@ -50,17 +51,17 @@ interface NetworkFetchingRetrofitAPI {
}

@Singleton
class NetworkFetchingRetrofitImpl @Inject constructor(
class UserAuthenticationRetrofitImpl @Inject constructor(
    retrofit: Retrofit
) : NetworkFetching  {
) : UserAuthentication  {

    private val networkFetchingRetrofitAPI = retrofit.create(
        NetworkFetchingRetrofitAPI::class.java
    private val userAuthenticationRetrofitAPI = retrofit.create(
        UserAuthenticationRetrofitAPI::class.java
    )

    override suspend fun requestAuthData(
        anonymousAuthDataRequestBody: AnonymousAuthDataRequestBody
    ): AuthDataResponse {
    ): NetworkResult<AuthDataResponse> {
        val requestBody: RequestBody =
            anonymousAuthDataRequestBody.properties.toByteArray().let { result ->
                result.toRequestBody(
@@ -69,20 +70,24 @@ class NetworkFetchingRetrofitImpl @Inject constructor(
                    byteCount = result.size
                )
            }
        return networkFetchingRetrofitAPI.authDataRequest(
        return fetch {
            userAuthenticationRetrofitAPI.authDataRequest(
                requestBody = requestBody,
            headers = NetworkFetchingRetrofitAPI.Header.authData {
                headers = UserAuthenticationRetrofitAPI.Header.authData {
                    anonymousAuthDataRequestBody.userAgent
                }
            )
        }
    }

    override suspend fun requestAuthDataValidation(
        anonymousAuthDataValidationRequestBody: AnonymousAuthDataValidationRequestBody
    ): AuthDataValidationResponse {
        return networkFetchingRetrofitAPI.validateAuthentication(
    ): NetworkResult<AuthDataValidationResponse> {
        return fetch {
            userAuthenticationRetrofitAPI.validateAuthentication(
                headers = anonymousAuthDataValidationRequestBody.header
            )
        }
    }

}
 No newline at end of file