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