@@ -4,7 +4,7 @@ import Yosemite
44
55final class ApplicationPasswordsExperimentAvailabilityCheckerTests : XCTestCase {
66 private var availabilityChecker : ApplicationPasswordsExperimentAvailabilityCheckerProtocol !
7- private var stores : StoresManager !
7+ private var stores : MockStoresManager !
88 private var userDefaults : UserDefaults !
99
1010 override func tearDown( ) {
@@ -16,7 +16,7 @@ final class ApplicationPasswordsExperimentAvailabilityCheckerTests: XCTestCase {
1616
1717 private func setupEnvironment(
1818 isWPComAuthenticated: Bool ,
19- isRemoteFFEnabled : Bool
19+ cachedRemoteFFEnabled : Bool
2020 ) throws {
2121 stores = MockStoresManager (
2222 sessionManager: . makeForTesting(
@@ -26,31 +26,93 @@ final class ApplicationPasswordsExperimentAvailabilityCheckerTests: XCTestCase {
2626 )
2727
2828 userDefaults = try XCTUnwrap ( UserDefaults ( suiteName: " TestingSuite " ) )
29- userDefaults [ . applicationPasswordsExperimentRemoteFFValue] = isRemoteFFEnabled
29+ userDefaults [ . applicationPasswordsExperimentRemoteFFValue] = cachedRemoteFFEnabled
3030
3131 availabilityChecker = ApplicationPasswordsExperimentAvailabilityChecker (
3232 userDefaults: userDefaults,
3333 stores: stores
3434 )
3535 }
3636
37- func test_when_wpcom_authenticated_and_remote_ff_enabled_then_isAvailable_returns_true ( ) throws {
38- try setupEnvironment ( isWPComAuthenticated: true , isRemoteFFEnabled : true )
37+ func test_when_wpcom_authenticated_and_cached_remote_ff_enabled_then_isAvailable_returns_true ( ) throws {
38+ try setupEnvironment ( isWPComAuthenticated: true , cachedRemoteFFEnabled : true )
3939 XCTAssertTrue ( availabilityChecker. isAvailable)
4040 }
4141
42- func test_when_wpcom_authenticated_and_remote_ff_disabled_then_isAvailable_returns_false ( ) throws {
43- try setupEnvironment ( isWPComAuthenticated: true , isRemoteFFEnabled : false )
42+ func test_when_wpcom_authenticated_and_cached_remote_ff_disabled_then_isAvailable_returns_false ( ) throws {
43+ try setupEnvironment ( isWPComAuthenticated: true , cachedRemoteFFEnabled : false )
4444 XCTAssertFalse ( availabilityChecker. isAvailable)
4545 }
4646
47- func test_when_not_wpcom_authenticated_and_remote_ff_enabled_then_isAvailable_returns_false ( ) throws {
48- try setupEnvironment ( isWPComAuthenticated: false , isRemoteFFEnabled : true )
47+ func test_when_not_wpcom_authenticated_and_cached_remote_ff_enabled_then_isAvailable_returns_false ( ) throws {
48+ try setupEnvironment ( isWPComAuthenticated: false , cachedRemoteFFEnabled : true )
4949 XCTAssertFalse ( availabilityChecker. isAvailable)
5050 }
5151
52- func test_when_not_wpcom_authenticated_and_remote_ff_disabled_then_isAvailable_returns_false ( ) throws {
53- try setupEnvironment ( isWPComAuthenticated: false , isRemoteFFEnabled : false )
52+ func test_when_not_wpcom_authenticated_and_cached_remote_ff_disabled_then_isAvailable_returns_false ( ) throws {
53+ try setupEnvironment ( isWPComAuthenticated: false , cachedRemoteFFEnabled : false )
5454 XCTAssertFalse ( availabilityChecker. isAvailable)
5555 }
56+
57+ @MainActor
58+ func test_when_cached_flag_is_disabled_and_remote_flag_is_enabled_then_fetchAvailability_returns_true( ) async throws {
59+ // Given
60+ stores = MockStoresManager (
61+ sessionManager: . makeForTesting(
62+ authenticated: true ,
63+ isWPCom: true
64+ )
65+ )
66+ stores. whenReceivingAction ( ofType: FeatureFlagAction . self) { action in
67+ switch action {
68+ case . isRemoteFeatureFlagEnabled( _, _, let completion) :
69+ completion ( true )
70+ }
71+ }
72+
73+ userDefaults = try XCTUnwrap ( UserDefaults ( suiteName: UUID ( ) . uuidString) )
74+ userDefaults [ . applicationPasswordsExperimentRemoteFFValue] = false
75+
76+ availabilityChecker = ApplicationPasswordsExperimentAvailabilityChecker (
77+ userDefaults: userDefaults,
78+ stores: stores
79+ )
80+
81+ // When
82+ let availability = await availabilityChecker. fetchAvailability ( )
83+
84+ // Then
85+ XCTAssertTrue ( availability)
86+ }
87+
88+ @MainActor
89+ func test_when_cached_flag_is_enabled_and_remote_flag_is_disabled_then_fetchAvailability_returns_false( ) async throws {
90+ // Given
91+ stores = MockStoresManager (
92+ sessionManager: . makeForTesting(
93+ authenticated: true ,
94+ isWPCom: true
95+ )
96+ )
97+ stores. whenReceivingAction ( ofType: FeatureFlagAction . self) { action in
98+ switch action {
99+ case . isRemoteFeatureFlagEnabled( _, _, let completion) :
100+ completion ( false )
101+ }
102+ }
103+
104+ userDefaults = try XCTUnwrap ( UserDefaults ( suiteName: UUID ( ) . uuidString) )
105+ userDefaults [ . applicationPasswordsExperimentRemoteFFValue] = true
106+
107+ availabilityChecker = ApplicationPasswordsExperimentAvailabilityChecker (
108+ userDefaults: userDefaults,
109+ stores: stores
110+ )
111+
112+ // When
113+ let availability = await availabilityChecker. fetchAvailability ( )
114+
115+ // Then
116+ XCTAssertFalse ( availability)
117+ }
56118}
0 commit comments