Skip to content

Commit b432ac3

Browse files
committed
Add tests for ApplicationPasswordsExperimentState
1 parent 9194cd4 commit b432ac3

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,6 +1230,7 @@
12301230
26FFC50C2BED7C5A0067B3A4 /* WatchDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26B249702BEC801400730730 /* WatchDependencies.swift */; };
12311231
26FFC50D2BED7C5B0067B3A4 /* WatchDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26B249702BEC801400730730 /* WatchDependencies.swift */; };
12321232
2D09E0D12E61BC7F005C26F3 /* ApplicationPasswordsExperimentState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D09E0D02E61BC7D005C26F3 /* ApplicationPasswordsExperimentState.swift */; };
1233+
2D09E0D52E65C9B9005C26F3 /* ApplicationPasswordsExperimentStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D09E0D42E65C9B9005C26F3 /* ApplicationPasswordsExperimentStateTests.swift */; };
12331234
2D880B492DFB2F3F00A6FB2C /* OptionalBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D880B482DFB2F3D00A6FB2C /* OptionalBinding.swift */; };
12341235
2D88C1112DF883C300A6FB2C /* AttributedString+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D88C1102DF883BD00A6FB2C /* AttributedString+Helpers.swift */; };
12351236
2DB877522E25466C0001B175 /* ShippingItemRowAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DB877512E25466B0001B175 /* ShippingItemRowAccessibility.swift */; };
@@ -4412,6 +4413,7 @@
44124413
26FFD32628C6A0A4002E5E5E /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
44134414
26FFD32928C6A0F4002E5E5E /* UIImage+Widgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Widgets.swift"; sourceTree = "<group>"; };
44144415
2D09E0D02E61BC7D005C26F3 /* ApplicationPasswordsExperimentState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordsExperimentState.swift; sourceTree = "<group>"; };
4416+
2D09E0D42E65C9B9005C26F3 /* ApplicationPasswordsExperimentStateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordsExperimentStateTests.swift; sourceTree = "<group>"; };
44154417
2D880B482DFB2F3D00A6FB2C /* OptionalBinding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptionalBinding.swift; sourceTree = "<group>"; };
44164418
2D88C1102DF883BD00A6FB2C /* AttributedString+Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AttributedString+Helpers.swift"; sourceTree = "<group>"; };
44174419
2DB877512E25466B0001B175 /* ShippingItemRowAccessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingItemRowAccessibility.swift; sourceTree = "<group>"; };
@@ -11517,6 +11519,7 @@
1151711519
BA143222273662DE00E4B3AB /* Settings */ = {
1151811520
isa = PBXGroup;
1151911521
children = (
11522+
2D09E0D42E65C9B9005C26F3 /* ApplicationPasswordsExperimentStateTests.swift */,
1152011523
023BD5892BFDCF9500A10D7B /* POS */,
1152111524
BAFEF51D273C2151005F94CC /* SettingsViewModelTests.swift */,
1152211525
02AA586528531D0E0068B6F0 /* CloseAccountCoordinatorTests.swift */,
@@ -17728,6 +17731,7 @@
1772817731
0247F510286E7D26009C177E /* ProductVariationFormViewModel+ImageUploaderTests.swift in Sources */,
1772917732
020B2F9123BDD71500BD79AD /* IntegerInputFormatterTests.swift in Sources */,
1773017733
DECEA4492C81C1A800C28C10 /* ProductImagePickerViewModelTests.swift in Sources */,
17734+
2D09E0D52E65C9B9005C26F3 /* ApplicationPasswordsExperimentStateTests.swift in Sources */,
1773117735
D816DDBC22265DA300903E59 /* OrderTrackingTableViewCellTests.swift in Sources */,
1773217736
579CDF01274D811D00E8903D /* StoreStatsUsageTracksEventEmitterTests.swift in Sources */,
1773317737
CE4AFE482CD239B90013C52B /* WooShippingPostPurchaseViewModelTests.swift in Sources */,
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import XCTest
2+
import Yosemite
3+
@testable import WooCommerce
4+
5+
final class ApplicationPasswordsExperimentStateTests: XCTestCase {
6+
private var sut: ApplicationPasswordsExperimentState!
7+
private var availabilityChecker: ApplicationPasswordsExperimentAvailabilityCheckerMock!
8+
private var stores: MockStoresManager!
9+
10+
override func setUp() {
11+
super.setUp()
12+
availabilityChecker = ApplicationPasswordsExperimentAvailabilityCheckerMock()
13+
stores = MockStoresManager(sessionManager: .makeForTesting())
14+
sut = ApplicationPasswordsExperimentState(stores: stores, availabilityChecker: availabilityChecker)
15+
}
16+
17+
override func tearDown() {
18+
sut = nil
19+
availabilityChecker = nil
20+
stores = nil
21+
super.tearDown()
22+
}
23+
24+
func test_when_available_and_enabled_then_isAvailableAndEnabled_returns_true() async {
25+
// Given
26+
availabilityChecker.mockedAvailability = true
27+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
28+
if case let .getAppPasswordsExperimentSettingState(onCompletion) = action {
29+
onCompletion(true)
30+
}
31+
}
32+
33+
// When
34+
let result = await sut.isAvailableAndEnabled
35+
36+
// Then
37+
XCTAssertTrue(result)
38+
}
39+
40+
func test_when_available_and_disabled_then_isAvailableAndEnabled_returns_false() async {
41+
// Given
42+
availabilityChecker.mockedAvailability = true
43+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
44+
if case let .getAppPasswordsExperimentSettingState(onCompletion) = action {
45+
onCompletion(false)
46+
}
47+
}
48+
49+
// When
50+
let result = await sut.isAvailableAndEnabled
51+
52+
// Then
53+
XCTAssertFalse(result)
54+
}
55+
56+
func test_when_unavailable_and_enabled_then_isAvailableAndEnabled_returns_false() async {
57+
// Given
58+
availabilityChecker.mockedAvailability = false
59+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
60+
if case let .getAppPasswordsExperimentSettingState(onCompletion) = action {
61+
onCompletion(true)
62+
}
63+
}
64+
65+
// When
66+
let result = await sut.isAvailableAndEnabled
67+
68+
// Then
69+
XCTAssertFalse(result)
70+
}
71+
72+
func test_when_unavailable_and_disabled_then_isAvailableAndEnabled_returns_false() async {
73+
// Given
74+
availabilityChecker.mockedAvailability = false
75+
stores.whenReceivingAction(ofType: AppSettingsAction.self) { action in
76+
if case let .getAppPasswordsExperimentSettingState(onCompletion) = action {
77+
onCompletion(false)
78+
}
79+
}
80+
81+
// When
82+
let result = await sut.isAvailableAndEnabled
83+
84+
// Then
85+
XCTAssertFalse(result)
86+
}
87+
}
88+
89+
private final class ApplicationPasswordsExperimentAvailabilityCheckerMock: ApplicationPasswordsExperimentAvailabilityCheckerProtocol {
90+
var mockedAvailability = false
91+
92+
var cachedValue: Bool {
93+
mockedAvailability
94+
}
95+
96+
func fetchAvailability() async -> Bool {
97+
mockedAvailability
98+
}
99+
}

0 commit comments

Comments
 (0)