Loading app/src/main/java/foundation/e/apps/domain/login/repository/LoginRepository.kt +1 −4 Original line number Diff line number Diff line Loading @@ -18,12 +18,9 @@ package foundation.e.apps.domain.login.repository import app.lounge.model.AnonymousAuthDataRequestBody import com.aurora.gplayapi.data.models.AuthData interface LoginRepository { suspend fun anonymousUser( authDataRequestBody: AnonymousAuthDataRequestBody ): AuthData suspend fun anonymousUser(): AuthData } app/src/main/java/foundation/e/apps/domain/login/repository/LoginRepositoryImpl.kt +11 −3 Original line number Diff line number Diff line Loading @@ -25,16 +25,24 @@ import app.lounge.networking.NetworkResult import app.lounge.storage.cache.configurations import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.utils.SystemInfoProvider import java.util.Properties import javax.inject.Inject class LoginRepositoryImpl @Inject constructor( @ApplicationContext val applicationContext: Context, private val properties: Properties, private val anonymousUser: AnonymousUser, @ApplicationContext val applicationContext: Context ) : LoginRepository { override suspend fun anonymousUser(authDataRequestBody: AnonymousAuthDataRequestBody): AuthData { private val userAgent: String by lazy { SystemInfoProvider.getAppBuildInfo() } override suspend fun anonymousUser(): AuthData { val result = anonymousUser.requestAuthData( anonymousAuthDataRequestBody = authDataRequestBody anonymousAuthDataRequestBody = AnonymousAuthDataRequestBody( properties = properties, userAgent = userAgent ) ) when (result) { Loading app/src/main/java/foundation/e/apps/domain/login/usecase/UserLoginUseCase.kt +2 −12 Original line number Diff line number Diff line Loading @@ -18,31 +18,21 @@ package foundation.e.apps.domain.login.usecase import app.lounge.model.AnonymousAuthDataRequestBody import com.aurora.gplayapi.data.models.AuthData import foundation.e.apps.domain.login.repository.LoginRepository import foundation.e.apps.utils.Resource import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.single import java.util.Properties import javax.inject.Inject class UserLoginUseCase @Inject constructor( private val loginRepository: LoginRepository, ) { suspend fun anonymousUser( properties: Properties, userAgent: String ): Resource<AuthData> = flow { suspend fun anonymousUser(): Resource<AuthData> = flow { try { emit(Resource.Loading) val userResponse = loginRepository.anonymousUser( authDataRequestBody = AnonymousAuthDataRequestBody( properties = properties, userAgent = userAgent ) ) val userResponse = loginRepository.anonymousUser() emit(Resource.Success(userResponse)) } catch (e: Exception) { emit(Resource.Error(e.localizedMessage)) Loading app/src/test/java/foundation/e/apps/Shared.kt +8 −7 Original line number Diff line number Diff line Loading @@ -20,15 +20,16 @@ package foundation.e.apps import app.lounge.model.AnonymousAuthDataRequestBody import com.aurora.gplayapi.data.models.AuthData import foundation.e.apps.utils.SystemInfoProvider import java.util.Properties val testAnonymousRequestBodyData = AnonymousAuthDataRequestBody( const val testEmailAddress: String = "eOS@murena.io" const val loginFailureMessage = "Fail to login" val testFailureException: Exception = Exception(loginFailureMessage) val testAnonymousRequestData = AnonymousAuthDataRequestBody( properties = Properties(), userAgent = "testUserAgent" userAgent = SystemInfoProvider.getAppBuildInfo() ) val testAnonymousResponseData = AuthData("eOS@murena.io", "") const val loginFailureMessage = "Fail to login" val testFailureException: Exception = Exception(loginFailureMessage) val testAnonymousResponseData = AuthData(testEmailAddress, "") app/src/test/java/foundation/e/apps/domain/login/repository/LoginRepositoryTest.kt +20 −19 Original line number Diff line number Diff line Loading @@ -23,8 +23,9 @@ import androidx.test.core.app.ApplicationProvider import app.lounge.login.anonymous.AnonymousUser import app.lounge.networking.NetworkResult import foundation.e.apps.loginFailureMessage import foundation.e.apps.testAnonymousRequestBodyData import foundation.e.apps.testAnonymousRequestData import foundation.e.apps.testAnonymousResponseData import foundation.e.apps.testEmailAddress import foundation.e.apps.testFailureException import kotlinx.coroutines.test.runTest import org.junit.Assert Loading @@ -42,32 +43,32 @@ class LoginRepositoryTest { @Mock lateinit var anonymousUser: AnonymousUser private lateinit var instrumentationContext: Context private lateinit var context: Context @Before fun setUp() { MockitoAnnotations.openMocks(this) instrumentationContext = ApplicationProvider.getApplicationContext<Context>() context = ApplicationProvider.getApplicationContext() } @Test fun testOnSuccessReturnAuthData() = runTest { Mockito.`when`(anonymousUser.requestAuthData(testAnonymousRequestBodyData)) .thenReturn(NetworkResult.Success(testAnonymousResponseData)) Mockito.`when`( anonymousUser.requestAuthData(testAnonymousRequestData) ).thenReturn(NetworkResult.Success(testAnonymousResponseData)) val result = LoginRepositoryImpl(anonymousUser, instrumentationContext) .run { anonymousUser(testAnonymousRequestBodyData) } val result = LoginRepositoryImpl(context, testAnonymousRequestData.properties, anonymousUser) .anonymousUser() Assert.assertNotNull(result) Assert.assertEquals("eOS@murena.io", result.email) Assert.assertEquals(testEmailAddress, result.email) } @Test fun testOnFailureReturnErrorWithException() = runTest { Mockito.`when`(anonymousUser.requestAuthData(testAnonymousRequestBodyData)) .thenReturn( Mockito.`when`( anonymousUser.requestAuthData(testAnonymousRequestData) ).thenReturn( NetworkResult.Error( exception = testFailureException, code = 1, Loading @@ -75,8 +76,8 @@ class LoginRepositoryTest { ) ) runCatching { LoginRepositoryImpl(anonymousUser, instrumentationContext) .run { anonymousUser(testAnonymousRequestBodyData) } LoginRepositoryImpl(context, testAnonymousRequestData.properties, anonymousUser) .run { anonymousUser() } }.onFailure { error -> Assert.assertEquals(testFailureException.message, error.message) } Loading Loading
app/src/main/java/foundation/e/apps/domain/login/repository/LoginRepository.kt +1 −4 Original line number Diff line number Diff line Loading @@ -18,12 +18,9 @@ package foundation.e.apps.domain.login.repository import app.lounge.model.AnonymousAuthDataRequestBody import com.aurora.gplayapi.data.models.AuthData interface LoginRepository { suspend fun anonymousUser( authDataRequestBody: AnonymousAuthDataRequestBody ): AuthData suspend fun anonymousUser(): AuthData }
app/src/main/java/foundation/e/apps/domain/login/repository/LoginRepositoryImpl.kt +11 −3 Original line number Diff line number Diff line Loading @@ -25,16 +25,24 @@ import app.lounge.networking.NetworkResult import app.lounge.storage.cache.configurations import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.utils.SystemInfoProvider import java.util.Properties import javax.inject.Inject class LoginRepositoryImpl @Inject constructor( @ApplicationContext val applicationContext: Context, private val properties: Properties, private val anonymousUser: AnonymousUser, @ApplicationContext val applicationContext: Context ) : LoginRepository { override suspend fun anonymousUser(authDataRequestBody: AnonymousAuthDataRequestBody): AuthData { private val userAgent: String by lazy { SystemInfoProvider.getAppBuildInfo() } override suspend fun anonymousUser(): AuthData { val result = anonymousUser.requestAuthData( anonymousAuthDataRequestBody = authDataRequestBody anonymousAuthDataRequestBody = AnonymousAuthDataRequestBody( properties = properties, userAgent = userAgent ) ) when (result) { Loading
app/src/main/java/foundation/e/apps/domain/login/usecase/UserLoginUseCase.kt +2 −12 Original line number Diff line number Diff line Loading @@ -18,31 +18,21 @@ package foundation.e.apps.domain.login.usecase import app.lounge.model.AnonymousAuthDataRequestBody import com.aurora.gplayapi.data.models.AuthData import foundation.e.apps.domain.login.repository.LoginRepository import foundation.e.apps.utils.Resource import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.single import java.util.Properties import javax.inject.Inject class UserLoginUseCase @Inject constructor( private val loginRepository: LoginRepository, ) { suspend fun anonymousUser( properties: Properties, userAgent: String ): Resource<AuthData> = flow { suspend fun anonymousUser(): Resource<AuthData> = flow { try { emit(Resource.Loading) val userResponse = loginRepository.anonymousUser( authDataRequestBody = AnonymousAuthDataRequestBody( properties = properties, userAgent = userAgent ) ) val userResponse = loginRepository.anonymousUser() emit(Resource.Success(userResponse)) } catch (e: Exception) { emit(Resource.Error(e.localizedMessage)) Loading
app/src/test/java/foundation/e/apps/Shared.kt +8 −7 Original line number Diff line number Diff line Loading @@ -20,15 +20,16 @@ package foundation.e.apps import app.lounge.model.AnonymousAuthDataRequestBody import com.aurora.gplayapi.data.models.AuthData import foundation.e.apps.utils.SystemInfoProvider import java.util.Properties val testAnonymousRequestBodyData = AnonymousAuthDataRequestBody( const val testEmailAddress: String = "eOS@murena.io" const val loginFailureMessage = "Fail to login" val testFailureException: Exception = Exception(loginFailureMessage) val testAnonymousRequestData = AnonymousAuthDataRequestBody( properties = Properties(), userAgent = "testUserAgent" userAgent = SystemInfoProvider.getAppBuildInfo() ) val testAnonymousResponseData = AuthData("eOS@murena.io", "") const val loginFailureMessage = "Fail to login" val testFailureException: Exception = Exception(loginFailureMessage) val testAnonymousResponseData = AuthData(testEmailAddress, "")
app/src/test/java/foundation/e/apps/domain/login/repository/LoginRepositoryTest.kt +20 −19 Original line number Diff line number Diff line Loading @@ -23,8 +23,9 @@ import androidx.test.core.app.ApplicationProvider import app.lounge.login.anonymous.AnonymousUser import app.lounge.networking.NetworkResult import foundation.e.apps.loginFailureMessage import foundation.e.apps.testAnonymousRequestBodyData import foundation.e.apps.testAnonymousRequestData import foundation.e.apps.testAnonymousResponseData import foundation.e.apps.testEmailAddress import foundation.e.apps.testFailureException import kotlinx.coroutines.test.runTest import org.junit.Assert Loading @@ -42,32 +43,32 @@ class LoginRepositoryTest { @Mock lateinit var anonymousUser: AnonymousUser private lateinit var instrumentationContext: Context private lateinit var context: Context @Before fun setUp() { MockitoAnnotations.openMocks(this) instrumentationContext = ApplicationProvider.getApplicationContext<Context>() context = ApplicationProvider.getApplicationContext() } @Test fun testOnSuccessReturnAuthData() = runTest { Mockito.`when`(anonymousUser.requestAuthData(testAnonymousRequestBodyData)) .thenReturn(NetworkResult.Success(testAnonymousResponseData)) Mockito.`when`( anonymousUser.requestAuthData(testAnonymousRequestData) ).thenReturn(NetworkResult.Success(testAnonymousResponseData)) val result = LoginRepositoryImpl(anonymousUser, instrumentationContext) .run { anonymousUser(testAnonymousRequestBodyData) } val result = LoginRepositoryImpl(context, testAnonymousRequestData.properties, anonymousUser) .anonymousUser() Assert.assertNotNull(result) Assert.assertEquals("eOS@murena.io", result.email) Assert.assertEquals(testEmailAddress, result.email) } @Test fun testOnFailureReturnErrorWithException() = runTest { Mockito.`when`(anonymousUser.requestAuthData(testAnonymousRequestBodyData)) .thenReturn( Mockito.`when`( anonymousUser.requestAuthData(testAnonymousRequestData) ).thenReturn( NetworkResult.Error( exception = testFailureException, code = 1, Loading @@ -75,8 +76,8 @@ class LoginRepositoryTest { ) ) runCatching { LoginRepositoryImpl(anonymousUser, instrumentationContext) .run { anonymousUser(testAnonymousRequestBodyData) } LoginRepositoryImpl(context, testAnonymousRequestData.properties, anonymousUser) .run { anonymousUser() } }.onFailure { error -> Assert.assertEquals(testFailureException.message, error.message) } Loading