@@ -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+
424470private extension Array where Element == Yosemite . Order {
425471 /// Returns all the IDs
426472 ///
0 commit comments