Skip to content

Commit

Permalink
Refactor ordering of steps and update tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
twstokes committed Apr 6, 2022
1 parent ff08b31 commit 6f5cdf7
Show file tree
Hide file tree
Showing 11 changed files with 247 additions and 222 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,9 @@ final class SiteIntentStep: WizardStep {
}
}()

init?(siteIntentAB: SiteIntentABTestable = SiteIntentAB.shared, creator: SiteCreator) {
init(siteIntentAB: SiteIntentABTestable = SiteIntentAB.shared, creator: SiteCreator) {
let variant = siteIntentAB.variant
SiteCreationAnalyticsHelper.trackSiteIntentExperiment(variant)
guard FeatureFlag.siteIntentQuestion.enabled && variant == .treatment else {
return nil
}

self.creator = creator
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import Foundation
import AutomatticTracks

/// Site Creation: Allows creation of the site's name.
final class SiteNameStep: WizardStep {
Expand All @@ -10,22 +9,8 @@ final class SiteNameStep: WizardStep {
return SiteNameViewController(creator: creator)
}()

init?(
siteIntentVariation: SiteIntentAB.Variant = SiteIntentAB.shared.variant,
siteNameVariation: Variation = ABTest.siteNameV1.variation,
creator: SiteCreator
) {
// TODO: Send an event to track the site name variant.

guard
FeatureFlag.siteIntentQuestion.enabled,
FeatureFlag.siteName.enabled,
siteIntentVariation == .treatment,
siteNameVariation == .treatment(nil)
else {
return nil
}

init(siteNameAB: ABTest = ABTest.siteNameV1, creator: SiteCreator) {
// TODO: Send an event to track the Site Name variant.
self.creator = creator
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,48 +1,42 @@
import AutomatticTracks

/// Puts together the Site creation wizard, assembling steps.
final class SiteCreationWizardLauncher {
final class SiteCreationWizardLauncher: SiteCreationWizardStepInvoker {
private var stepOrderer: SiteCreationWizardStepOrderer?

private lazy var creator: SiteCreator = {
return SiteCreator()
}()

private lazy var segmentsStep: WizardStep = {
internal lazy var segmentsStep: WizardStep = {
let segmentsService = SiteCreationSegmentsService(managedObjectContext: ContextManager.sharedInstance().mainContext)
return SiteSegmentsStep(creator: self.creator, service: segmentsService)
}()

private lazy var intentStep: WizardStep? = {
internal lazy var intentStep: WizardStep = {
return SiteIntentStep(creator: self.creator)
}()

private lazy var nameStep: WizardStep? = {
internal lazy var nameStep: WizardStep = {
return SiteNameStep(creator: self.creator)
}()

private lazy var designStep: WizardStep = {
internal lazy var designStep: WizardStep = {
return SiteDesignStep(creator: self.creator)
}()

private lazy var addressStep: WizardStep = {
internal lazy var addressStep: WizardStep = {
let addressService = DomainsServiceAdapter(managedObjectContext: ContextManager.sharedInstance().mainContext)
return WebAddressStep(creator: self.creator, service: addressService)
}()

private lazy var siteAssemblyStep: WizardStep = {
internal lazy var siteAssemblyStep: WizardStep = {
let siteAssemblyService = EnhancedSiteCreationService(managedObjectContext: ContextManager.sharedInstance().mainContext)
return SiteAssemblyStep(creator: self.creator, service: siteAssemblyService, onDismiss: onDismiss)
}()

private lazy var steps: [WizardStep] = {
return [
self.intentStep,
self.nameStep,
self.designStep,
self.addressStep,
self.siteAssemblyStep
].compactMap { $0 }
}()

private lazy var wizard: SiteCreationWizard = {
return SiteCreationWizard(steps: self.steps)
return SiteCreationWizard(steps: self.stepOrderer?.steps ?? [])
}()

lazy var ui: UIViewController? = {
Expand All @@ -62,5 +56,14 @@ final class SiteCreationWizardLauncher {

init(onDismiss: ((Blog, Bool) -> Void)? = nil) {
self.onDismiss = onDismiss

let siteIntentVariant = SiteIntentAB.shared.variant
let siteNameVariant = ABTest.siteNameV1.variation

stepOrderer = SiteCreationWizardStepOrderer(
stepInvoker: self,
siteIntentVariant: siteIntentVariant,
siteNameVariant: siteNameVariant
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import Foundation

/// Responsible for initialization and invocation of WizardSteps
protocol SiteCreationWizardStepInvoker {
var segmentsStep: WizardStep { get }
var intentStep: WizardStep { get }
var nameStep: WizardStep { get }
var designStep: WizardStep { get }
var addressStep: WizardStep { get }
var siteAssemblyStep: WizardStep { get }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import Foundation
import AutomatticTracks

struct SiteCreationWizardStepOrderer {
let stepInvoker: SiteCreationWizardStepInvoker
let siteIntentVariant: SiteIntentAB.Variant
let siteNameVariant: Variation

private var shouldShowSiteIntent: Bool {
return siteIntentVariant == .treatment && FeatureFlag.siteIntentQuestion.enabled
}

private var shouldShowSiteName: Bool {
return siteNameVariant == .treatment(nil) && FeatureFlag.siteName.enabled
}

lazy var steps: [WizardStep] = {
guard shouldShowSiteIntent else {
return [
stepInvoker.designStep,
stepInvoker.addressStep,
stepInvoker.siteAssemblyStep
]
}

guard shouldShowSiteName else {
return [
stepInvoker.intentStep,
stepInvoker.designStep,
stepInvoker.addressStep,
stepInvoker.siteAssemblyStep
]
}

return [
stepInvoker.intentStep,
stepInvoker.nameStep,
stepInvoker.designStep,
stepInvoker.siteAssemblyStep
]
}()
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ class SiteIntentAB: SiteIntentABTestable {
let defaultAccount = accountService.defaultWordPressComAccount()
let token: String? = defaultAccount?.authToken

return .treatment

if let token = token {
// 50/50 split between control and treatment groups
return token.hashCode() % 2 == 0 ? .control : .treatment
Expand Down
24 changes: 16 additions & 8 deletions WordPress/WordPress.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1998,7 +1998,6 @@
B084E61F27E3B79F007BF7A8 /* SiteIntentStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0960C8627D14BD400BC9717 /* SiteIntentStep.swift */; };
B084E62027E3B7A4007BF7A8 /* SiteIntentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B089140C27E1255D00CF468B /* SiteIntentViewController.swift */; };
B089140D27E1255D00CF468B /* SiteIntentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B089140C27E1255D00CF468B /* SiteIntentViewController.swift */; };
B089140F27E1352B00CF468B /* SiteCreationIntentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B089140E27E1352B00CF468B /* SiteCreationIntentTests.swift */; };
B0960C8727D14BD400BC9717 /* SiteIntentStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0960C8627D14BD400BC9717 /* SiteIntentStep.swift */; };
B0960C8927D17B1200BC9717 /* SiteIntentAB.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0960C8827D17B1200BC9717 /* SiteIntentAB.swift */; };
B0960C8A27D17B1200BC9717 /* SiteIntentAB.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0960C8827D17B1200BC9717 /* SiteIntentAB.swift */; };
Expand Down Expand Up @@ -2162,9 +2161,13 @@
C3234F5227EB9925004ADB29 /* SiteIntentData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3234F5027EB9925004ADB29 /* SiteIntentData.swift */; };
C3234F5427EBBACA004ADB29 /* SiteIntentVertical.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3234F5327EBBACA004ADB29 /* SiteIntentVertical.swift */; };
C3234F5527EBBACA004ADB29 /* SiteIntentVertical.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3234F5327EBBACA004ADB29 /* SiteIntentVertical.swift */; };
C3439B5827FE36E00058DA55 /* SiteCreationWizardStepInvoker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3439B5627FE36C30058DA55 /* SiteCreationWizardStepInvoker.swift */; };
C3439B5927FE36E30058DA55 /* SiteCreationWizardStepInvoker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3439B5627FE36C30058DA55 /* SiteCreationWizardStepInvoker.swift */; };
C3439B5C27FE37040058DA55 /* SiteCreationWizardStepOrderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3439B5A27FE36F70058DA55 /* SiteCreationWizardStepOrderer.swift */; };
C3439B5D27FE37050058DA55 /* SiteCreationWizardStepOrderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3439B5A27FE36F70058DA55 /* SiteCreationWizardStepOrderer.swift */; };
C3439B5F27FE3A3C0058DA55 /* SiteCreationStepOrderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3439B5E27FE3A3C0058DA55 /* SiteCreationStepOrderTests.swift */; };
C352870527FDD35C004E2E51 /* SiteNameStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = C352870427FDD35C004E2E51 /* SiteNameStep.swift */; };
C352870627FDD35C004E2E51 /* SiteNameStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = C352870427FDD35C004E2E51 /* SiteNameStep.swift */; };
C352870827FDECAC004E2E51 /* SiteCreationNameTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C352870727FDECAC004E2E51 /* SiteCreationNameTests.swift */; };
C387B7A22638D66F00BDEF86 /* PostAuthorSelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E2462826277B7700B99EA6 /* PostAuthorSelectorViewController.swift */; };
C3C39B0726F50D3900B1238D /* WordPressSupportSourceTag+Editor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C39B0626F50D3900B1238D /* WordPressSupportSourceTag+Editor.swift */; };
C3C39B0826F50D3900B1238D /* WordPressSupportSourceTag+Editor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C39B0626F50D3900B1238D /* WordPressSupportSourceTag+Editor.swift */; };
Expand Down Expand Up @@ -6701,7 +6704,6 @@
B06378BE253F639D00FD45D2 /* SiteSuggestion+CoreDataClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SiteSuggestion+CoreDataClass.swift"; sourceTree = "<group>"; };
B06378BF253F639D00FD45D2 /* SiteSuggestion+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SiteSuggestion+CoreDataProperties.swift"; sourceTree = "<group>"; };
B089140C27E1255D00CF468B /* SiteIntentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteIntentViewController.swift; sourceTree = "<group>"; };
B089140E27E1352B00CF468B /* SiteCreationIntentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteCreationIntentTests.swift; sourceTree = "<group>"; };
B0960C8627D14BD400BC9717 /* SiteIntentStep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteIntentStep.swift; sourceTree = "<group>"; };
B0960C8827D17B1200BC9717 /* SiteIntentAB.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteIntentAB.swift; sourceTree = "<group>"; };
B0A6DEBE2626335F00B5B8EF /* AztecPostViewController+MenuTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "AztecPostViewController+MenuTests.swift"; path = "Aztec/AztecPostViewController+MenuTests.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -6902,8 +6904,10 @@
C3234F5327EBBACA004ADB29 /* SiteIntentVertical.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteIntentVertical.swift; sourceTree = "<group>"; };
C3302CC427EB67D0004229D3 /* IntentCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IntentCell.xib; sourceTree = "<group>"; };
C3302CC527EB67D0004229D3 /* IntentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentCell.swift; sourceTree = "<group>"; };
C3439B5627FE36C30058DA55 /* SiteCreationWizardStepInvoker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteCreationWizardStepInvoker.swift; sourceTree = "<group>"; };
C3439B5A27FE36F70058DA55 /* SiteCreationWizardStepOrderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteCreationWizardStepOrderer.swift; sourceTree = "<group>"; };
C3439B5E27FE3A3C0058DA55 /* SiteCreationStepOrderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteCreationStepOrderTests.swift; sourceTree = "<group>"; };
C352870427FDD35C004E2E51 /* SiteNameStep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteNameStep.swift; sourceTree = "<group>"; };
C352870727FDECAC004E2E51 /* SiteCreationNameTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteCreationNameTests.swift; sourceTree = "<group>"; };
C3ABE791263099F7009BD402 /* WordPress 121.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "WordPress 121.xcdatamodel"; sourceTree = "<group>"; };
C3C39B0626F50D3900B1238D /* WordPressSupportSourceTag+Editor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "WordPressSupportSourceTag+Editor.swift"; sourceTree = "<group>"; };
C3E2462826277B7700B99EA6 /* PostAuthorSelectorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostAuthorSelectorViewController.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -10523,9 +10527,8 @@
73178C2321BEE09300E37C9A /* SiteSegmentsStepTests.swift */,
73178C3421BEE9AC00E37C9A /* TitleSubtitleHeaderTests.swift */,
32C6CDDA23A1FF0D002556FF /* SiteCreationRotatingMessageViewTests.swift */,
B089140E27E1352B00CF468B /* SiteCreationIntentTests.swift */,
C352870727FDECAC004E2E51 /* SiteCreationNameTests.swift */,
B030FE0927EBF0BC000F6F5E /* SiteCreationIntentTracksEventTests.swift */,
C3439B5E27FE3A3C0058DA55 /* SiteCreationStepOrderTests.swift */,
);
path = SiteCreation;
sourceTree = "<group>";
Expand Down Expand Up @@ -10646,6 +10649,8 @@
children = (
738B9A4021B85CF20005062B /* SiteCreationWizard.swift */,
738B9A4421B85CF20005062B /* SiteCreationWizardLauncher.swift */,
C3439B5A27FE36F70058DA55 /* SiteCreationWizardStepOrderer.swift */,
C3439B5627FE36C30058DA55 /* SiteCreationWizardStepInvoker.swift */,
738B9A4121B85CF20005062B /* SiteCreator.swift */,
738B9A4621B85CF20005062B /* WizardNavigation.swift */,
B0960C8827D17B1200BC9717 /* SiteIntentAB.swift */,
Expand Down Expand Up @@ -17884,6 +17889,7 @@
8350E49611D2C71E00A7B073 /* Media.m in Sources */,
D8B9B58F204F4EA1003C6042 /* NetworkAware.swift in Sources */,
B54346961C6A707D0010B3AD /* LanguageViewController.swift in Sources */,
C3439B5C27FE37040058DA55 /* SiteCreationWizardStepOrderer.swift in Sources */,
FAB9826E2697038700B172A3 /* StatsViewController+JetpackSettings.swift in Sources */,
43D74AD020F906EE004AD934 /* InlineEditableNameValueCell.swift in Sources */,
4089C51122371B120031CE78 /* TodayStatsRecordValue+CoreDataProperties.swift in Sources */,
Expand Down Expand Up @@ -18590,6 +18596,7 @@
E6DE44671B90D251000FA7EF /* ReaderHelpers.swift in Sources */,
7E3E7A5320E44B260075D159 /* SubjectContentStyles.swift in Sources */,
5D42A3DF175E7452005CFF05 /* AbstractPost.m in Sources */,
C3439B5827FE36E00058DA55 /* SiteCreationWizardStepInvoker.swift in Sources */,
986C908422319EFF00FC31E1 /* PostStatsTableViewController.swift in Sources */,
E18549D9230EED73003C620E /* BlogService+Deduplicate.swift in Sources */,
C81CCD82243BF7A600A83E27 /* TenorResultsPage.swift in Sources */,
Expand Down Expand Up @@ -19425,7 +19432,6 @@
7E53AB0420FE6681005796FE /* ActivityContentRouterTests.swift in Sources */,
F11023A323186BCA00C4E84A /* MediaBuilder.swift in Sources */,
17AF92251C46634000A99CFB /* BlogSiteVisibilityHelperTest.m in Sources */,
B089140F27E1352B00CF468B /* SiteCreationIntentTests.swift in Sources */,
73B6693A21CAD960008456C3 /* ErrorStateViewTests.swift in Sources */,
8BD34F0927D144FF005E931C /* BlogDashboardStateTests.swift in Sources */,
1759F1721FE017F20003EC81 /* QueueTests.swift in Sources */,
Expand Down Expand Up @@ -19570,7 +19576,6 @@
436D55F5211632B700CEAA33 /* RegisterDomainDetailsViewModelTests.swift in Sources */,
E180BD4C1FB462FF00D0D781 /* CookieJarTests.swift in Sources */,
9813512E22F0FC2700F7425D /* FileDownloadsStatsRecordValueTests.swift in Sources */,
C352870827FDECAC004E2E51 /* SiteCreationNameTests.swift in Sources */,
9363113F19FA996700B0C739 /* AccountServiceTests.swift in Sources */,
17FC0032264D728E00FCBD37 /* SharingServiceTests.swift in Sources */,
D88A649C208D7D81008AE9BC /* StockPhotosDataSourceTests.swift in Sources */,
Expand Down Expand Up @@ -19610,6 +19615,7 @@
C856749A243F4292001A995E /* TenorMockDataHelper.swift in Sources */,
D81C2F5820F86CEA002AE1F1 /* NetworkStatus.swift in Sources */,
E1C545801C6C79BB001CEB0E /* MediaSettingsTests.swift in Sources */,
C3439B5F27FE3A3C0058DA55 /* SiteCreationStepOrderTests.swift in Sources */,
7E987F5A2108122A00CAFB88 /* NotificationUtility.swift in Sources */,
4688E6CC26AB571D00A5D894 /* RequestAuthenticatorTests.swift in Sources */,
7E442FC720F677CB00DEACA5 /* ActivityLogRangesTest.swift in Sources */,
Expand Down Expand Up @@ -20181,6 +20187,7 @@
B084E61F27E3B79F007BF7A8 /* SiteIntentStep.swift in Sources */,
FABB22522602FC2C00C8785C /* ActivityTableViewCell.swift in Sources */,
FABB22532602FC2C00C8785C /* BlogDetailsViewController+FancyAlerts.swift in Sources */,
C3439B5D27FE37050058DA55 /* SiteCreationWizardStepOrderer.swift in Sources */,
FABB22542602FC2C00C8785C /* StoriesIntroDataSource.swift in Sources */,
FABB22552602FC2C00C8785C /* StoreContainer.swift in Sources */,
FABB22562602FC2C00C8785C /* AbstractPost+HashHelpers.m in Sources */,
Expand Down Expand Up @@ -20411,6 +20418,7 @@
FABB23112602FC2C00C8785C /* PostingActivityLegend.swift in Sources */,
8B92D69727CD51FA001F5371 /* DashboardGhostCardCell.swift in Sources */,
FABB23122602FC2C00C8785C /* WPImmuTableRows.swift in Sources */,
C3439B5927FE36E30058DA55 /* SiteCreationWizardStepInvoker.swift in Sources */,
FABB23132602FC2C00C8785C /* WordPress-87-88.xcmappingmodel in Sources */,
FABB23142602FC2C00C8785C /* UsersService.swift in Sources */,
FABB23152602FC2C00C8785C /* SharePost+UIActivityItemSource.swift in Sources */,
Expand Down
53 changes: 0 additions & 53 deletions WordPress/WordPressTest/SiteCreation/SiteCreationIntentTests.swift

This file was deleted.

Loading

0 comments on commit 6f5cdf7

Please sign in to comment.