Skip to content

Commit e7dbb9a

Browse files
committed
Add unit tests for the new notification settings row in Settings
1 parent 74d2daf commit e7dbb9a

File tree

3 files changed

+65
-2
lines changed

3 files changed

+65
-2
lines changed

WooCommerce/Classes/ViewRelated/Dashboard/Settings/Settings/SettingsViewModel.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,10 +280,13 @@ private extension SettingsViewModel {
280280
let appSettingsSection: Section = {
281281
let rows: [Row]
282282
let notificationAvailable: Bool = {
283+
guard stores.isAuthenticated && stores.isAuthenticatedWithoutWPCom == false else {
284+
return false
285+
}
283286
guard let site = stores.sessionManager.defaultSite else {
284287
return false
285288
}
286-
return site.isJetpackThePluginInstalled && site.isJetpackConnected
289+
return site.isJetpackCPConnected == false
287290
}()
288291
if notificationAvailable, featureFlagService.isFeatureFlagEnabled(.notificationSettings) {
289292
rows = [.notifications, .privacy]

WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ final class MockFeatureFlagService: FeatureFlagService {
2323
var favoriteProducts: Bool
2424
var isProductGlobalUniqueIdentifierSupported: Bool
2525
var hideSitesInStorePicker: Bool
26+
var notificationSettings: Bool
2627

2728
init(isInboxOn: Bool = false,
2829
isShowInboxCTAEnabled: Bool = false,
@@ -44,7 +45,8 @@ final class MockFeatureFlagService: FeatureFlagService {
4445
viewEditCustomFieldsInProductsAndOrders: Bool = false,
4546
favoriteProducts: Bool = false,
4647
isProductGlobalUniqueIdentifierSupported: Bool = false,
47-
hideSitesInStorePicker: Bool = false) {
48+
hideSitesInStorePicker: Bool = false,
49+
notificationSettings: Bool = false) {
4850
self.isInboxOn = isInboxOn
4951
self.isShowInboxCTAEnabled = isShowInboxCTAEnabled
5052
self.isUpdateOrderOptimisticallyOn = isUpdateOrderOptimisticallyOn
@@ -66,6 +68,7 @@ final class MockFeatureFlagService: FeatureFlagService {
6668
self.favoriteProducts = favoriteProducts
6769
self.isProductGlobalUniqueIdentifierSupported = isProductGlobalUniqueIdentifierSupported
6870
self.hideSitesInStorePicker = hideSitesInStorePicker
71+
self.notificationSettings = notificationSettings
6972
}
7073

7174
func isFeatureFlagEnabled(_ featureFlag: FeatureFlag) -> Bool {
@@ -112,6 +115,8 @@ final class MockFeatureFlagService: FeatureFlagService {
112115
return isProductGlobalUniqueIdentifierSupported
113116
case .hideSitesInStorePicker:
114117
return hideSitesInStorePicker
118+
case .notificationSettings:
119+
return notificationSettings
115120
default:
116121
return false
117122
}

WooCommerce/WooCommerceTests/ViewRelated/Settings/SettingsViewModelTests.swift

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,61 @@ final class SettingsViewModelTests: XCTestCase {
313313
XCTAssertFalse(viewModel.sections.contains { $0.rows.contains(SettingsViewController.Row.whatsNew) })
314314
}
315315

316+
func test_sections_does_not_contain_notifications_row_when_feature_flag_is_disabled() {
317+
// Given
318+
let featureFlagService = MockFeatureFlagService(notificationSettings: false)
319+
let testSite = Site.fake().copy(siteID: 123, isJetpackThePluginInstalled: true, isJetpackConnected: true)
320+
let stores = MockStoresManager(sessionManager: .makeForTesting(authenticated: true, isWPCom: true, defaultSite: testSite))
321+
let viewModel = SettingsViewModel(stores: stores, featureFlagService: featureFlagService)
322+
323+
// When
324+
viewModel.onViewDidLoad()
325+
326+
// Then
327+
XCTAssertFalse(viewModel.sections.contains { $0.rows.contains(SettingsViewController.Row.notifications) })
328+
}
329+
330+
func test_sections_does_not_contain_notifications_row_when_user_is_authenticated_without_WPCom() {
331+
// Given
332+
let featureFlagService = MockFeatureFlagService(notificationSettings: true)
333+
let testSite = Site.fake().copy(siteID: 123, isJetpackThePluginInstalled: true, isJetpackConnected: true)
334+
let stores = MockStoresManager(sessionManager: .makeForTesting(authenticated: true, isWPCom: false, defaultSite: testSite))
335+
let viewModel = SettingsViewModel(stores: stores, featureFlagService: featureFlagService)
336+
337+
// When
338+
viewModel.onViewDidLoad()
339+
340+
// Then
341+
XCTAssertFalse(viewModel.sections.contains { $0.rows.contains(SettingsViewController.Row.notifications) })
342+
}
343+
344+
func test_sections_does_not_contain_notifications_row_when_site_is_JCP() {
345+
// Given
346+
let featureFlagService = MockFeatureFlagService(notificationSettings: true)
347+
let testSite = Site.fake().copy(siteID: 123, isJetpackThePluginInstalled: false, isJetpackConnected: true)
348+
let stores = MockStoresManager(sessionManager: .makeForTesting(authenticated: true, isWPCom: true, defaultSite: testSite))
349+
let viewModel = SettingsViewModel(stores: stores, featureFlagService: featureFlagService)
350+
351+
// When
352+
viewModel.onViewDidLoad()
353+
354+
// Then
355+
XCTAssertFalse(viewModel.sections.contains { $0.rows.contains(SettingsViewController.Row.notifications) })
356+
}
357+
358+
func test_sections_does_not_contain_notifications_row_for_Jetpack_site_and_user_is_authenticated_with_WPCom() {
359+
// Given
360+
let featureFlagService = MockFeatureFlagService(notificationSettings: true)
361+
let testSite = Site.fake().copy(siteID: 123, isJetpackThePluginInstalled: true, isJetpackConnected: true)
362+
let stores = MockStoresManager(sessionManager: .makeForTesting(authenticated: true, isWPCom: true, defaultSite: testSite))
363+
let viewModel = SettingsViewModel(stores: stores, featureFlagService: featureFlagService)
364+
365+
// When
366+
viewModel.onViewDidLoad()
367+
368+
// Then
369+
XCTAssertTrue(viewModel.sections.contains { $0.rows.contains(SettingsViewController.Row.notifications) })
370+
}
316371
}
317372

318373
private final class MockSettingsPresenter: SettingsViewPresenter {

0 commit comments

Comments
 (0)