@@ -626,6 +626,50 @@ final class StatsStoreV4Tests: XCTestCase {
626626 // Then
627627 XCTAssertTrue ( result. isFailure)
628628 }
629+
630+ /// Verifies that `StatsActionV4.retrieveSiteSummaryStats` effectively persists any retrieved SiteSummaryStats.
631+ ///
632+ func test_retrieveSiteSummaryStats_effectively_persists_retrieved_stats( ) {
633+ // Given
634+ let store = StatsStoreV4 ( dispatcher: dispatcher, storageManager: storageManager, network: network)
635+ network. simulateResponse ( requestUrlSuffix: " sites/ \( sampleSiteID) /stats/summary/ " , filename: " site-summary-stats " )
636+ XCTAssertEqual ( viewStorage. countObjects ( ofType: Storage . SiteSummaryStats. self) , 0 )
637+
638+ // When
639+ let result : Result < Networking . SiteSummaryStats , Error > = waitFor { promise in
640+ let action = StatsActionV4 . retrieveSiteSummaryStats ( siteID: self . sampleSiteID,
641+ period: . day,
642+ quantity: 1 ,
643+ latestDateToInclude: DateFormatter . dateFromString ( with: " 2022-12-09T17:06:55 " ) ,
644+ saveInStorage: true ) { result in
645+ promise ( result)
646+ }
647+ store. onAction ( action)
648+ }
649+
650+ // Then
651+ XCTAssertTrue ( result. isSuccess)
652+ XCTAssertEqual ( viewStorage. countObjects ( ofType: Storage . SiteSummaryStats. self) , 1 )
653+
654+ let readOnlySiteSummaryStats = viewStorage. firstObject ( ofType: Storage . SiteSummaryStats. self) ? . toReadOnly ( )
655+ XCTAssertEqual ( readOnlySiteSummaryStats, sampleSiteSummaryStats ( ) )
656+ }
657+
658+ /// Verifies that `upsertStoredSiteSummaryStats` does not produce duplicate entries.
659+ ///
660+ func test_upsertStoredSiteSummaryStats_effectively_updates_preexistant_SiteSummaryStats( ) {
661+ let statsStore = StatsStoreV4 ( dispatcher: dispatcher, storageManager: storageManager, network: network)
662+
663+ XCTAssertNil ( viewStorage. loadSiteSummaryStats ( date: " 2022-12-09 " , period: StatGranularity . day. rawValue) )
664+ statsStore. upsertStoredSiteSummaryStats ( readOnlyStats: sampleSiteSummaryStats ( ) )
665+ XCTAssertEqual ( viewStorage. countObjects ( ofType: Storage . SiteSummaryStats. self) , 1 )
666+ statsStore. upsertStoredSiteSummaryStats ( readOnlyStats: sampleSiteSummaryStatsMutated ( ) )
667+ XCTAssertEqual ( viewStorage. countObjects ( ofType: Storage . SiteSummaryStats. self) , 1 )
668+
669+ let expectedSiteSummaryStats = sampleSiteSummaryStatsMutated ( )
670+ let storageSiteSummaryStats = viewStorage. loadSiteSummaryStats ( date: " 2022-12-09 " , period: StatGranularity . day. rawValue)
671+ XCTAssertEqual ( storageSiteSummaryStats? . toReadOnly ( ) , expectedSiteSummaryStats)
672+ }
629673}
630674
631675
@@ -817,6 +861,14 @@ private extension StatsStoreV4Tests {
817861 views: 123 )
818862 }
819863
864+ func sampleSiteSummaryStatsMutated( ) -> Networking . SiteSummaryStats {
865+ return SiteSummaryStats ( siteID: sampleSiteID,
866+ date: " 2022-12-09 " ,
867+ period: . day,
868+ visitors: 15 ,
869+ views: 127 )
870+ }
871+
820872 func sampleSiteSummaryStatsQuarter( ) -> Networking . SiteSummaryStats {
821873 return SiteSummaryStats ( siteID: sampleSiteID,
822874 date: " 2022-12-09 " ,
0 commit comments