Skip to content

Commit 8089b16

Browse files
authored
[POS as a tab i1] Analytics and enable local feature flag for public release (#15766)
2 parents c8788ef + b9622f8 commit 8089b16

File tree

5 files changed

+42
-4
lines changed

5 files changed

+42
-4
lines changed

Modules/Sources/Experiments/DefaultFeatureFlagService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public struct DefaultFeatureFlagService: FeatureFlagService {
109109
// Enables a simulated barcode scanner in dev builds for testing. Do not ship this one!
110110
return buildConfig == .localDeveloper || buildConfig == .alpha
111111
case .pointOfSaleAsATabi1:
112-
return buildConfig == .localDeveloper || buildConfig == .alpha
112+
return true
113113
default:
114114
return true
115115
}

RELEASE-NOTES.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
22.7
55
-----
6-
6+
- [**] POS: a POS tab in the tab bar is now available in the app for stores eligible for Point of Sale, instead of the previous entry point in the Menu tab. [https://github.com/woocommerce/woocommerce-ios/pull/15766]
77

88
22.6
99
-----

WooCommerce/Classes/Analytics/WooAnalyticsStat.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,8 @@ enum WooAnalyticsStat: String {
12761276
case backgroundUpdatesDisabled = "background_updates_disabled"
12771277

12781278
// MARK: Point of Sale events
1279+
case pointOfSaleTabSelected = "main_tab_pos_selected"
1280+
case pointOfSaleTabVisibilityChecked = "pos_tab_visibility_checked"
12791281
case pointOfSaleLoaded = "loaded"
12801282
case pointOfSaleItemsFetched = "items_fetched"
12811283
case pointOfSaleItemsPullToRefresh = "items_pull_to_refresh"

WooCommerce/Classes/ViewRelated/MainTabBarController.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ private extension MainTabBarController {
352352
case .hubMenu:
353353
ServiceLocator.analytics.track(.hubMenuTabSelected)
354354
case .pointOfSale:
355-
// TODO: WOOMOB-571 - analytics
355+
ServiceLocator.analytics.track(.pointOfSaleTabSelected)
356356
break
357357
}
358358
}
@@ -373,7 +373,7 @@ private extension MainTabBarController {
373373
ServiceLocator.analytics.track(.hubMenuTabReselected)
374374
break
375375
case .pointOfSale:
376-
// TODO: WOOMOB-571 - analytics
376+
assertionFailure("Point of Sale tab should not be reselected as it cannot be selected from `tabBarController(_:shouldSelect:)`.")
377377
break
378378
}
379379
}
@@ -672,6 +672,7 @@ private extension MainTabBarController {
672672
guard let self, let posEligibilityChecker = self.posEligibilityChecker else { return }
673673
let eligibility = await posEligibilityChecker.checkEligibility()
674674
let isPOSTabVisible = eligibility == .eligible
675+
analytics.track(.pointOfSaleTabVisibilityChecked, withProperties: ["is_visible": isPOSTabVisible])
675676
cachePOSTabVisibility(siteID: siteID, isPOSTabVisible: isPOSTabVisible)
676677
updateTabViewControllers(isPOSTabVisible: isPOSTabVisible)
677678
viewModel.loadHubMenuTabBadge()

WooCommerce/WooCommerceTests/ViewRelated/MainTabBarControllerTests.swift

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,41 @@ final class MainTabBarControllerTests: XCTestCase {
560560
// Then
561561
XCTAssertEqual(mockPOSEligibilityService.loadCachedPOSTabVisibility(siteID: 1216), true)
562562
}
563+
564+
func test_event_is_tracked_after_eligibility_check() throws {
565+
// Given
566+
let featureFlagService = MockFeatureFlagService()
567+
featureFlagService.isFeatureFlagEnabledReturnValue[.pointOfSaleAsATabi1] = true
568+
569+
let mockPOSEligibilityChecker = MockPOSEligibilityChecker()
570+
mockPOSEligibilityChecker.result = .eligible
571+
572+
let storesManager = MockStoresManager(sessionManager: .makeForTesting())
573+
574+
guard let tabBarController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController(creator: { coder in
575+
return MainTabBarController(coder: coder,
576+
featureFlagService: featureFlagService,
577+
analytics: self.analytics,
578+
stores: storesManager,
579+
posEligibilityCheckerFactory: { _ in mockPOSEligibilityChecker })
580+
}) else {
581+
return
582+
}
583+
584+
// Trigger `viewDidLoad`
585+
XCTAssertNotNil(tabBarController.view)
586+
587+
// When
588+
storesManager.updateDefaultStore(storeID: 322)
589+
590+
// Then
591+
waitUntil {
592+
tabBarController.tabRootViewControllers.count == 5
593+
}
594+
595+
let indexOfEvent = try XCTUnwrap(analyticsProvider.receivedEvents.firstIndex(of: WooAnalyticsStat.pointOfSaleTabVisibilityChecked.rawValue))
596+
assertEqual(true, analyticsProvider.receivedProperties[safe: indexOfEvent]?["is_visible"] as? Bool)
597+
}
563598
}
564599

565600
extension MainTabBarController {

0 commit comments

Comments
 (0)