Skip to content
This repository was archived by the owner on Feb 4, 2025. It is now read-only.

Commit 0e8dda9

Browse files
Merge pull request #2983 from wordpress-mobile/visitor-stats/summary
Visitor stats/summary
2 parents 9272127 + e85634a commit 0e8dda9

File tree

10 files changed

+1896
-9
lines changed

10 files changed

+1896
-9
lines changed

example/src/test/java/org/wordpress/android/fluxc/wc/stats/WCStatsStoreTest.kt

Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.wordpress.android.fluxc.wc.stats
22

3+
import androidx.room.Room
34
import com.yarolegovich.wellsql.WellSql
45
import junit.framework.TestCase.assertFalse
56
import kotlinx.coroutines.runBlocking
@@ -24,14 +25,18 @@ import org.wordpress.android.fluxc.UnitTestUtils
2425
import org.wordpress.android.fluxc.model.SiteModel
2526
import org.wordpress.android.fluxc.model.WCNewVisitorStatsModel
2627
import org.wordpress.android.fluxc.model.WCRevenueStatsModel
28+
import org.wordpress.android.fluxc.model.WCVisitorStatsSummary
2729
import org.wordpress.android.fluxc.network.BaseRequest.GenericErrorType
2830
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooError
2931
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooErrorType
32+
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooErrorType.GENERIC_ERROR
3033
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooPayload
3134
import org.wordpress.android.fluxc.network.rest.wpcom.wc.bundlestats.BundleStatsApiResponse
3235
import org.wordpress.android.fluxc.network.rest.wpcom.wc.bundlestats.BundleStatsRestClient
3336
import org.wordpress.android.fluxc.network.rest.wpcom.wc.bundlestats.BundleStatsTotals
3437
import org.wordpress.android.fluxc.network.rest.wpcom.wc.orderstats.OrderStatsRestClient
38+
import org.wordpress.android.fluxc.network.rest.wpcom.wc.orderstats.VisitorStatsSummaryApiResponse
39+
import org.wordpress.android.fluxc.persistence.WCAndroidDatabase
3540
import org.wordpress.android.fluxc.persistence.WCVisitorStatsSqlUtils
3641
import org.wordpress.android.fluxc.persistence.WellSqlConfig
3742
import org.wordpress.android.fluxc.store.WCStatsStore
@@ -54,12 +59,7 @@ class WCStatsStoreTest {
5459
private val mockOrderStatsRestClient = mock<OrderStatsRestClient>()
5560
private val mockBundleStatsRestClient = mock<BundleStatsRestClient>()
5661
private val appContext = RuntimeEnvironment.application.applicationContext
57-
private val wcStatsStore = WCStatsStore(
58-
Dispatcher(),
59-
mockOrderStatsRestClient,
60-
mockBundleStatsRestClient,
61-
initCoroutineEngine()
62-
)
62+
private lateinit var wcStatsStore: WCStatsStore
6363

6464
@Before
6565
fun setUp() {
@@ -73,6 +73,18 @@ class WCStatsStoreTest {
7373
)
7474
WellSql.init(config)
7575
config.reset()
76+
77+
val database = Room.inMemoryDatabaseBuilder(appContext, WCAndroidDatabase::class.java)
78+
.allowMainThreadQueries()
79+
.build()
80+
81+
wcStatsStore = WCStatsStore(
82+
dispatcher = Dispatcher(),
83+
wcOrderStatsClient = mockOrderStatsRestClient,
84+
bundleStatsRestClient = mockBundleStatsRestClient,
85+
coroutineEngine = initCoroutineEngine(),
86+
visitorSummaryStatsDao = database.visitorSummaryStatsDao
87+
)
7688
}
7789

7890
@Test
@@ -860,7 +872,7 @@ class WCStatsStoreTest {
860872
}
861873

862874
@Test
863-
fun testGetNewVisitorStatsWithInvalidData(){
875+
fun testGetNewVisitorStatsWithInvalidData() {
864876
// wrong-visitor-stats-data.json includes different wrong formatted data to ensure
865877
// that getNewVisitorStats is resilient and can recover from unexpected data
866878
//
@@ -947,4 +959,57 @@ class WCStatsStoreTest {
947959
assertEquals(result.model!!.itemsSold, totals.itemsSold)
948960
assertEquals(result.model!!.netRevenue, totals.netRevenue)
949961
}
962+
963+
@Test
964+
fun testSuccessfulFetchingVisitorSummaryStats() = runBlocking {
965+
val site = SiteModel().apply { id = 0 }
966+
val apiResponse = VisitorStatsSummaryApiResponse(
967+
date = "2024-03-01",
968+
period = "day",
969+
views = 3,
970+
visitors = 2
971+
)
972+
whenever(
973+
mockOrderStatsRestClient.fetchVisitorStatsSummary(
974+
site = site,
975+
granularity = StatsGranularity.DAYS,
976+
date = "2024-03-01",
977+
force = false
978+
)
979+
).thenReturn(WooPayload(apiResponse))
980+
981+
val result = wcStatsStore.fetchVisitorStatsSummary(
982+
site = site,
983+
granularity = StatsGranularity.DAYS,
984+
date = "2024-03-01"
985+
)
986+
987+
assertEquals(false, result.isError)
988+
assertEquals(WCVisitorStatsSummary(StatsGranularity.DAYS, "2024-03-01", 3, 2), result.model)
989+
assertEquals(
990+
WCVisitorStatsSummary(StatsGranularity.DAYS, "2024-03-01", 3, 2),
991+
wcStatsStore.getVisitorStatsSummary(site, StatsGranularity.DAYS, "2024-03-01")
992+
)
993+
}
994+
995+
@Test
996+
fun testFailedFetchingVisitorSummaryStats() = runBlocking {
997+
val site = SiteModel().apply { id = 0 }
998+
whenever(
999+
mockOrderStatsRestClient.fetchVisitorStatsSummary(
1000+
site = site,
1001+
granularity = StatsGranularity.DAYS,
1002+
date = "2024-03-01",
1003+
force = false
1004+
)
1005+
).thenReturn(WooPayload(WooError(GENERIC_ERROR, GenericErrorType.UNKNOWN)))
1006+
1007+
val result = wcStatsStore.fetchVisitorStatsSummary(
1008+
site = site,
1009+
granularity = StatsGranularity.DAYS,
1010+
date = "2024-03-01"
1011+
)
1012+
1013+
assertEquals(true, result.isError)
1014+
}
9501015
}

0 commit comments

Comments
 (0)