Skip to content

Commit 87f5942

Browse files
authored
Merge pull request #8449 from woocommerce/fix/stats-store-v4-unit-tests
[Stats] Use custom timezone for retrieveSiteSummaryStats stats action
2 parents 95995ca + e347d80 commit 87f5942

File tree

8 files changed

+22
-6
lines changed

8 files changed

+22
-6
lines changed

WooCommerce/Classes/ViewRelated/Dashboard/Analytics Hub/AnalyticsHubViewModel.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ private extension AnalyticsHubViewModel {
222222

223223
return try await withCheckedThrowingContinuation { continuation in
224224
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: siteID,
225+
siteTimezone: .current,
225226
period: period,
226227
quantity: timeRangeSelectionType.quantity,
227228
latestDateToInclude: latestDateToInclude,

WooCommerce/Classes/ViewRelated/Dashboard/DashboardViewModel.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,12 @@ final class DashboardViewModel {
9090

9191
/// Syncs summary stats for dashboard UI.
9292
func syncSiteSummaryStats(for siteID: Int64,
93+
siteTimezone: TimeZone,
9394
timeRange: StatsTimeRangeV4,
9495
latestDateToInclude: Date,
9596
onCompletion: ((Result<Void, Error>) -> Void)? = nil) {
9697
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: siteID,
98+
siteTimezone: siteTimezone,
9799
period: timeRange.summaryStatsGranularity,
98100
quantity: 1,
99101
latestDateToInclude: latestDateToInclude,

WooCommerce/Classes/ViewRelated/Dashboard/Stats v4/StoreStatsAndTopPerformersViewController.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ private extension StoreStatsAndTopPerformersViewController {
291291
periodGroup.enter()
292292
periodStoreStatsGroup.enter()
293293
self.dashboardViewModel.syncSiteSummaryStats(for: siteID,
294+
siteTimezone: timezoneForSync,
294295
timeRange: vc.timeRange,
295296
latestDateToInclude: latestDateToInclude) { result in
296297
if case let .failure(error) = result {

WooCommerce/WooCommerceTests/ViewRelated/Dashboard/Analytics Hub/AnalyticsHubViewModelTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ final class AnalyticsHubViewModelTests: XCTestCase {
2626
case let .retrieveTopEarnerStats(_, _, _, _, _, _, _, completion):
2727
let topEarners = TopEarnerStats.fake().copy(items: [.fake()])
2828
completion(.success(topEarners))
29-
case let .retrieveSiteSummaryStats(_, _, _, _, _, completion):
29+
case let .retrieveSiteSummaryStats(_, _, _, _, _, _, completion):
3030
let siteStats = SiteSummaryStats.fake().copy(visitors: 30, views: 53)
3131
completion(.success(siteStats))
3232
default:
@@ -61,7 +61,7 @@ final class AnalyticsHubViewModelTests: XCTestCase {
6161
completion(.failure(NSError(domain: "Test", code: 1)))
6262
case let .retrieveTopEarnerStats(_, _, _, _, _, _, _, completion):
6363
completion(.failure(NSError(domain: "Test", code: 1)))
64-
case let .retrieveSiteSummaryStats(_, _, _, _, _, completion):
64+
case let .retrieveSiteSummaryStats(_, _, _, _, _, _, completion):
6565
completion(.failure(NSError(domain: "Test", code: 1)))
6666
default:
6767
break
@@ -89,7 +89,7 @@ final class AnalyticsHubViewModelTests: XCTestCase {
8989
case let .retrieveTopEarnerStats(_, _, _, _, _, _, _, completion):
9090
let topEarners = TopEarnerStats.fake().copy(items: [.fake()])
9191
completion(.success(topEarners))
92-
case let .retrieveSiteSummaryStats(_, _, _, _, _, completion):
92+
case let .retrieveSiteSummaryStats(_, _, _, _, _, _, completion):
9393
completion(.failure(NSError(domain: "Test", code: 1)))
9494
default:
9595
break
@@ -130,7 +130,7 @@ final class AnalyticsHubViewModelTests: XCTestCase {
130130
case let .retrieveTopEarnerStats(_, _, _, _, _, _, _, completion):
131131
let topEarners = TopEarnerStats.fake().copy(items: [.fake()])
132132
completion(.success(topEarners))
133-
case let .retrieveSiteSummaryStats(_, _, _, _, _, completion):
133+
case let .retrieveSiteSummaryStats(_, _, _, _, _, _, completion):
134134
let siteStats = SiteSummaryStats.fake()
135135
loadingSessionsCard = vm.sessionsCard
136136
completion(.success(siteStats))

WooCommerce/WooCommerceTests/ViewRelated/Dashboard/DashboardViewModelTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ final class DashboardViewModelTests: XCTestCase {
5555
completion(.failure(DotcomError.noRestRoute))
5656
case let .retrieveTopEarnerStats(_, _, _, _, _, _, _, completion):
5757
completion(.failure(DotcomError.noRestRoute))
58-
case let .retrieveSiteSummaryStats(_, _, _, _, _, completion):
58+
case let .retrieveSiteSummaryStats(_, _, _, _, _, _, completion):
5959
completion(.failure(DotcomError.noRestRoute))
6060
default:
6161
XCTFail("Received unsupported action: \(action)")
@@ -68,7 +68,7 @@ final class DashboardViewModelTests: XCTestCase {
6868
viewModel.syncStats(for: sampleSiteID, siteTimezone: .current, timeRange: .thisMonth, latestDateToInclude: .init(), forceRefresh: false)
6969
viewModel.syncSiteVisitStats(for: sampleSiteID, siteTimezone: .current, timeRange: .thisMonth, latestDateToInclude: .init())
7070
viewModel.syncTopEarnersStats(for: sampleSiteID, siteTimezone: .current, timeRange: .thisMonth, latestDateToInclude: .init(), forceRefresh: false)
71-
viewModel.syncSiteSummaryStats(for: sampleSiteID, timeRange: .thisMonth, latestDateToInclude: .init())
71+
viewModel.syncSiteSummaryStats(for: sampleSiteID, siteTimezone: .current, timeRange: .thisMonth, latestDateToInclude: .init())
7272

7373
// Then
7474
XCTAssertEqual(viewModel.statsVersion, .v4)

Yosemite/Yosemite/Actions/StatsActionV4.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public enum StatsActionV4: Action {
5353
/// Conditionally saves them to storage, if a single period is retrieved.
5454
///
5555
case retrieveSiteSummaryStats(siteID: Int64,
56+
siteTimezone: TimeZone,
5657
period: StatGranularity,
5758
quantity: Int,
5859
latestDateToInclude: Date,

Yosemite/Yosemite/Stores/StatsStoreV4.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,14 @@ public final class StatsStoreV4: Store {
9191
saveInStorage: saveInStorage,
9292
onCompletion: onCompletion)
9393
case .retrieveSiteSummaryStats(let siteID,
94+
let siteTimezone,
9495
let period,
9596
let quantity,
9697
let latestDateToInclude,
9798
let saveInStorage,
9899
let onCompletion):
99100
retrieveSiteSummaryStats(siteID: siteID,
101+
siteTimezone: siteTimezone,
100102
period: period,
101103
quantity: quantity,
102104
latestDateToInclude: latestDateToInclude,
@@ -195,13 +197,15 @@ private extension StatsStoreV4 {
195197
/// Conditionally saves them to storage, if a single period is retrieved.
196198
///
197199
func retrieveSiteSummaryStats(siteID: Int64,
200+
siteTimezone: TimeZone,
198201
period: StatGranularity,
199202
quantity: Int,
200203
latestDateToInclude: Date,
201204
saveInStorage: Bool,
202205
onCompletion: @escaping (Result<SiteSummaryStats, Error>) -> Void) {
203206
if quantity == 1 {
204207
siteStatsRemote.loadSiteSummaryStats(for: siteID,
208+
siteTimezone: siteTimezone,
205209
period: period,
206210
includingDate: latestDateToInclude) { [weak self] result in
207211
switch result {
@@ -220,6 +224,7 @@ private extension StatsStoreV4 {
220224
// We should only do this for periods of a month or greater; otherwise the visitor total is inaccurate.
221225
// See: pe5uwI-5c-p2
222226
siteStatsRemote.loadSiteVisitorStats(for: siteID,
227+
siteTimezone: siteTimezone,
223228
unit: period,
224229
latestDateToInclude: latestDateToInclude,
225230
quantity: quantity) { result in

Yosemite/YosemiteTests/Stores/StatsStoreV4Tests.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,7 @@ final class StatsStoreV4Tests: XCTestCase {
516516
// When
517517
let result: Result<Networking.SiteSummaryStats, Error> = waitFor { promise in
518518
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
519+
siteTimezone: .current,
519520
period: .day,
520521
quantity: 1,
521522
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55"),
@@ -540,6 +541,7 @@ final class StatsStoreV4Tests: XCTestCase {
540541
// When
541542
let _: Void = waitFor { promise in
542543
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
544+
siteTimezone: .init(identifier: "GMT") ?? .current,
543545
period: .month,
544546
quantity: 3,
545547
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-31T17:06:55"),
@@ -567,6 +569,7 @@ final class StatsStoreV4Tests: XCTestCase {
567569
// When
568570
let result: Result<Networking.SiteSummaryStats, Error> = waitFor { promise in
569571
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
572+
siteTimezone: .current,
570573
period: .month,
571574
quantity: 3,
572575
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-31T17:06:55"),
@@ -592,6 +595,7 @@ final class StatsStoreV4Tests: XCTestCase {
592595
// When
593596
let result: Result<Networking.SiteSummaryStats, Error> = waitFor { promise in
594597
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
598+
siteTimezone: .current,
595599
period: .day,
596600
quantity: 1,
597601
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55"),
@@ -614,6 +618,7 @@ final class StatsStoreV4Tests: XCTestCase {
614618
// When
615619
let result: Result<Networking.SiteSummaryStats, Error> = waitFor { promise in
616620
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
621+
siteTimezone: .current,
617622
period: .day,
618623
quantity: 1,
619624
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55"),
@@ -638,6 +643,7 @@ final class StatsStoreV4Tests: XCTestCase {
638643
// When
639644
let result: Result<Networking.SiteSummaryStats, Error> = waitFor { promise in
640645
let action = StatsActionV4.retrieveSiteSummaryStats(siteID: self.sampleSiteID,
646+
siteTimezone: .current,
641647
period: .day,
642648
quantity: 1,
643649
latestDateToInclude: DateFormatter.dateFromString(with: "2022-12-09T17:06:55"),

0 commit comments

Comments
 (0)