Skip to content

Commit

Permalink
Merge pull request #18263 from wordpress-mobile/issue/18205-dashboard…
Browse files Browse the repository at this point in the history
…-cards-activity-log-networking

Dashboard Cards: Add Activity Log to card source
  • Loading branch information
zwarm authored Apr 13, 2023
2 parents 0a03c78 + fd5a272 commit 641a3bb
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import org.wordpress.android.modules.BG_THREAD
import org.wordpress.android.ui.mysite.MySiteSource.MySiteRefreshSource
import org.wordpress.android.ui.mysite.MySiteUiState.PartialState.CardsUpdate
import org.wordpress.android.ui.mysite.SelectedSiteRepository
import org.wordpress.android.util.config.DashboardCardActivityLogConfig
import org.wordpress.android.util.config.DashboardCardPagesConfig
import org.wordpress.android.util.config.MySiteDashboardTodaysStatsCardFeatureConfig
import javax.inject.Inject
Expand All @@ -27,12 +28,15 @@ class CardsSource @Inject constructor(
private val cardsStore: CardsStore,
todaysStatsCardFeatureConfig: MySiteDashboardTodaysStatsCardFeatureConfig,
dashboardCardPagesConfig: DashboardCardPagesConfig,
dashboardCardActivityLogConfig: DashboardCardActivityLogConfig,
@param:Named(BG_THREAD) private val bgDispatcher: CoroutineDispatcher
) : MySiteRefreshSource<CardsUpdate> {
private val isTodaysStatsCardFeatureConfigEnabled = todaysStatsCardFeatureConfig.isEnabled()

private val isDashboardCardPagesConfigEnabled = dashboardCardPagesConfig.isEnabled()

private val isDashboardCardActivityLogConfigEnabled = dashboardCardActivityLogConfig.isEnabled()

override val refresh = MutableLiveData(false)

override fun build(coroutineScope: CoroutineScope, siteLocalId: Int): LiveData<CardsUpdate> {
Expand Down Expand Up @@ -104,6 +108,7 @@ class CardsSource @Inject constructor(
private fun getCardTypes() = mutableListOf<Type>().apply {
if (isTodaysStatsCardFeatureConfigEnabled) add(Type.TODAYS_STATS)
if (isDashboardCardPagesConfigEnabled) add(Type.PAGES)
if (isDashboardCardActivityLogConfigEnabled) add(Type.ACTIVITY)
add(Type.POSTS)
}.toList()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import org.wordpress.android.BaseUnitTest
import org.wordpress.android.fluxc.model.SiteModel
import org.wordpress.android.fluxc.model.activity.ActivityLogModel
import org.wordpress.android.fluxc.model.dashboard.CardModel
import org.wordpress.android.fluxc.model.dashboard.CardModel.PostsCardModel
import org.wordpress.android.fluxc.model.dashboard.CardModel.PostsCardModel.PostCardModel
Expand All @@ -22,8 +23,10 @@ import org.wordpress.android.fluxc.store.dashboard.CardsStore
import org.wordpress.android.fluxc.store.dashboard.CardsStore.CardsError
import org.wordpress.android.fluxc.store.dashboard.CardsStore.CardsErrorType
import org.wordpress.android.fluxc.store.dashboard.CardsStore.CardsResult
import org.wordpress.android.fluxc.tools.FormattableContent
import org.wordpress.android.ui.mysite.MySiteUiState.PartialState.CardsUpdate
import org.wordpress.android.ui.mysite.SelectedSiteRepository
import org.wordpress.android.util.config.DashboardCardActivityLogConfig
import org.wordpress.android.util.config.DashboardCardPagesConfig
import org.wordpress.android.util.config.MySiteDashboardTodaysStatsCardFeatureConfig

Expand Down Expand Up @@ -54,6 +57,23 @@ const val PAGE_MODIFIED_ON = "2023-03-02 10:26:53"
const val PAGE_STATUS = "publish"
const val PAGE_DATE = "2023-03-02 10:30:53"

/* ACTIVITY */
const val ACTIVITY_ID = "activity123"
const val ACTIVITY_SUMMARY = "activity"
const val ACTIVITY_NAME = "name"
const val ACTIVITY_TYPE = "create a blog"
const val ACTIVITY_IS_REWINDABLE = false
const val ACTIVITY_REWIND_ID = "10.0"
const val ACTIVITY_GRID_ICON = "gridicon.jpg"
const val ACTIVITY_STATUS = "OK"
const val ACTIVITY_ACTOR_TYPE = "author"
const val ACTIVITY_ACTOR_NAME = "John Smith"
const val ACTIVITY_ACTOR_WPCOM_USER_ID = 15L
const val ACTIVITY_ACTOR_ROLE = "admin"
const val ACTIVITY_ACTOR_ICON_URL = "dog.jpg"
const val ACTIVITY_PUBLISHED_DATE = "2021-12-27 11:33:55"
const val ACTIVITY_CONTENT = "content"

/* MODEL */

private val TODAYS_STATS_CARDS_MODEL = TodaysStatsCardModel(
Expand Down Expand Up @@ -90,15 +110,41 @@ private val PAGES_MODEL = PagesCardModel(
pages = listOf(PAGE_MODEL)
)

private val ACTIVITY_LOG_MODEL = ActivityLogModel(
summary = ACTIVITY_SUMMARY,
content = FormattableContent(text = ACTIVITY_CONTENT),
name = ACTIVITY_NAME,
actor = ActivityLogModel.ActivityActor(
displayName = ACTIVITY_ACTOR_NAME,
type = ACTIVITY_ACTOR_TYPE,
wpcomUserID = ACTIVITY_ACTOR_WPCOM_USER_ID,
avatarURL = ACTIVITY_ACTOR_ICON_URL,
role = ACTIVITY_ACTOR_ROLE,
),
type = ACTIVITY_TYPE,
published = CardsUtils.fromDate(ACTIVITY_PUBLISHED_DATE),
rewindable = ACTIVITY_IS_REWINDABLE,
rewindID = ACTIVITY_REWIND_ID,
gridicon = ACTIVITY_GRID_ICON,
status = ACTIVITY_STATUS,
activityID = ACTIVITY_ID
)

private val ACTIVITY_CARD_MODEL = CardModel.ActivityCardModel(
activities = listOf(ACTIVITY_LOG_MODEL)
)

private val CARDS_MODEL: List<CardModel> = listOf(
TODAYS_STATS_CARDS_MODEL,
POSTS_MODEL,
PAGES_MODEL
PAGES_MODEL,
ACTIVITY_CARD_MODEL
)

private val DEFAULT_CARD_TYPE = listOf(CardModel.Type.POSTS)
private val STATS_FEATURED_ENABLED_CARD_TYPES = listOf(CardModel.Type.TODAYS_STATS, CardModel.Type.POSTS)
private val PAGES_FEATURED_ENABLED_CARD_TYPE = listOf(CardModel.Type.PAGES, CardModel.Type.POSTS)
private val ACTIVITY_FEATURED_ENABLED_CARD_TYPE = listOf(CardModel.Type.ACTIVITY, CardModel.Type.POSTS)

@ExperimentalCoroutinesApi
class CardsSourceTest : BaseUnitTest() {
Expand All @@ -117,6 +163,9 @@ class CardsSourceTest : BaseUnitTest() {
@Mock
private lateinit var dashboardCardPagesConfig: DashboardCardPagesConfig

@Mock
private lateinit var dashboardCardActivityLogConfig: DashboardCardActivityLogConfig

private lateinit var cardSource: CardsSource

private val data = CardsResult(
Expand All @@ -134,24 +183,32 @@ class CardsSourceTest : BaseUnitTest() {

private fun init(
isTodaysStatsCardFeatureConfigEnabled: Boolean = false,
isDashboardCardPagesConfigEnabled: Boolean = false
isDashboardCardPagesConfigEnabled: Boolean = false,
isDashboardCardActivityLogConfigEnabled: Boolean = false
) {
setUpMocks(isTodaysStatsCardFeatureConfigEnabled, isDashboardCardPagesConfigEnabled)
setUpMocks(
isTodaysStatsCardFeatureConfigEnabled,
isDashboardCardPagesConfigEnabled,
isDashboardCardActivityLogConfigEnabled
)
cardSource = CardsSource(
selectedSiteRepository,
cardsStore,
todaysStatsCardFeatureConfig,
dashboardCardPagesConfig,
dashboardCardActivityLogConfig,
testDispatcher()
)
}

private fun setUpMocks(
isTodaysStatsCardFeatureConfigEnabled: Boolean,
isDashboardCardPagesConfigEnabled: Boolean = false
isDashboardCardPagesConfigEnabled: Boolean = false,
isDashboardCardActivityLogConfig: Boolean = false
) {
whenever(todaysStatsCardFeatureConfig.isEnabled()).thenReturn(isTodaysStatsCardFeatureConfigEnabled)
whenever(dashboardCardPagesConfig.isEnabled()).thenReturn(isDashboardCardPagesConfigEnabled)
whenever(dashboardCardActivityLogConfig.isEnabled()).thenReturn(isDashboardCardActivityLogConfig)
whenever(siteModel.id).thenReturn(SITE_LOCAL_ID)
whenever(selectedSiteRepository.getSelectedSite()).thenReturn(siteModel)
}
Expand Down Expand Up @@ -440,4 +497,34 @@ class CardsSourceTest : BaseUnitTest() {

verify(cardsStore).fetchCards(siteModel, PAGES_FEATURED_ENABLED_CARD_TYPE)
}

@Test
fun `given activity feature enabled, when build is invoked, then activity from store(database)`() = test {
init(isDashboardCardActivityLogConfigEnabled = true)
val result = mutableListOf<CardsUpdate>()
whenever(cardsStore.getCards(siteModel, ACTIVITY_FEATURED_ENABLED_CARD_TYPE)).thenReturn(flowOf(data))

cardSource.build(testScope(), SITE_LOCAL_ID).observeForever {
it?.let { result.add(it) }
}

verify(cardsStore).getCards(siteModel, ACTIVITY_FEATURED_ENABLED_CARD_TYPE)
}

@Test
fun `given activity feature enabled, when refresh is invoked, then activity are requested from network`() =
test {
init(isDashboardCardActivityLogConfigEnabled = true)
val result = mutableListOf<CardsUpdate>()
whenever(cardsStore.getCards(siteModel, ACTIVITY_FEATURED_ENABLED_CARD_TYPE)).thenReturn(flowOf(data))
whenever(cardsStore.fetchCards(siteModel, ACTIVITY_FEATURED_ENABLED_CARD_TYPE)).thenReturn(success)
cardSource.refresh.observeForever { }

cardSource.build(testScope(), SITE_LOCAL_ID).observeForever {
it?.let { result.add(it) }
}
advanceUntilIdle()

verify(cardsStore).fetchCards(siteModel, ACTIVITY_FEATURED_ENABLED_CARD_TYPE)
}
}
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ ext {
automatticTracksVersion = '2.2.0'
gutenbergMobileVersion = 'v1.93.0'
wordPressAztecVersion = 'v1.6.3'
wordPressFluxCVersion = 'trunk-a6bbfa04f48fde3be1e30cc99eca5a617b087fd9'
wordPressFluxCVersion = 'trunk-1ca49e91927fd4bfb1a9b84dd90d8c794deb4fe7'
wordPressLoginVersion = '1.3.0'
wordPressPersistentEditTextVersion = '1.0.2'
wordPressUtilsVersion = '3.3.0'
Expand Down

0 comments on commit 641a3bb

Please sign in to comment.