Skip to content

Commit 8b22ec5

Browse files
committed
Improve logic to decide when to show IPP banner
1 parent a117142 commit 8b22ec5

File tree

3 files changed

+67
-22
lines changed

3 files changed

+67
-22
lines changed

WooCommerce/Classes/ViewModels/Feature Announcement Cards/FeatureAnnouncementCardViewModel.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,6 @@ class FeatureAnnouncementCardViewModel {
5858
}
5959

6060
private func updateShouldBeVisible() {
61-
guard CardPresentConfigurationLoader(stores: stores).configuration.isSupportedCountry else {
62-
shouldBeVisible = false
63-
return
64-
}
6561
let action = AppSettingsAction.getFeatureAnnouncementVisibility(campaign: config.campaign) { [weak self] result in
6662
guard let self = self else { return }
6763
switch result {

WooCommerce/Classes/ViewRelated/Orders/OrderListViewModel.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,18 +293,21 @@ extension OrderListViewModel {
293293
///
294294
private func bindTopBannerState() {
295295
let errorState = $hasErrorLoadingData.removeDuplicates()
296+
let cppConfiguration = CardPresentConfigurationLoader(stores: stores).configuration
297+
let isSupportedCountryForCPP = cppConfiguration.isSupportedCountry
298+
296299
Publishers.CombineLatest3(errorState, $hideOrdersBanners, upsellCardReadersAnnouncementViewModel.$shouldBeVisible)
297300
.map { hasError, hasDismissedOrdersBanners, upsellCardReadersBannerShouldBeVisible -> TopBanner in
298301

299-
guard !hasError else {
302+
if hasError {
300303
return .error
301304
}
302305

303-
guard !upsellCardReadersBannerShouldBeVisible else {
306+
if upsellCardReadersBannerShouldBeVisible && isSupportedCountryForCPP {
304307
return .upsellCardReaders
305308
}
306309

307-
guard !hasDismissedOrdersBanners else {
310+
if hasDismissedOrdersBanners {
308311
return .none
309312
}
310313

WooCommerce/WooCommerceTests/ViewRelated/Orders/OrderListViewModelTests.swift

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ final class OrderListViewModelTests: XCTestCase {
1010
/// The `siteID` value doesn't matter.
1111
private let siteID: Int64 = 1_000_000
1212

13-
private var storageManager: StorageManagerType!
13+
private var storageManager: MockStorageManager!
14+
15+
private var stores: MockStoresManager!
1416

1517
private var storage: StorageType {
1618
storageManager.viewStorage
@@ -21,10 +23,16 @@ final class OrderListViewModelTests: XCTestCase {
2123
override func setUp() {
2224
super.setUp()
2325
storageManager = MockStorageManager()
26+
stores = MockStoresManager(sessionManager: .makeForTesting(authenticated: true))
27+
stores.sessionManager.setStoreId(siteID)
28+
ServiceLocator.setSelectedSiteSettings(SelectedSiteSettings(stores: stores, storageManager: storageManager))
2429
}
2530

2631
override func tearDown() {
32+
ServiceLocator.setSelectedSiteSettings(SelectedSiteSettings())
33+
storageManager.reset()
2734
storageManager = nil
35+
stores = nil
2836

2937
cancellables.forEach {
3038
$0.cancel()
@@ -231,18 +239,18 @@ final class OrderListViewModelTests: XCTestCase {
231239
XCTAssertFalse(resynchronizeRequested)
232240
}
233241

234-
func test_when_having_no_error_and_upsellCardReaders_banner_should_be_shown_showns_upsellCardReaders_banner() {
242+
func test_when_having_no_error_and_upsellCardReaders_banner_should_be_shown_shows_upsellCardReaders_banner_if_country_supported() {
235243
// Given
236-
let storesManager = MockStoresManager(sessionManager: .testingInstance)
237-
storesManager.whenReceivingAction(ofType: AppSettingsAction.self) { action in
244+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
238245
switch action {
239246
case let .getFeatureAnnouncementVisibility(FeatureAnnouncementCampaign.upsellCardReaders, onCompletion):
240247
onCompletion(.success(true))
241248
default:
242249
break
243250
}
244251
}
245-
let viewModel = OrderListViewModel(siteID: siteID, stores: storesManager, filters: nil)
252+
setupCountry(country: .us)
253+
let viewModel = OrderListViewModel(siteID: siteID, stores: stores, filters: nil)
246254

247255
// When
248256
viewModel.activate()
@@ -253,11 +261,32 @@ final class OrderListViewModelTests: XCTestCase {
253261
}
254262
}
255263

264+
func test_when_having_no_error_and_upsellCardReaders_banner_should_be_shown_shows_nothing_if_country_unsupported() {
265+
// Given
266+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
267+
switch action {
268+
case let .getFeatureAnnouncementVisibility(FeatureAnnouncementCampaign.upsellCardReaders, onCompletion):
269+
onCompletion(.success(true))
270+
default:
271+
break
272+
}
273+
}
274+
setupCountry(country: .es)
275+
let viewModel = OrderListViewModel(siteID: siteID, stores: stores, filters: nil)
276+
277+
// When
278+
viewModel.activate()
279+
280+
// Then
281+
waitUntil {
282+
viewModel.topBanner == .none
283+
}
284+
}
285+
256286
func test_when_having_no_error_and_upsellCardReaders_banner_should_not_be_shown_and_orders_banner_should_not_be_shown_shows_nothing() {
257287
// Given
258-
let storesManager = MockStoresManager(sessionManager: .testingInstance)
259-
let viewModel = OrderListViewModel(siteID: siteID, stores: storesManager, filters: nil)
260-
storesManager.whenReceivingAction(ofType: AppSettingsAction.self) { action in
288+
let viewModel = OrderListViewModel(siteID: siteID, stores: stores, filters: nil)
289+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
261290
switch action {
262291
case let .loadFeedbackVisibility(_, onCompletion):
263292
onCompletion(.success(false))
@@ -279,9 +308,8 @@ final class OrderListViewModelTests: XCTestCase {
279308

280309
func test_when_having_no_error_and_upsellCardReaders_banner_should_not_be_shown_and_orders_banner_should_be_shown_shows_orders_banner() {
281310
// Given
282-
let storesManager = MockStoresManager(sessionManager: .testingInstance)
283-
let viewModel = OrderListViewModel(siteID: siteID, stores: storesManager, filters: nil)
284-
storesManager.whenReceivingAction(ofType: AppSettingsAction.self) { action in
311+
let viewModel = OrderListViewModel(siteID: siteID, stores: stores, filters: nil)
312+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
285313
switch action {
286314
case let .loadFeedbackVisibility(_, onCompletion):
287315
onCompletion(.success(true))
@@ -303,9 +331,8 @@ final class OrderListViewModelTests: XCTestCase {
303331

304332
func test_when_having_no_error_and_orders_banner_visibility_loading_fails_shows_nothing() {
305333
// Given
306-
let storesManager = MockStoresManager(sessionManager: .testingInstance)
307-
let viewModel = OrderListViewModel(siteID: siteID, stores: storesManager, filters: nil)
308-
storesManager.whenReceivingAction(ofType: AppSettingsAction.self) { action in
334+
let viewModel = OrderListViewModel(siteID: siteID, stores: stores, filters: nil)
335+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
309336
switch action {
310337
case let .loadFeedbackVisibility(_, onCompletion):
311338
let error = NSError(domain: "Test", code: 503, userInfo: nil)
@@ -340,7 +367,6 @@ final class OrderListViewModelTests: XCTestCase {
340367

341368
func test_dismissing_orders_banners_does_not_show_banners() {
342369
// Given
343-
let stores = MockStoresManager(sessionManager: .testingInstance)
344370
let viewModel = OrderListViewModel(siteID: siteID, stores: stores, filters: nil)
345371

346372
// When
@@ -421,6 +447,26 @@ private extension OrderListViewModel {
421447
}
422448
}
423449

450+
private extension OrderListViewModelTests {
451+
// MARK: - Country helpers
452+
func setupCountry(country: Country) {
453+
let setting = SiteSetting.fake()
454+
.copy(
455+
siteID: siteID,
456+
settingID: "woocommerce_default_country",
457+
value: country.rawValue,
458+
settingGroupKey: SiteSettingGroup.general.rawValue
459+
)
460+
storageManager.insertSampleSiteSetting(readOnlySiteSetting: setting)
461+
ServiceLocator.selectedSiteSettings.refresh()
462+
}
463+
464+
enum Country: String {
465+
case us = "US:CA"
466+
case es = "ES"
467+
}
468+
}
469+
424470
private extension Array where Element == Yosemite.Order {
425471
/// Returns all the IDs
426472
///

0 commit comments

Comments
 (0)