Skip to content

Commit 7ab7f96

Browse files
committed
Add tests to BooleanUserDefaultsDebugViewModel
1 parent db630b2 commit 7ab7f96

3 files changed

Lines changed: 155 additions & 5 deletions

File tree

WordPress/Classes/ViewRelated/Me/App Settings/Boolean User Defaults/BooleanUserDefaultsDebugViewModel.swift

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,10 @@ final class BooleanUserDefaultsDebugViewModel: ObservableObject {
3232
return filteredSections
3333
}
3434

35-
init() {
36-
persistentRepository = UserPersistentStoreFactory.instance()
37-
coreDataStack = ContextManager.shared
35+
init(coreDataStack: CoreDataStack = ContextManager.shared,
36+
persistentRepository: UserPersistentRepository = UserPersistentStoreFactory.instance()) {
37+
self.coreDataStack = coreDataStack
38+
self.persistentRepository = persistentRepository
3839
load()
3940
}
4041

@@ -50,7 +51,9 @@ final class BooleanUserDefaultsDebugViewModel: ObservableObject {
5051
otherSection[entryKey] = BooleanUserDefault(title: entryKey, value: booleanUserDefault)
5152
}
5253
}
53-
loadedUserDefaultsSections[Strings.otherBooleanUserDefaultsSectionID] = otherSection
54+
if !otherSection.isEmpty {
55+
loadedUserDefaultsSections[Strings.otherBooleanUserDefaultsSectionID] = otherSection
56+
}
5457
allUserDefaultsSections = loadedUserDefaultsSections
5558
}
5659

@@ -89,7 +92,7 @@ final class BooleanUserDefaultsDebugViewModel: ObservableObject {
8992
}
9093
}
9194

