Skip to content

Commit

Permalink
Add fetchBlazeCampaignObjectives() to BlazeCampaignsStore
Browse files Browse the repository at this point in the history
  • Loading branch information
irfano committed Sep 14, 2024
1 parent 12b756f commit b931b7b
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit b931b7b

Please sign in to comment.