11package org.wordpress.android.fluxc.wc.stats
22
3+ import androidx.room.Room
34import com.yarolegovich.wellsql.WellSql
45import junit.framework.TestCase.assertFalse
56import kotlinx.coroutines.runBlocking
@@ -24,14 +25,18 @@ import org.wordpress.android.fluxc.UnitTestUtils
2425import org.wordpress.android.fluxc.model.SiteModel
2526import org.wordpress.android.fluxc.model.WCNewVisitorStatsModel
2627import org.wordpress.android.fluxc.model.WCRevenueStatsModel
28+ import org.wordpress.android.fluxc.model.WCVisitorStatsSummary
2729import org.wordpress.android.fluxc.network.BaseRequest.GenericErrorType
2830import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooError
2931import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooErrorType
32+ import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooErrorType.GENERIC_ERROR
3033import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooPayload
3134import org.wordpress.android.fluxc.network.rest.wpcom.wc.bundlestats.BundleStatsApiResponse
3235import org.wordpress.android.fluxc.network.rest.wpcom.wc.bundlestats.BundleStatsRestClient
3336import org.wordpress.android.fluxc.network.rest.wpcom.wc.bundlestats.BundleStatsTotals
3437import 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
3540import org.wordpress.android.fluxc.persistence.WCVisitorStatsSqlUtils
3641import org.wordpress.android.fluxc.persistence.WellSqlConfig
3742import 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