Skip to content

Commit 6488145

Browse files
committed
Mock A/B test assignment for unit testing
1 parent 3e3daa4 commit 6488145

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,6 +1386,7 @@
13861386
CC3B35DB28E5A6830036B097 /* ReviewReply.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC3B35DA28E5A6830036B097 /* ReviewReply.swift */; };
13871387
CC3B35DD28E5A6EA0036B097 /* ReviewReplyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC3B35DC28E5A6EA0036B097 /* ReviewReplyViewModel.swift */; };
13881388
CC3B35DF28E5BE6F0036B097 /* ReviewReplyViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC3B35DE28E5BE6F0036B097 /* ReviewReplyViewModelTests.swift */; };
1389+
CC3DB1DC291188CA00425961 /* MockABTesting.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC3DB1DB291188CA00425961 /* MockABTesting.swift */; };
13891390
CC440E1E2770C6AF0074C264 /* ProductInOrderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC440E1D2770C6AF0074C264 /* ProductInOrderViewModel.swift */; };
13901391
CC4A4E962655273D00B75DCD /* ShippingLabelPaymentMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4A4E952655273D00B75DCD /* ShippingLabelPaymentMethods.swift */; };
13911392
CC4A4ED82655478D00B75DCD /* ShippingLabelPaymentMethodsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4A4ED72655478D00B75DCD /* ShippingLabelPaymentMethodsViewModel.swift */; };
@@ -3334,6 +3335,7 @@
33343335
CC3B35DA28E5A6830036B097 /* ReviewReply.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewReply.swift; sourceTree = "<group>"; };
33353336
CC3B35DC28E5A6EA0036B097 /* ReviewReplyViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewReplyViewModel.swift; sourceTree = "<group>"; };
33363337
CC3B35DE28E5BE6F0036B097 /* ReviewReplyViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewReplyViewModelTests.swift; sourceTree = "<group>"; };
3338+
CC3DB1DB291188CA00425961 /* MockABTesting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockABTesting.swift; sourceTree = "<group>"; };
33373339
CC440E1D2770C6AF0074C264 /* ProductInOrderViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductInOrderViewModel.swift; sourceTree = "<group>"; };
33383340
CC4A4E952655273D00B75DCD /* ShippingLabelPaymentMethods.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelPaymentMethods.swift; sourceTree = "<group>"; };
33393341
CC4A4ED72655478D00B75DCD /* ShippingLabelPaymentMethodsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelPaymentMethodsViewModel.swift; sourceTree = "<group>"; };
@@ -6325,6 +6327,7 @@
63256327
B958A7D728B5316A00823EEF /* MockURLOpener.swift */,
63266328
EE8DCA7F28BF964700F23B23 /* MockAuthentication.swift */,
63276329
AEB4DB98290AE8F300AE4340 /* MockCookieJar.swift */,
6330+
CC3DB1DB291188CA00425961 /* MockABTesting.swift */,
63286331
);
63296332
path = Mocks;
63306333
sourceTree = "<group>";
@@ -10791,6 +10794,7 @@
1079110794
31F21B02263C8E150035B50A /* CardReaderSettingsSearchingViewModelTests.swift in Sources */,
1079210795
45EF798624509B4C00B22BA2 /* ArrayIndexPathTests.swift in Sources */,
1079310796
D8610BDD256F5ABF00A5DF27 /* JetpackErrorViewModelTests.swift in Sources */,
10797+
CC3DB1DC291188CA00425961 /* MockABTesting.swift in Sources */,
1079410798
746791632108D7C0007CF1DC /* WooAnalyticsTests.swift in Sources */,
1079510799
2667BFDD252F61C5008099D4 /* RefundShippingDetailsViewModelTests.swift in Sources */,
1079610800
DE7B479727A3C4980018742E /* CouponDetailsViewModelTests.swift in Sources */,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Foundation
2+
import enum AutomatticTracks.Variation
3+
import enum Experiments.ABTest
4+
5+
struct MockABTesting {
6+
/// Sets the provided A/B Test variation in `UserDefaults`, to mock a given experiment assignment
7+
///
8+
static func setVariation(_ variation: AutomatticTracks.Variation, for experiment: ABTest) {
9+
let newVariation: String?
10+
switch variation {
11+
case .control:
12+
newVariation = "control"
13+
case .treatment(let type):
14+
newVariation = type ?? "treatment"
15+
}
16+
17+
let assignment = [experiment.rawValue: newVariation]
18+
UserDefaults.standard.setValue(assignment, forKey: "ab-testing-assignments")
19+
}
20+
}

WooCommerce/WooCommerceTests/ViewRelated/Dashboard/DashboardViewModelTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ final class DashboardViewModelTests: XCTestCase {
8383

8484
func test_products_onboarding_announcements_take_precedence() {
8585
// Given
86+
MockABTesting.setVariation(.treatment(nil), for: .productsOnboardingBanner)
8687
let stores = MockStoresManager(sessionManager: .makeForTesting())
8788
stores.whenReceivingAction(ofType: ProductAction.self) { action in
8889
switch action {

0 commit comments

Comments
 (0)