Skip to content

Commit ac4afe5

Browse files
committed
Add unit test for coupons menu on the hub menu
1 parent 5f70e20 commit ac4afe5

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

WooCommerce/Classes/ViewRelated/Hub Menu/HubMenuViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ final class HubMenuViewModel: ObservableObject {
8686
self.menuElements.append(.coupons)
8787
}
8888
}
89-
ServiceLocator.stores.dispatch(action)
89+
stores.dispatch(action)
9090
}
9191

9292
/// Present the `StorePickerViewController` using the `StorePickerCoordinator`, passing the navigation controller from the entry point.

WooCommerce/WooCommerceTests/ViewRelated/HubMenu/HubMenuViewModelTests.swift

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import XCTest
22

33
@testable import WooCommerce
4+
@testable import Yosemite
45

56
final class HubMenuViewModelTests: XCTestCase {
67
private let sampleSiteID: Int64 = 606
@@ -22,8 +23,51 @@ final class HubMenuViewModelTests: XCTestCase {
2223

2324
// When
2425
let viewModel = HubMenuViewModel(siteID: sampleSiteID, featureFlagService: featureFlagService)
26+
viewModel.setupMenuElements()
2527

2628
// Then
2729
XCTAssertEqual(viewModel.menuElements, [.woocommerceAdmin, .viewStore, .inbox, .reviews])
2830
}
31+
32+
func test_menuElements_include_coupons_when_couponManagement_is_enabled_in_app_settings() {
33+
// Given
34+
let stores = MockStoresManager(sessionManager: .makeForTesting())
35+
let featureFlagService = MockFeatureFlagService(isInboxOn: true)
36+
37+
// When
38+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
39+
switch action {
40+
case .loadCouponManagementFeatureSwitchState(let onCompletion):
41+
onCompletion(.success(true))
42+
default:
43+
break
44+
}
45+
}
46+
let viewModel = HubMenuViewModel(siteID: sampleSiteID, featureFlagService: featureFlagService, stores: stores)
47+
viewModel.setupMenuElements()
48+
49+
// Then
50+
XCTAssertEqual(viewModel.menuElements, [.woocommerceAdmin, .viewStore, .inbox, .coupons, .reviews])
51+
}
52+
53+
func test_menuElements_does_not_include_coupons_when_couponManagement_is_not_enabled_in_app_settings() {
54+
// Given
55+
let stores = MockStoresManager(sessionManager: .makeForTesting())
56+
let featureFlagService = MockFeatureFlagService(isInboxOn: false)
57+
58+
// When
59+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
60+
switch action {
61+
case .loadCouponManagementFeatureSwitchState(let onCompletion):
62+
onCompletion(.success(false))
63+
default:
64+
break
65+
}
66+
}
67+
let viewModel = HubMenuViewModel(siteID: sampleSiteID, featureFlagService: featureFlagService, stores: stores)
68+
viewModel.setupMenuElements()
69+
70+
// Then
71+
XCTAssertEqual(viewModel.menuElements, [.woocommerceAdmin, .viewStore, .reviews])
72+
}
2973
}

0 commit comments

Comments
 (0)