From 0394186e0894c91db41a7739f42116ffd165a933 Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Thu, 12 Oct 2023 17:19:12 +0300 Subject: [PATCH 1/3] Sets FluxC reference to PR --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 016018b8c636..0ffdffa22730 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ ext { automatticTracksVersion = '3.3.0' gutenbergMobileVersion = 'v1.105.0' wordPressAztecVersion = 'v1.8.0' - wordPressFluxCVersion = 'trunk-f3ba57a9f1d9be24a4f43f929c6d98bfd8539df2' + wordPressFluxCVersion = '2869-329bf4b6184cba90d35b358d2fad1e9083e6fc3c' wordPressLoginVersion = '1.6.0' wordPressPersistentEditTextVersion = '1.0.2' wordPressUtilsVersion = '3.10.0' From 66d6686e6385db2a31a58f8df3393a5454934864 Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Thu, 12 Oct 2023 17:20:31 +0300 Subject: [PATCH 2/3] Adds fetch all-domains use case --- .../usecases/FetchAllDomainsUseCase.kt | 30 +++++++ .../ui/domains/FetchAllDomainsUseCaseTest.kt | 89 +++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 WordPress/src/main/java/org/wordpress/android/ui/domains/usecases/FetchAllDomainsUseCase.kt create mode 100644 WordPress/src/test/java/org/wordpress/android/ui/domains/FetchAllDomainsUseCaseTest.kt diff --git a/WordPress/src/main/java/org/wordpress/android/ui/domains/usecases/FetchAllDomainsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/domains/usecases/FetchAllDomainsUseCase.kt new file mode 100644 index 000000000000..3db9c3d3e4ff --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/domains/usecases/FetchAllDomainsUseCase.kt @@ -0,0 +1,30 @@ +package org.wordpress.android.ui.domains.usecases + +import org.wordpress.android.fluxc.network.rest.wpcom.site.AllDomainsDomain +import org.wordpress.android.fluxc.store.SiteStore +import javax.inject.Inject + +class FetchAllDomainsUseCase @Inject constructor( + private val siteStore: SiteStore, +) { + suspend fun execute(): AllDomains { + val result = siteStore.fetchAllDomains() + return when { + result.isError -> AllDomains.Error + result.domains.isNullOrEmpty() -> return AllDomains.Empty + else -> result.domains?.run { + AllDomains.Success(this) + } ?: AllDomains.Empty + } + } +} + +sealed interface AllDomains { + data class Success( + val domains: List, + ) : AllDomains + + object Empty : AllDomains + + object Error : AllDomains +} diff --git a/WordPress/src/test/java/org/wordpress/android/ui/domains/FetchAllDomainsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/domains/FetchAllDomainsUseCaseTest.kt new file mode 100644 index 000000000000..b5d449e511e7 --- /dev/null +++ b/WordPress/src/test/java/org/wordpress/android/ui/domains/FetchAllDomainsUseCaseTest.kt @@ -0,0 +1,89 @@ +package org.wordpress.android.ui.domains + +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.runTest +import org.assertj.core.api.Assertions.assertThat +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.junit.MockitoJUnitRunner +import org.mockito.kotlin.whenever +import org.wordpress.android.BaseUnitTest +import org.wordpress.android.fluxc.network.rest.wpcom.site.AllDomainsDomain +import org.wordpress.android.fluxc.store.SiteStore +import org.wordpress.android.ui.domains.usecases.AllDomains +import org.wordpress.android.ui.domains.usecases.FetchAllDomainsUseCase + +@ExperimentalCoroutinesApi +@RunWith(MockitoJUnitRunner::class) +class FetchAllDomainsUseCaseTest: BaseUnitTest() { + @Mock + lateinit var store: SiteStore + + private lateinit var fetchAllDomainsUseCase: FetchAllDomainsUseCase + + @Before + fun setUp() { + fetchAllDomainsUseCase = FetchAllDomainsUseCase(store) + } + + @Test + fun `given all-domains call returns results, when the usecase is execute, returns success`() = runTest { + whenever(store.fetchAllDomains()).thenReturn( + SiteStore.FetchedAllDomainsPayload( + listOf( + AllDomainsDomain("test.domain.one"), + AllDomainsDomain("test.domain.two") + ) + ) + ) + + val result = fetchAllDomainsUseCase.execute() + + assertThat(result is AllDomains.Success).isTrue + with(result as AllDomains.Success) { + assertThat(domains.size).isEqualTo(2) + assertThat(domains[0].domain).isEqualTo("test.domain.one") + assertThat(domains[1].domain).isEqualTo("test.domain.two") + } + } + + @Test + fun `given the all-domain call returns error, when usecase is execute, returns error`() = runTest { + whenever(store.fetchAllDomains()).thenReturn( + SiteStore.FetchedAllDomainsPayload( + SiteStore.AllDomainsError( + SiteStore.AllDomainsErrorType.GENERIC_ERROR, + null + ) + ) + ) + + val result = fetchAllDomainsUseCase.execute() + + assertThat(result is AllDomains.Error).isTrue + } + + @Test + fun `given the all-domain call returns empty response, when usecase execute, returns empty`() = runTest { + whenever(store.fetchAllDomains()).thenReturn( + SiteStore.FetchedAllDomainsPayload(listOf()) + ) + + val result = fetchAllDomainsUseCase.execute() + + assertThat(result is AllDomains.Empty).isTrue + } + + @Test + fun `given the all-domain call returns null response, when usecase execute, returns empty`() = runTest { + whenever(store.fetchAllDomains()).thenReturn( + SiteStore.FetchedAllDomainsPayload(null) + ) + + val result = fetchAllDomainsUseCase.execute() + + assertThat(result is AllDomains.Empty).isTrue + } +} From 88b4e2aec67439fd80c24ca991ccda43d39fd4b9 Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Fri, 13 Oct 2023 13:08:33 +0300 Subject: [PATCH 3/3] Updates FluxC reference to point to trunk --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0ffdffa22730..7e6c1a19048c 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ ext { automatticTracksVersion = '3.3.0' gutenbergMobileVersion = 'v1.105.0' wordPressAztecVersion = 'v1.8.0' - wordPressFluxCVersion = '2869-329bf4b6184cba90d35b358d2fad1e9083e6fc3c' + wordPressFluxCVersion = 'trunk-21b9cb51949bff38713430b86c31e4620623dcf2' wordPressLoginVersion = '1.6.0' wordPressPersistentEditTextVersion = '1.0.2' wordPressUtilsVersion = '3.10.0'