From b931b7bd72f4b011f6c4dfa22af65f44079b2afb Mon Sep 17 00:00:00 2001 From: Irfan Omur Date: Sat, 14 Sep 2024 15:35:09 +0300 Subject: [PATCH] Add fetchBlazeCampaignObjectives() to BlazeCampaignsStore --- .../store/blaze/BlazeCampaignsStoreTest.kt | 21 +++++++++++++++ .../fluxc/store/blaze/BlazeCampaignsStore.kt | 27 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/example/src/test/java/org/wordpress/android/fluxc/store/blaze/BlazeCampaignsStoreTest.kt b/example/src/test/java/org/wordpress/android/fluxc/store/blaze/BlazeCampaignsStoreTest.kt index 2587c3aed2..2997a7bc54 100644 --- a/example/src/test/java/org/wordpress/android/fluxc/store/blaze/BlazeCampaignsStoreTest.kt +++ b/example/src/test/java/org/wordpress/android/fluxc/store/blaze/BlazeCampaignsStoreTest.kt @@ -18,6 +18,7 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.blaze.BlazeAdForecast import org.wordpress.android.fluxc.model.blaze.BlazeAdSuggestion import org.wordpress.android.fluxc.model.blaze.BlazeCampaignModel +import org.wordpress.android.fluxc.model.blaze.BlazeCampaignObjective import org.wordpress.android.fluxc.model.blaze.BlazeCampaignsModel import org.wordpress.android.fluxc.model.blaze.BlazePaymentMethod import org.wordpress.android.fluxc.model.blaze.BlazePaymentMethodUrls @@ -38,6 +39,7 @@ import org.wordpress.android.fluxc.network.rest.wpcom.blaze.BlazeCreationRestCli import org.wordpress.android.fluxc.network.rest.wpcom.blaze.CampaignImage import org.wordpress.android.fluxc.persistence.blaze.BlazeCampaignsDao import org.wordpress.android.fluxc.persistence.blaze.BlazeCampaignsDao.BlazeCampaignEntity +import org.wordpress.android.fluxc.persistence.blaze.BlazeCampaignsDao.BlazeCampaignObjectiveEntity import org.wordpress.android.fluxc.persistence.blaze.BlazeTargetingDao import org.wordpress.android.fluxc.persistence.blaze.BlazeTargetingDeviceEntity import org.wordpress.android.fluxc.persistence.blaze.BlazeTargetingLanguageEntity @@ -214,6 +216,25 @@ class BlazeCampaignsStoreTest { assertThat(result).isNull() } + @Test + fun `when fetching campaign objectives, then persist data in DB`() = test { + whenever(creationRestClient.fetchCampaignObjectives(any(), any())).thenReturn( + BlazeCreationRestClient.BlazePayload( + List(4) { + BlazeCampaignObjective( + id = it.toString(), + title = "Title $it", + description = "Description $it" + ) + } + ) + ) + + store.fetchBlazeCampaignObjectives(siteModel) + + verify(blazeCampaignsDao).replaceObjectives(any()) + } + @Test fun `when fetching targeting locations, then locations are returned`() = test { whenever(creationRestClient.fetchTargetingLocations(any(), any(), any())).thenReturn( diff --git a/fluxc/src/main/java/org/wordpress/android/fluxc/store/blaze/BlazeCampaignsStore.kt b/fluxc/src/main/java/org/wordpress/android/fluxc/store/blaze/BlazeCampaignsStore.kt index 6df92e78c2..9cb4b98622 100644 --- a/fluxc/src/main/java/org/wordpress/android/fluxc/store/blaze/BlazeCampaignsStore.kt +++ b/fluxc/src/main/java/org/wordpress/android/fluxc/store/blaze/BlazeCampaignsStore.kt @@ -18,6 +18,7 @@ import org.wordpress.android.fluxc.network.rest.wpcom.blaze.BlazeCampaignsRestCl import org.wordpress.android.fluxc.network.rest.wpcom.blaze.BlazeCreationRestClient import org.wordpress.android.fluxc.persistence.blaze.BlazeCampaignsDao import org.wordpress.android.fluxc.persistence.blaze.BlazeCampaignsDao.BlazeCampaignEntity +import org.wordpress.android.fluxc.persistence.blaze.BlazeCampaignsDao.BlazeCampaignObjectiveEntity import org.wordpress.android.fluxc.persistence.blaze.BlazeTargetingDao import org.wordpress.android.fluxc.persistence.blaze.BlazeTargetingDeviceEntity import org.wordpress.android.fluxc.persistence.blaze.BlazeTargetingLanguageEntity @@ -117,6 +118,32 @@ class BlazeCampaignsStore @Inject constructor( campaignsDao.observeMostRecentCampaignForSite(site.siteId) .map { it?.toDomainModel() } + suspend fun fetchBlazeCampaignObjectives( + site: SiteModel, + locale: String = Locale.getDefault().language + ) = coroutineEngine.withDefaultContext( + tag = AppLog.T.API, + caller = this, + loggedMessage = "fetch blaze objectives" + ) { + creationRestClient.fetchCampaignObjectives(site, locale).let { payload -> + when { + payload.isError -> BlazeResult(BlazeError(payload.error)) + else -> { + campaignsDao.replaceObjectives(payload.data?.map { + BlazeCampaignObjectiveEntity( + id = it.id, + title = it.title, + description = it.description, + locale = locale + ) + }.orEmpty()) + BlazeResult(payload.data) + } + } + } + } + suspend fun fetchBlazeTargetingLocations( site: SiteModel, query: String,