11import XCTest
2+ import Combine
23@testable import WordPress
34
45private typealias Section = BooleanUserDefaultsDebugViewModel . Section
56private typealias Row = BooleanUserDefaultsDebugViewModel . Row
67
7- class BooleanUserDefaultsDebugViewModelTests : CoreDataTestCase {
8+ @ MainActor final class BooleanUserDefaultsDebugViewModelTests : CoreDataTestCase {
89
910 var viewModel : BooleanUserDefaultsDebugViewModel !
1011 var mockPersistentRepository : InMemoryUserDefaults !
12+ var cancellables : Set < AnyCancellable > !
1113
1214 override func setUp( ) {
1315 super. setUp ( )
16+ cancellables = . init( )
1417 mockPersistentRepository = InMemoryUserDefaults ( )
1518 viewModel = BooleanUserDefaultsDebugViewModel ( coreDataStack: contextManager,
1619 persistentRepository: mockPersistentRepository)
@@ -22,12 +25,12 @@ class BooleanUserDefaultsDebugViewModelTests: CoreDataTestCase {
2225 super. tearDown ( )
2326 }
2427
25- func testLoadUserDefaults_WithOtherSection( ) {
28+ func testLoadUserDefaults_WithOtherSection( ) async {
2629 // Given
2730 mockPersistentRepository. set ( true , forKey: " entry1 " )
2831
2932 // When
30- viewModel. load ( )
33+ await viewModel. load ( )
3134
3235 // Then
3336 XCTAssertTrue ( viewModel. userDefaultsSections. count == 1 )
@@ -38,12 +41,12 @@ class BooleanUserDefaultsDebugViewModelTests: CoreDataTestCase {
3841 XCTAssertTrue ( viewModel. userDefaultsSections. first? . rows. first? . value == true )
3942 }
4043
41- func testLoadUserDefaults_WithoutOtherSection( ) {
44+ func testLoadUserDefaults_WithoutOtherSection( ) async {
4245 // Given
4346 mockPersistentRepository. set ( [ " entry1 " : true ] , forKey: " section1 " )
4447
4548 // When
46- viewModel. load ( )
49+ await viewModel. load ( )
4750
4851 // Then
4952 XCTAssertTrue ( viewModel. userDefaultsSections. count == 1 )
@@ -54,10 +57,10 @@ class BooleanUserDefaultsDebugViewModelTests: CoreDataTestCase {
5457 XCTAssertTrue ( viewModel. userDefaultsSections. first? . rows. first? . value == true )
5558 }
5659
57- func testUserDefaultsSections_MatchingQuery( ) {
60+ func testUserDefaultsSections_MatchingQuery( ) async {
5861 // Given
5962 mockPersistentRepository. set ( [ " match " : true ] , forKey: " section1 " )
60- viewModel. load ( )
63+ await viewModel. load ( )
6164
6265 // When
6366 viewModel. searchQuery = " mat "
@@ -71,25 +74,33 @@ class BooleanUserDefaultsDebugViewModelTests: CoreDataTestCase {
7174 XCTAssertTrue ( viewModel. userDefaultsSections. first? . rows. first? . value == true )
7275 }
7376
74- func testUserDefaultsSections_NotMatchingQuery( ) {
77+ func testUserDefaultsSections_NotMatchingQuery( ) async {
7578 // Given
79+ let expectation = expectation ( description: " List should be empty when no matching entries " )
7680 mockPersistentRepository. set ( [ " entry1 " : true ] , forKey: " section1 " )
77- viewModel. load ( )
81+ await viewModel. load ( )
7882
7983 // When
84+ viewModel. $userDefaultsSections
85+ . dropFirst ( )
86+ . sink { sections in
87+ XCTAssertTrue ( sections. isEmpty)
88+ expectation. fulfill ( )
89+ }
90+ . store ( in: & cancellables)
8091 viewModel. searchQuery = " noMatch "
8192
8293 // Then
83- XCTAssertTrue ( viewModel . userDefaultsSections . isEmpty )
94+ await fulfillment ( of : [ expectation ] , timeout : 1 )
8495 }
8596
86- func testUserDefaultsSections_WithFilteredOutNonBooleanEntries( ) {
97+ func testUserDefaultsSections_WithFilteredOutNonBooleanEntries( ) async {
8798 // Given
8899 mockPersistentRepository. set ( [ " entry1 " : " NotBoolean " ] , forKey: " section1 " )
89100 mockPersistentRepository. set ( [ " entry2 " : false ] , forKey: " section1 " )
90101
91102 // When
92- viewModel. load ( )
103+ await viewModel. load ( )
93104
94105 // Then
95106 XCTAssertTrue ( viewModel. userDefaultsSections. count == 1 )
@@ -100,32 +111,32 @@ class BooleanUserDefaultsDebugViewModelTests: CoreDataTestCase {
100111 XCTAssertTrue ( viewModel. userDefaultsSections. first? . rows. first? . value == false )
101112 }
102113
103- func testUserDefaultsSections_WithFilteredOutGutenbergItems( ) {
114+ func testUserDefaultsSections_WithFilteredOutGutenbergItems( ) async {
104115 // Given
105116 mockPersistentRepository. set ( true , forKey: " com.wordpress.gutenberg-entry " )
106117
107118 // When
108- viewModel. load ( )
119+ await viewModel. load ( )
109120
110121 // Then
111122 XCTAssertTrue ( viewModel. userDefaultsSections. isEmpty)
112123 }
113124
114- func testUserDefaultsSections_WithFilteredOutFeatureFlagSection( ) {
125+ func testUserDefaultsSections_WithFilteredOutFeatureFlagSection( ) async {
115126 // Given
116127 mockPersistentRepository. set ( [ " entry1 " : true ] , forKey: " FeatureFlagStoreCache " )
117128
118129 // When
119- viewModel. load ( )
130+ await viewModel. load ( )
120131
121132 // Then
122133 XCTAssertTrue ( viewModel. userDefaultsSections. isEmpty)
123134 }
124135
125- func testUpdateUserDefault_OtherSection( ) {
136+ func testUpdateUserDefault_OtherSection( ) async {
126137 // Given
127138 mockPersistentRepository. set ( true , forKey: " entry1 " )
128- viewModel. load ( )
139+ await viewModel. load ( )
129140
130141 // When
131142 let section = viewModel. userDefaultsSections [ 0 ]
@@ -141,10 +152,10 @@ class BooleanUserDefaultsDebugViewModelTests: CoreDataTestCase {
141152 XCTAssertTrue ( viewModel. userDefaultsSections. first? . rows. first? . value == false )
142153 }
143154
144- func testUpdateUserDefault_GivenSection( ) {
155+ func testUpdateUserDefault_GivenSection( ) async {
145156 // Given
146157 mockPersistentRepository. set ( [ " entry1 " : true ] , forKey: " section1 " )
147- viewModel. load ( )
158+ await viewModel. load ( )
148159
149160 // When
150161 let section = viewModel. userDefaultsSections [ 0 ]
0 commit comments