@@ -29,12 +29,20 @@ class MXSharedHistoryKeyManagerUnitTests: XCTestCase {
2929 }
3030
3131 class SpyService : NSObject , MXSharedHistoryKeyService {
32- var sharedHistory : Set < String > ?
33- func hasSharedHistory( forSessionId sessionId: String ! , senderKey: String ! ) -> Bool {
32+ struct SessionStub : Hashable {
33+ let roomId : String
34+ let sessionId : String
35+ let senderKey : String
36+ }
37+
38+ var sharedHistory : Set < SessionStub > ?
39+ func hasSharedHistory( forRoomId roomId: String ! , sessionId: String ! , senderKey: String ! ) -> Bool {
3440 guard let sharedHistory = sharedHistory else {
3541 return true
3642 }
37- return sharedHistory. contains ( sessionId)
43+
44+ let session = SessionStub ( roomId: roomId, sessionId: sessionId, senderKey: senderKey)
45+ return sharedHistory. contains ( session)
3846 }
3947
4048 var requests = [ MXSharedHistoryKeyRequest] ( )
@@ -76,15 +84,14 @@ class MXSharedHistoryKeyManagerUnitTests: XCTestCase {
7684 crypto. devices. setObject ( MXDeviceInfo ( deviceId: " 1 " ) , forUser: " user1 " , andDevice: " 1 " )
7785
7886 service = SpyService ( )
79- manager = MXSharedHistoryKeyManager ( crypto: crypto, service: service)
8087 }
8188
8289 private func makeEvent(
8390 sessionId: String = " 123 " ,
8491 senderKey: String = " 456 "
8592 ) -> MXEvent {
8693 MXEvent ( fromJSON: [
87- " room_id " : " 123 " ,
94+ " room_id " : " ABC " ,
8895 " type " : kMXEventTypeStringRoomEncrypted,
8996 " content " : [
9097 " session_id " : sessionId,
@@ -93,13 +100,35 @@ class MXSharedHistoryKeyManagerUnitTests: XCTestCase {
93100 ] )
94101 }
95102
103+ private func makeInboundSession(
104+ roomId: String = " ABC " ,
105+ sessionId: String = " 123 " ,
106+ senderKey: String = " 456 "
107+ ) -> SpyService . SessionStub {
108+ return . init( roomId: roomId, sessionId: sessionId, senderKey: senderKey)
109+ }
110+
111+ private func shareKeys(
112+ userId: String = " user1 " ,
113+ roomId: String = " ABC " ,
114+ enumerator: MXEventsEnumerator ? = nil ,
115+ limit: Int = . max
116+ ) {
117+ manager = MXSharedHistoryKeyManager ( roomId: roomId, crypto: crypto, service: service)
118+ manager. shareMessageKeys (
119+ withUserId: userId,
120+ messageEnumerator: enumerator ?? self . enumerator,
121+ limit: limit
122+ )
123+ }
124+
96125 func testDoesNotCreateRequestIfNoKnownDevices( ) {
97126 enumerator. messages = [
98127 makeEvent ( sessionId: " A " , senderKey: " B " )
99128 ]
100129 crypto. devices = MXUsersDevicesMap < MXDeviceInfo > ( )
101130
102- manager . shareMessageKeys ( withUserId : " user1 " , messageEnumerator : enumerator , limit : . max )
131+ shareKeys ( )
103132
104133 XCTAssertEqual ( service. requests. count, 0 )
105134 }
@@ -112,7 +141,7 @@ class MXSharedHistoryKeyManagerUnitTests: XCTestCase {
112141 crypto. devices. setObject ( MXDeviceInfo ( deviceId: " 2 " ) , forUser: " user1 " , andDevice: " 2 " )
113142 crypto. devices. setObject ( MXDeviceInfo ( deviceId: " 3 " ) , forUser: " user2 " , andDevice: " 3 " )
114143
115- manager . shareMessageKeys ( withUserId : " user1 " , messageEnumerator : enumerator , limit : . max )
144+ shareKeys ( )
116145
117146 XCTAssertEqual ( service. requests. count, 1 )
118147 XCTAssertEqual (
@@ -123,7 +152,7 @@ class MXSharedHistoryKeyManagerUnitTests: XCTestCase {
123152 MXDeviceInfo ( deviceId: " 1 " ) ,
124153 MXDeviceInfo ( deviceId: " 2 " )
125154 ] ,
126- roomId: " 123 " ,
155+ roomId: " ABC " ,
127156 sessionId: " A " ,
128157 senderKey: " B "
129158 )
@@ -141,7 +170,7 @@ class MXSharedHistoryKeyManagerUnitTests: XCTestCase {
141170 makeEvent ( sessionId: " 3 " , senderKey: " B " ) ,
142171 ]
143172
144- manager . shareMessageKeys ( withUserId : " user1 " , messageEnumerator : enumerator , limit : . max )
173+ shareKeys ( )
145174
146175 let identifiers = service. requests. map { [ $0. sessionId, $0. senderKey] }
147176 XCTAssertEqual ( service. requests. count, 5 )
@@ -161,7 +190,7 @@ class MXSharedHistoryKeyManagerUnitTests: XCTestCase {
161190 makeEvent ( sessionId: " 1 " ) ,
162191 ]
163192
164- manager . shareMessageKeys ( withUserId : " user1 " , messageEnumerator : enumerator , limit: 3 )
193+ shareKeys ( limit: 3 )
165194
166195 let identifiers = service. requests. map { $0. sessionId }
167196 XCTAssertEqual ( service. requests. count, 3 )
@@ -177,17 +206,44 @@ class MXSharedHistoryKeyManagerUnitTests: XCTestCase {
177206 makeEvent ( sessionId: " 5 " ) ,
178207 ]
179208 service. sharedHistory = [
180- " 1 " ,
181- " 2 " ,
182- " 4 " ,
209+ makeInboundSession ( sessionId : " 1 " ) ,
210+ makeInboundSession ( sessionId : " 2 " ) ,
211+ makeInboundSession ( sessionId : " 4 " ) ,
183212 ]
184213
185- manager . shareMessageKeys ( withUserId : " user1 " , messageEnumerator : enumerator , limit : . max )
214+ shareKeys ( )
186215
187216 let identifiers = service. requests. map { $0. sessionId }
188217 XCTAssertEqual ( service. requests. count, 3 )
189218 XCTAssertEqual ( Set ( identifiers) , [ " 1 " , " 2 " , " 4 " ] )
190219 }
220+
221+ func testIgnoresEventsWithMismatchedRoomId( ) {
222+ enumerator. messages = [
223+ makeEvent ( sessionId: " 1 " ) ,
224+ makeEvent ( sessionId: " 2 " ) ,
225+ makeEvent ( sessionId: " 3 " ) ,
226+ ]
227+ service. sharedHistory = [
228+ makeInboundSession (
229+ roomId: " XYZ " ,
230+ sessionId: " 1 "
231+ ) ,
232+ makeInboundSession (
233+ roomId: " ABC " ,
234+ sessionId: " 2 "
235+ ) ,
236+ makeInboundSession (
237+ roomId: " XYZ " ,
238+ sessionId: " 3 "
239+ ) ,
240+ ]
241+
242+ shareKeys ( roomId: " ABC " )
243+
244+ XCTAssertEqual ( service. requests. count, 1 )
245+ XCTAssertEqual ( service. requests. first? . sessionId, " 2 " )
246+ }
191247}
192248
193249extension MXSharedHistoryKeyRequest {
0 commit comments