@@ -26,6 +26,7 @@ import org.mockito.kotlin.anyOrNull
26
26
import org.mockito.kotlin.doReturn
27
27
import org.mockito.kotlin.eq
28
28
import org.mockito.kotlin.mock
29
+ import org.mockito.kotlin.verify
29
30
30
31
private typealias SavedIpAddressHistoryRecordLocalMap =
31
32
Map <String , SavedIpAddressHistoryRecordLocalModel >
@@ -40,6 +41,9 @@ class IpAddressHistoryDataSourceImplTest {
40
41
@Mock
41
42
private lateinit var savedIpAddressRecordDataMapper: SavedIpAddressRecordDataMapper
42
43
44
+ @Mock
45
+ private lateinit var preferencesEditor: SharedPreferences .Editor
46
+
43
47
private lateinit var sharedPreferences: SharedPreferences
44
48
45
49
@Mock
@@ -50,7 +54,6 @@ class IpAddressHistoryDataSourceImplTest {
50
54
51
55
@Before
52
56
fun setUp () {
53
- val preferencesEditor: SharedPreferences .Editor = mock()
54
57
sharedPreferences = mock {
55
58
on { edit() } doReturn preferencesEditor
56
59
}
@@ -104,7 +107,7 @@ class IpAddressHistoryDataSourceImplTest {
104
107
}
105
108
106
109
@Test
107
- fun `Given records,delete identifier when delete then deletes identified record ` () = runTest {
110
+ fun `Given records,delete identifier when delete then emits remaining records ` () = runTest {
108
111
// Given
109
112
val ipAddressToDelete = " 1.1.1.1"
110
113
val recordsString = " {JSON}"
@@ -140,6 +143,46 @@ class IpAddressHistoryDataSourceImplTest {
140
143
assertEquals(2 , actualRecords.size)
141
144
}
142
145
146
+ @Test
147
+ fun `Given records,delete identifier when delete then deletes identified record` () = runTest {
148
+ // Given
149
+ val ipAddressToDelete = " 1.1.1.1"
150
+ val recordsString = " {JSON}"
151
+ given(sharedPreferences.getString(eq(KEY_HISTORY_RECORDS ), anyOrNull()))
152
+ .willReturn(recordsString)
153
+ val localSavedIpAddressHistoryRecord1 =
154
+ localSavedIpAddressHistoryRecord(ipAddress = " 0.0.0.0" )
155
+ val localSavedIpAddressHistoryRecordToDelete =
156
+ localSavedIpAddressHistoryRecord(ipAddress = ipAddressToDelete)
157
+ val localSavedIpAddressHistoryRecord3 =
158
+ localSavedIpAddressHistoryRecord(ipAddress = " 2.2.2.2" )
159
+ val decodedRecords = mapOf (
160
+ localSavedIpAddressHistoryRecord1.ipAddress to localSavedIpAddressHistoryRecord1,
161
+ ipAddressToDelete to localSavedIpAddressHistoryRecordToDelete,
162
+ localSavedIpAddressHistoryRecord3.ipAddress to localSavedIpAddressHistoryRecord3
163
+ )
164
+ given(jsonDecoder.decode(recordsString)).willReturn(decodedRecords)
165
+ val deletionIdentifier = HistoryRecordDeletionIdentifierDataModel (ipAddressToDelete)
166
+ val dataSavedIpAddressHistoryRecord1 = dataSavedIpAddressHistoryRecord(" 0.0.0.0" )
167
+ givenMappedToData(localSavedIpAddressHistoryRecord1, dataSavedIpAddressHistoryRecord1)
168
+ val dataSavedIpAddressHistoryRecord3 = dataSavedIpAddressHistoryRecord(" 2.2.2.2" )
169
+ givenMappedToData(localSavedIpAddressHistoryRecord3, dataSavedIpAddressHistoryRecord3)
170
+
171
+ val recordsAfterDeletion = mapOf (
172
+ localSavedIpAddressHistoryRecord1.ipAddress to localSavedIpAddressHistoryRecord1,
173
+ localSavedIpAddressHistoryRecord3.ipAddress to localSavedIpAddressHistoryRecord3
174
+ )
175
+ val recordsAfterDeletionString = " {JSON2}"
176
+ given(jsonEncoder.encode(recordsAfterDeletion))
177
+ .willReturn(recordsAfterDeletionString)
178
+
179
+ // When
180
+ classUnderTest.delete(deletionIdentifier)
181
+
182
+ // Then
183
+ verify(preferencesEditor).putString(KEY_HISTORY_RECORDS , recordsAfterDeletionString)
184
+ }
185
+
143
186
private fun givenMappedToData (
144
187
localRecord : SavedIpAddressHistoryRecordLocalModel ,
145
188
expectedRecord : SavedIpAddressHistoryRecordDataModel
0 commit comments