@@ -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