Skip to content

Commit e65dae1

Browse files
committed
Show domain settings from settings > store settings.
1 parent 971b570 commit e65dae1

File tree

5 files changed

+76
-1
lines changed

5 files changed

+76
-1
lines changed

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ private extension SettingsViewController {
134134
configurePlugins(cell: cell)
135135
case let cell as HostingTableViewCell<PluginDetailsRowView> where row == .woocommerceDetails:
136136
configureWooCommmerceDetails(cell: cell)
137+
case let cell as BasicTableViewCell where row == .domain:
138+
configureDomain(cell: cell)
137139
case let cell as BasicTableViewCell where row == .installJetpack:
138140
configureInstallJetpack(cell: cell)
139141
case let cell as BasicTableViewCell where row == .support:
@@ -189,6 +191,12 @@ private extension SettingsViewController {
189191
cell.textLabel?.text = Localization.helpAndSupport
190192
}
191193

194+
func configureDomain(cell: BasicTableViewCell) {
195+
cell.accessoryType = .disclosureIndicator
196+
cell.selectionStyle = .default
197+
cell.textLabel?.text = Localization.domain
198+
}
199+
192200
func configureInstallJetpack(cell: BasicTableViewCell) {
193201
cell.accessoryType = .disclosureIndicator
194202
cell.selectionStyle = .default
@@ -334,6 +342,18 @@ private extension SettingsViewController {
334342
show(viewController, sender: self)
335343
}
336344

345+
func domainWasPressed() {
346+
guard let site = ServiceLocator.stores.sessionManager.defaultSite else {
347+
return
348+
}
349+
350+
// TODO: 8558 - analytics
351+
352+
let domainSettings = DomainSettingsHostingController(viewModel: .init(siteID: site.siteID))
353+
let navigationController = WooNavigationController(rootViewController: domainSettings)
354+
present(navigationController, animated: true)
355+
}
356+
337357
func installJetpackWasPressed() {
338358
guard let site = ServiceLocator.stores.sessionManager.defaultSite else {
339359
return
@@ -517,6 +537,8 @@ extension SettingsViewController: UITableViewDelegate {
517537
sitePluginsWasPressed()
518538
case .support:
519539
supportWasPressed()
540+
case .domain:
541+
domainWasPressed()
520542
case .installJetpack:
521543
installJetpackWasPressed()
522544
case .privacy:
@@ -592,6 +614,7 @@ extension SettingsViewController {
592614
case woocommerceDetails
593615

594616
// Store settings
617+
case domain
595618
case installJetpack
596619

597620
// Help & Feedback
@@ -637,6 +660,8 @@ extension SettingsViewController {
637660
return HostingTableViewCell<PluginDetailsRowView>.self
638661
case .support:
639662
return BasicTableViewCell.self
663+
case .domain:
664+
return BasicTableViewCell.self
640665
case .installJetpack:
641666
return BasicTableViewCell.self
642667
case .logout, .closeAccount:
@@ -702,6 +727,11 @@ private extension SettingsViewController {
702727
comment: "Navigates to In-Person Payments screen"
703728
)
704729

730+
static let domain = NSLocalizedString(
731+
"Domain",
732+
comment: "Navigates to domain settings screen."
733+
)
734+
705735
static let installJetpack = NSLocalizedString(
706736
"Install Jetpack",
707737
comment: "Navigates to Install Jetpack screen."

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,10 @@ private extension SettingsViewModel {
221221
let storeSettingsSection: Section? = {
222222
var rows: [Row] = []
223223

224+
if featureFlagService.isFeatureFlagEnabled(.domainSettings) && stores.sessionManager.defaultSite?.isWordPressComStore == true {
225+
rows.append(.domain)
226+
}
227+
224228
if stores.sessionManager.defaultSite?.isJetpackCPConnected == true {
225229
rows.append(.installJetpack)
226230
}

WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ struct MockFeatureFlagService: FeatureFlagService {
1010
private let isStoreCreationMVPEnabled: Bool
1111
private let isStoreCreationM2Enabled: Bool
1212
private let isStoreCreationM2WithInAppPurchasesEnabled: Bool
13+
private let isDomainSettingsEnabled: Bool
1314

1415
init(isInboxOn: Bool = false,
1516
isSplitViewInOrdersTabOn: Bool = false,
@@ -18,7 +19,8 @@ struct MockFeatureFlagService: FeatureFlagService {
1819
isLoginPrologueOnboardingEnabled: Bool = false,
1920
isStoreCreationMVPEnabled: Bool = true,
2021
isStoreCreationM2Enabled: Bool = false,
21-
isStoreCreationM2WithInAppPurchasesEnabled: Bool = false) {
22+
isStoreCreationM2WithInAppPurchasesEnabled: Bool = false,
23+
isDomainSettingsEnabled: Bool = false) {
2224
self.isInboxOn = isInboxOn
2325
self.isSplitViewInOrdersTabOn = isSplitViewInOrdersTabOn
2426
self.isUpdateOrderOptimisticallyOn = isUpdateOrderOptimisticallyOn
@@ -27,6 +29,7 @@ struct MockFeatureFlagService: FeatureFlagService {
2729
self.isStoreCreationMVPEnabled = isStoreCreationMVPEnabled
2830
self.isStoreCreationM2Enabled = isStoreCreationM2Enabled
2931
self.isStoreCreationM2WithInAppPurchasesEnabled = isStoreCreationM2WithInAppPurchasesEnabled
32+
self.isDomainSettingsEnabled = isDomainSettingsEnabled
3033
}
3134

3235
func isFeatureFlagEnabled(_ featureFlag: FeatureFlag) -> Bool {
@@ -47,6 +50,8 @@ struct MockFeatureFlagService: FeatureFlagService {
4750
return isStoreCreationM2Enabled
4851
case .storeCreationM2WithInAppPurchasesEnabled:
4952
return isStoreCreationM2WithInAppPurchasesEnabled
53+
case .domainSettings:
54+
return isDomainSettingsEnabled
5055
default:
5156
return false
5257
}

WooCommerce/WooCommerceTests/ViewModels/Domains/DomainSelectorViewModelTests.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ private extension DomainSelectorViewModelTests {
130130
switch action {
131131
case let .loadFreeDomainSuggestions(_, completion):
132132
completion(.success(suggestions))
133+
default:
134+
return
133135
}
134136
}
135137
}
@@ -139,6 +141,8 @@ private extension DomainSelectorViewModelTests {
139141
switch action {
140142
case let .loadFreeDomainSuggestions(_, completion):
141143
completion(.failure(error))
144+
default:
145+
return
142146
}
143147
}
144148
}

WooCommerce/WooCommerceTests/ViewRelated/Settings/SettingsViewModelTests.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,38 @@ final class SettingsViewModelTests: XCTestCase {
167167
// Then
168168
XCTAssertFalse(viewModel.sections.contains { $0.rows.contains(SettingsViewController.Row.closeAccount) })
169169
}
170+
171+
func test_domain_is_hidden_when_domainSettings_feature_is_disabled() {
172+
// Given
173+
let featureFlagService = MockFeatureFlagService(isDomainSettingsEnabled: false)
174+
stores.updateDefaultStore(.fake().copy(isWordPressComStore: true))
175+
let viewModel = SettingsViewModel(stores: stores,
176+
storageManager: storageManager,
177+
featureFlagService: featureFlagService,
178+
appleIDCredentialChecker: appleIDCredentialChecker)
179+
180+
// When
181+
viewModel.onViewDidLoad()
182+
183+
// Then
184+
XCTAssertFalse(viewModel.sections.contains { $0.rows.contains(SettingsViewController.Row.domain) })
185+
}
186+
187+
func test_domain_is_hidden_when_domainSettings_feature_is_enabled_and_site_is_wpcom() {
188+
// Given
189+
let featureFlagService = MockFeatureFlagService(isDomainSettingsEnabled: true)
190+
sessionManager.defaultSite = .fake().copy(isWordPressComStore: true)
191+
let viewModel = SettingsViewModel(stores: stores,
192+
storageManager: storageManager,
193+
featureFlagService: featureFlagService,
194+
appleIDCredentialChecker: appleIDCredentialChecker)
195+
196+
// When
197+
viewModel.onViewDidLoad()
198+
199+
// Then
200+
XCTAssertTrue(viewModel.sections.contains { $0.rows.contains(SettingsViewController.Row.domain) })
201+
}
170202
}
171203

172204
private final class MockSettingsPresenter: SettingsViewPresenter {

0 commit comments

Comments
 (0)