Skip to content

Commit bb5db3a

Browse files
committed
Add publisher tests for GeneralAppSettingsStorage
1 parent 54e06ad commit bb5db3a

File tree

2 files changed

+113
-1
lines changed

2 files changed

+113
-1
lines changed

Storage/Storage/Tools/GeneralAppSettingsStorage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public struct GeneralAppSettingsStorage {
4242
public func setValue<T>(_ value: T, for setting: WritableKeyPath<GeneralAppSettings, T>) throws {
4343
var settings = loadOrCreateGeneralAppSettings()
4444
settings[keyPath: setting] = value
45-
try saveGeneralAppSettings(settings)
45+
try saveSettings(settings)
4646
}
4747

4848
/// Returns the GeneralAppSettings object

Storage/StorageTests/Tools/GeneralAppSettingsStorageTests.swift

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,51 @@ class GeneralAppSettingsStorageTests: XCTestCase {
4444
XCTAssertEqual(storage.settings, settings)
4545
}
4646

47+
func test_settings_publisher_publishes_values() throws {
48+
// Given
49+
var receivedSettings = [GeneralAppSettings]()
50+
let cancelable = storage.settingsPublisher.sink { settings in
51+
receivedSettings.append(settings)
52+
}
53+
54+
let settings1 = GeneralAppSettings.default
55+
var settings2 = settings1
56+
settings2.knownCardReaders = ["READER2"]
57+
58+
// When
59+
try storage.saveSettings(settings1)
60+
try storage.saveSettings(settings2)
61+
62+
// Then
63+
XCTAssertEqual(receivedSettings.count, 2)
64+
XCTAssertEqual(receivedSettings, [settings1, settings2])
65+
66+
// Tear down
67+
cancelable.cancel()
68+
}
69+
70+
func test_settings_publisher_does_not_publish_duplicates() throws {
71+
// Given
72+
var receivedSettings = [GeneralAppSettings]()
73+
let cancelable = storage.settingsPublisher.sink { settings in
74+
receivedSettings.append(settings)
75+
}
76+
77+
let settings1 = GeneralAppSettings.default
78+
let settings2 = GeneralAppSettings.default
79+
80+
// When
81+
try storage.saveSettings(settings1)
82+
try storage.saveSettings(settings2)
83+
84+
// Then
85+
XCTAssertEqual(receivedSettings.count, 1)
86+
XCTAssertEqual(receivedSettings, [settings1])
87+
88+
// Tear down
89+
cancelable.cancel()
90+
}
91+
4792
func test_value_reads_settings_default_value() {
4893
// Given
4994

@@ -64,4 +109,71 @@ class GeneralAppSettingsStorageTests: XCTestCase {
64109
// Then
65110
XCTAssertEqual(storage.value(for: \.installationDate), date)
66111
}
112+
113+
func test_value_publisher_publishes_values() throws {
114+
// Given
115+
var receivedValues = [[String]]()
116+
117+
let value1 = ["READER1"]
118+
let value2 = ["READER2"]
119+
try storage.setValue(value1, for: \.knownCardReaders)
120+
121+
// When
122+
let cancelable = storage.publisher(for: \.knownCardReaders).sink { value in
123+
receivedValues.append(value)
124+
}
125+
try storage.setValue(value2, for: \.knownCardReaders)
126+
127+
// Then
128+
XCTAssertEqual(receivedValues.count, 2)
129+
XCTAssertEqual(receivedValues, [value1, value2])
130+
131+
// Tear down
132+
cancelable.cancel()
133+
}
134+
135+
func test_value_publisher_does_not_publish_duplicates() throws {
136+
// Given
137+
var receivedValues = [[String]]()
138+
139+
let value1 = ["READER1"]
140+
let value2 = ["READER1"]
141+
try storage.setValue(value1, for: \.knownCardReaders)
142+
let cancelable = storage.publisher(for: \.knownCardReaders).sink { value in
143+
receivedValues.append(value)
144+
}
145+
146+
// When
147+
try storage.setValue(value2, for: \.knownCardReaders)
148+
149+
// Then
150+
XCTAssertEqual(receivedValues.count, 1)
151+
XCTAssertEqual(receivedValues, [value1])
152+
153+
// Tear down
154+
cancelable.cancel()
155+
}
156+
157+
func test_value_publisher_does_not_publish_values_for_other_settings() throws {
158+
// Given
159+
var receivedValues = [[String]]()
160+
161+
let value1 = ["READER1"]
162+
let value2 = Date()
163+
164+
try storage.setValue(value1, for: \.knownCardReaders)
165+
let cancelable = storage.publisher(for: \.knownCardReaders).sink { value in
166+
receivedValues.append(value)
167+
}
168+
169+
// When
170+
try storage.setValue(value2, for: \.installationDate)
171+
172+
// Then
173+
XCTAssertEqual(receivedValues.count, 1)
174+
XCTAssertEqual(receivedValues, [value1])
175+
176+
// Tear down
177+
cancelable.cancel()
178+
}
67179
}

0 commit comments

Comments
 (0)