@@ -17,6 +17,7 @@ import org.junit.rules.TemporaryFolder
1717import org.mockito.kotlin.any
1818import org.mockito.kotlin.anyOrNull
1919import org.mockito.kotlin.mock
20+ import org.mockito.kotlin.verify
2021import org.mockito.kotlin.whenever
2122import to.bitkit.data.TrezorStore
2223import to.bitkit.env.Env
@@ -102,6 +103,22 @@ class TrezorRepoTest : BaseUnitTest() {
102103 on { this .model }.thenReturn(model)
103104 }
104105
106+ private fun mockKnownDevice (
107+ id : String = DEVICE_ID ,
108+ name : String? = DEVICE_NAME ,
109+ path : String = DEVICE_PATH ,
110+ label : String? = DEVICE_LABEL ,
111+ model : String? = DEVICE_MODEL ,
112+ ) = KnownDevice (
113+ id = id,
114+ name = name,
115+ path = path,
116+ transportType = " usb" ,
117+ label = label,
118+ model = model,
119+ lastConnectedAt = 123L ,
120+ )
121+
105122 // region initialize
106123
107124 @Test
@@ -425,6 +442,38 @@ class TrezorRepoTest : BaseUnitTest() {
425442
426443 // endregion
427444
445+ // region forgetDevice
446+
447+ @Test
448+ fun `forgetDevice should remove known device when service cleanup fails` () = test {
449+ val knownDevice = mockKnownDevice()
450+ val features = mockFeatures()
451+ val device = mockDeviceInfo()
452+ whenever(trezorStore.loadKnownDevices()).thenReturn(listOf (knownDevice))
453+ whenever(trezorService.connect(DEVICE_ID )).thenReturn(features)
454+ whenever(trezorService.scan()).thenReturn(listOf (device))
455+ sut = createSut()
456+
457+ sut.initialize()
458+ sut.scan()
459+ sut.connect(DEVICE_ID )
460+ whenever(trezorService.disconnect()).thenThrow(RuntimeException (" disconnect failed" ))
461+ whenever(trezorService.clearCredentials(DEVICE_ID )).thenThrow(RuntimeException (" clear failed" ))
462+
463+ val result = sut.forgetDevice(DEVICE_ID )
464+
465+ assertTrue(result.isFailure)
466+ assertTrue(sut.state.value.knownDevices.isEmpty())
467+ assertNull(sut.state.value.connectedDevice)
468+ assertNull(sut.state.value.connectedDeviceId)
469+ assertEquals(" disconnect failed" , sut.state.value.error)
470+ verify(trezorTransport).clearDeviceCredential(DEVICE_ID )
471+ verify(trezorService).clearCredentials(DEVICE_ID )
472+ verify(trezorStore).saveKnownDevices(emptyList())
473+ }
474+
475+ // endregion
476+
428477 // region initial state
429478
430479 @Test
0 commit comments