@@ -90,11 +90,13 @@ class MXMegolmDecryptionUnitTests: XCTestCase {
90
90
private let device : MXOlmDevice
91
91
private let cryptoStore : MXCryptoStore
92
92
private let session : MXSession
93
+ private let devices : MXDeviceList
93
94
94
- init ( device: MXOlmDevice , store: MXCryptoStore , session: MXSession ) {
95
+ init ( device: MXOlmDevice , store: MXCryptoStore , session: MXSession , devices : MXDeviceList ) {
95
96
self . device = device
96
97
self . cryptoStore = store
97
98
self . session = session
99
+ self . devices = devices
98
100
}
99
101
100
102
override var olmDevice : MXOlmDevice ! {
@@ -113,15 +115,22 @@ class MXMegolmDecryptionUnitTests: XCTestCase {
113
115
return session
114
116
}
115
117
118
+ override var deviceList : MXDeviceList ! {
119
+ return devices
120
+ }
121
+
116
122
override func trustLevel( forUser userId: String ) -> MXUserTrustLevel {
117
123
return MXUserTrustLevel ( crossSigningVerified: true , locallyVerified: true )
118
124
}
119
-
120
- var stubbedDeviceInfo : Device ?
121
- override func eventDeviceInfo( _ event: MXEvent ) -> MXDeviceInfo ? {
122
- guard let device = stubbedDeviceInfo else {
125
+ }
126
+
127
+ class DeviceListStub : MXDeviceList {
128
+ var stubbedDevices = [ String: Device] ( )
129
+ override func device( withIdentityKey senderKey: String ! , andAlgorithm algorithm: String ! ) -> MXDeviceInfo ! {
130
+ guard algorithm != nil , let senderKey = senderKey, let device = stubbedDevices [ senderKey] else {
123
131
return nil
124
132
}
133
+
125
134
return . init( device: . init( device: device) )
126
135
}
127
136
}
@@ -136,6 +145,7 @@ class MXMegolmDecryptionUnitTests: XCTestCase {
136
145
var store : CryptoStoreStub !
137
146
var session : SessionStub !
138
147
var crypto : CryptoStub !
148
+ var devicesList : DeviceListStub !
139
149
var decryption : MXMegolmDecryption !
140
150
141
151
override func setUp( ) {
@@ -144,7 +154,8 @@ class MXMegolmDecryptionUnitTests: XCTestCase {
144
154
device = DeviceStub ( )
145
155
store = CryptoStoreStub ( )
146
156
session = SessionStub ( )
147
- crypto = CryptoStub ( device: device, store: store, session: session)
157
+ devicesList = DeviceListStub ( )
158
+ crypto = CryptoStub ( device: device, store: store, session: session, devices: devicesList)
148
159
decryption = MXMegolmDecryption ( crypto: crypto)
149
160
}
150
161
@@ -247,10 +258,14 @@ class MXMegolmDecryptionUnitTests: XCTestCase {
247
258
func test_decryptEvent_untrustedResult( ) {
248
259
let event = MXEvent . encryptedFixture ( )
249
260
device. stubbedResult = MXDecryptionResult ( )
250
- crypto. stubbedDeviceInfo = Device . stub (
251
- locallyTrusted: false ,
252
- crossSigningTrusted: true
253
- )
261
+ device. stubbedResult? . senderKey = " ABCD "
262
+
263
+ devicesList. stubbedDevices = [
264
+ " ABCD " : Device . stub (
265
+ locallyTrusted: false ,
266
+ crossSigningTrusted: true
267
+ )
268
+ ]
254
269
255
270
device. stubbedResult? . isUntrusted = true
256
271
let result1 = decryption. decryptEvent ( event, inTimeline: nil )
@@ -264,18 +279,49 @@ class MXMegolmDecryptionUnitTests: XCTestCase {
264
279
func test_decryptEvent_untrustedDevice( ) {
265
280
let event = MXEvent . encryptedFixture ( )
266
281
device. stubbedResult = MXDecryptionResult ( )
282
+ device. stubbedResult? . senderKey = " XYZ "
267
283
268
- crypto. stubbedDeviceInfo = Device . stub (
269
- locallyTrusted: false ,
270
- crossSigningTrusted: false
271
- )
284
+ devicesList. stubbedDevices = [
285
+ " XYZ " : Device . stub (
286
+ locallyTrusted: false ,
287
+ crossSigningTrusted: false
288
+ )
289
+ ]
272
290
let result1 = decryption. decryptEvent ( event, inTimeline: nil )
273
291
XCTAssertEqual ( result1? . decoration. color, . red)
274
292
275
- crypto. stubbedDeviceInfo = Device . stub (
276
- locallyTrusted: false ,
293
+ devicesList. stubbedDevices = [
294
+ " XYZ " : Device . stub (
295
+ locallyTrusted: false ,
296
+ crossSigningTrusted: true
297
+ )
298
+ ]
299
+ let result2 = decryption. decryptEvent ( event, inTimeline: nil )
300
+ XCTAssertEqual ( result2? . decoration. color, MXEventDecryptionDecorationColor . none)
301
+ }
302
+
303
+ func test_decryptEvent_unknownDevice( ) {
304
+ let invalidKey = " 123 "
305
+ let validKey = " 456 "
306
+
307
+ let event = MXEvent . encryptedFixture ( )
308
+ device. stubbedResult = MXDecryptionResult ( )
309
+ device. stubbedResult? . senderKey = validKey
310
+
311
+ let stub = Device . stub (
312
+ locallyTrusted: true ,
277
313
crossSigningTrusted: true
278
314
)
315
+
316
+ devicesList. stubbedDevices = [
317
+ invalidKey: stub
318
+ ]
319
+ let result1 = decryption. decryptEvent ( event, inTimeline: nil )
320
+ XCTAssertEqual ( result1? . decoration. color, . red)
321
+
322
+ devicesList. stubbedDevices = [
323
+ validKey: stub
324
+ ]
279
325
let result2 = decryption. decryptEvent ( event, inTimeline: nil )
280
326
XCTAssertEqual ( result2? . decoration. color, MXEventDecryptionDecorationColor . none)
281
327
}
0 commit comments