92-
struct BooleanUserDefault {
95+
struct BooleanUserDefault: Equatable {
9396
var title: String
9497
var value: Bool
9598
}

WordPress/WordPress.xcodeproj/project.pbxproj

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1645,6 +1645,7 @@
16451645
74FA4BE51FBFA0660031EAAD /* Extensions.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 74FA4BE31FBFA0660031EAAD /* Extensions.xcdatamodeld */; };
16461646
74FA4BE61FBFA0660031EAAD /* Extensions.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 74FA4BE31FBFA0660031EAAD /* Extensions.xcdatamodeld */; };
16471647
74FA4BED1FBFA2350031EAAD /* SharedCoreDataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746D6B241FBF701F003C45BE /* SharedCoreDataStack.swift */; };
1648+
77A141172B68546100BF75DD /* BooleanUserDefaultsDebugViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77A141162B68546100BF75DD /* BooleanUserDefaultsDebugViewModelTests.swift */; };
16481649
77B84EFE2B62D8280035AEFE /* BooleanUserDefaultsDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77B84EFD2B62D8280035AEFE /* BooleanUserDefaultsDebugView.swift */; };
16491650
77DFF0882B68362200FA561D /* BooleanUserDefaultsDebugViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77DFF0872B68362200FA561D /* BooleanUserDefaultsDebugViewModel.swift */; };
16501651
77DFF0892B68386800FA561D /* BooleanUserDefaultsDebugViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77DFF0872B68362200FA561D /* BooleanUserDefaultsDebugViewModel.swift */; };
@@ -7219,6 +7220,7 @@
72197220
74FA2EE3200E8A6C001DDC13 /* AppExtensionsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppExtensionsService.swift; sourceTree = "<group>"; };
72207221
74FA4BE41FBFA0660031EAAD /* Extensions.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Extensions.xcdatamodel; sourceTree = "<group>"; };
72217222
75305C06D345590B757E3890 /* Pods-Apps-WordPress.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Apps-WordPress.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-Apps-WordPress/Pods-Apps-WordPress.debug.xcconfig"; sourceTree = "<group>"; };
7223+
77A141162B68546100BF75DD /* BooleanUserDefaultsDebugViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BooleanUserDefaultsDebugViewModelTests.swift; sourceTree = "<group>"; };
72227224
77B84EFD2B62D8280035AEFE /* BooleanUserDefaultsDebugView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BooleanUserDefaultsDebugView.swift; sourceTree = "<group>"; };
72237225
77DFF0872B68362200FA561D /* BooleanUserDefaultsDebugViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BooleanUserDefaultsDebugViewModel.swift; sourceTree = "<group>"; };
72247226
7D21280C251CF0850086DD2C /* EditPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditPageViewController.swift; sourceTree = "<group>"; };
@@ -11278,6 +11280,7 @@
1127811280
3F28CEAD2A4ACEA400B79686 /* Me */ = {
1127911281
isa = PBXGroup;
1128011282
children = (
11283+
77A141142B68543700BF75DD /* App Settings */,
1128111284
3F28CEAE2A4ACEBE00B79686 /* PrivacySettingsViewControllerTests.swift */,
1128211285
);
1128311286
path = Me;
@@ -13021,6 +13024,22 @@
1302113024
name = Data;
1302213025
sourceTree = "<group>";
1302313026
};
13027+
77A141142B68543700BF75DD /* App Settings */ = {
13028+
isa = PBXGroup;
13029+
children = (
13030+
77A141152B68544300BF75DD /* Boolean User Defaults */,
13031+
);
13032+
path = "App Settings";
13033+
sourceTree = "<group>";
13034+
};
13035+
77A141152B68544300BF75DD /* Boolean User Defaults */ = {
13036+
isa = PBXGroup;
13037+
children = (
13038+
77A141162B68546100BF75DD /* BooleanUserDefaultsDebugViewModelTests.swift */,
13039+
);
13040+
path = "Boolean User Defaults";
13041+
sourceTree = "<group>";
13042+
};
1302413043
77DFF0862B6835EC00FA561D /* Boolean User Defaults */ = {
1302513044
isa = PBXGroup;
1302613045
children = (
@@ -23663,6 +23682,7 @@
2366323682
B5552D821CD1061F00B26DF6 /* StringExtensionsTests.swift in Sources */,
2366423683
3F759FBA2A2DA93B0039A845 /* WPAccount+Fixture.swift in Sources */,
2366523684
8B821F3C240020E2006B697E /* PostServiceUploadingListTests.swift in Sources */,
23685+
77A141172B68546100BF75DD /* BooleanUserDefaultsDebugViewModelTests.swift in Sources */,
2366623686
73178C3521BEE9AC00E37C9A /* TitleSubtitleHeaderTests.swift in Sources */,
2366723687
08AAD6A11CBEA610002B2418 /* MenusServiceTests.m in Sources */,
2366823688
BEA0E4851BD83565000AEE81 /* WP3DTouchShortcutCreatorTests.swift in Sources */,
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import XCTest
2+
@testable import WordPress
3+
4+
class BooleanUserDefaultsDebugViewModelTests: CoreDataTestCase {
5+
6+
var viewModel: BooleanUserDefaultsDebugViewModel!
7+
var mockPersistentRepository: InMemoryUserDefaults!
8+
9+
override func setUp() {
10+
super.setUp()
11+
mockPersistentRepository = InMemoryUserDefaults()
12+
viewModel = BooleanUserDefaultsDebugViewModel(coreDataStack: contextManager,
13+
persistentRepository: mockPersistentRepository)
14+
}
15+
16+
override func tearDown() {
17+
viewModel = nil
18+
mockPersistentRepository = nil
19+
super.tearDown()
20+
}
21+
22+
func testLoadUserDefaults_WithOtherSection() {
23+
// Given
24+
mockPersistentRepository.set(true, forKey: "entry1")
25+
26+
// When
27+
viewModel.load()
28+
29+
// Then
30+
XCTAssertTrue(viewModel.userDefaultsSections["Other"]?["entry1"]?.value ?? false)
31+
}
32+
33+
func testLoadUserDefaults_WithoutOtherSection() {
34+
// Given
35+
mockPersistentRepository.set(["entry1": true], forKey: "section1")
36+
37+
// When
38+
viewModel.load()
39+
40+
// Then
41+
XCTAssertNil(viewModel.userDefaultsSections["Other"])
42+
}
43+
44+
func testUserDefaultsSections_MatchingQuery() {
45+
// Given
46+
mockPersistentRepository.set(["match": true], forKey: "section1")
47+
viewModel.load()
48+
49+
// When
50+
viewModel.searchQuery = "mat"
51+
52+
// Then
53+
XCTAssertNotNil(viewModel.userDefaultsSections["section1"])
54+
XCTAssertTrue(viewModel.userDefaultsSections["section1"]?["match"]?.value ?? false)
55+
}
56+
57+
func testUserDefaultsSections_NotMatchingQuery() {
58+
// Given
59+
mockPersistentRepository.set(["entry1": true], forKey: "section1")
60+
viewModel.load()
61+
62+
// When
63+
viewModel.searchQuery = "noMatch"
64+
65+
// Then
66+
XCTAssertTrue(viewModel.userDefaultsSections.isEmpty)
67+
}
68+
69+
func testUserDefaultsSections_WithFilteredOutNonBooleanEntries() {
70+
// Given
71+
mockPersistentRepository.set(["entry1": "NotBoolean"], forKey: "section1")
72+
mockPersistentRepository.set(["entry2": false], forKey: "section1")
73+
74+
// When
75+
viewModel.load()
76+
77+
// Then
78+
XCTAssertTrue(viewModel.userDefaultsSections["section1"]?.count == 1)
79+
XCTAssertFalse(viewModel.userDefaultsSections["section1"]?["entry2"]?.value ?? true)
80+
}
81+
82+
func testUserDefaultsSections_WithFilteredOutGutenbergItems() {
83+
// Given
84+
mockPersistentRepository.set(true, forKey: "com.wordpress.gutenberg-entry")
85+
86+
// When
87+
viewModel.load()
88+
89+
// Then
90+
XCTAssertTrue(viewModel.userDefaultsSections.isEmpty)
91+
}
92+
93+
func testUserDefaultsSections_WithFilteredOutFeatureFlagSection() {
94+
// Given
95+
mockPersistentRepository.set(["entry1": true], forKey: "FeatureFlagStoreCache")
96+
97+
// When
98+
viewModel.load()
99+
100+
// Then
101+
XCTAssertTrue(viewModel.userDefaultsSections.isEmpty)
102+
}
103+
104+
func testUpdateUserDefault_OtherSection() {
105+
// Given
106+
mockPersistentRepository.set(true, forKey: "entry1")
107+
viewModel.load()
108+
109+
// When
110+
viewModel.updateUserDefault(false, forSection: "Other", forUserDefault: "entry1")
111+
112+
// Then
113+
XCTAssertEqual(viewModel.userDefaultsSections["Other"]?["entry1"]?.value, false)
114+
}
115+
116+
func testUpdateUserDefault_GivenSection() {
117+
// Given
118+
mockPersistentRepository.set(["entry1": true], forKey: "section1")
119+
viewModel.load()
120+
121+
// When
122+
viewModel.updateUserDefault(false, forSection: "section1", forUserDefault: "entry1")
123+
124+
// Then
125+
XCTAssertEqual(viewModel.userDefaultsSections["section1"]?["entry1"]?.value, false)
126+
}
127+
}

0 commit comments

Comments
 (0)