@@ -14,10 +14,12 @@ See the License for the specific language governing permissions and
14
14
limitations under the License.
15
15
*/
16
16
17
- import fetchMock from "fetch-mock-jest" ;
18
- import { MockResponse } from "fetch-mock" ;
19
17
import "fake-indexeddb/auto" ;
20
18
19
+ import { MockResponse } from "fetch-mock" ;
20
+ import fetchMock from "fetch-mock-jest" ;
21
+ import { IDBFactory } from "fake-indexeddb" ;
22
+
21
23
import { createClient , CryptoEvent , MatrixClient } from "../../../src" ;
22
24
import {
23
25
canAcceptVerificationRequest ,
@@ -67,6 +69,13 @@ beforeAll(async () => {
67
69
await global . Olm . init ( ) ;
68
70
} ) ;
69
71
72
+ afterEach ( ( ) => {
73
+ // reset fake-indexeddb after each test, to make sure we don't leak connections
74
+ // cf https://github.com/dumbmatter/fakeIndexedDB#wipingresetting-the-indexeddb-for-a-fresh-state
75
+ // eslint-disable-next-line no-global-assign
76
+ indexedDB = new IDBFactory ( ) ;
77
+ } ) ;
78
+
70
79
// restore the original global.crypto
71
80
afterAll ( ( ) => {
72
81
if ( previousCrypto === undefined ) {
@@ -317,6 +326,35 @@ function runTests(backend: string, initCrypto: InitCrypto, methods: string[] | u
317
326
olmSAS . free ( ) ;
318
327
} ) ;
319
328
329
+ it ( "Can make a verification request to *all* devices" , async ( ) => {
330
+ // we need an existing cross-signing key for this
331
+ e2eKeyResponder . addCrossSigningData ( SIGNED_CROSS_SIGNING_KEYS_DATA ) ;
332
+ await waitForDeviceList ( ) ;
333
+
334
+ // have alice initiate a verification. She should send a m.key.verification.request
335
+ const [ requestBody , request ] = await Promise . all ( [
336
+ expectSendToDeviceMessage ( "m.key.verification.request" ) ,
337
+ aliceClient . getCrypto ( ) ! . requestOwnUserVerification ( ) ,
338
+ ] ) ;
339
+
340
+ const transactionId = request . transactionId ;
341
+ expect ( transactionId ) . toBeDefined ( ) ;
342
+ expect ( request . phase ) . toEqual ( VerificationPhase . Requested ) ;
343
+
344
+ // and now the request should be visible via `getVerificationRequestsToDeviceInProgress`
345
+ {
346
+ const requests = aliceClient . getCrypto ( ) ! . getVerificationRequestsToDeviceInProgress ( TEST_USER_ID ) ;
347
+ expect ( requests . length ) . toEqual ( 1 ) ;
348
+ expect ( requests [ 0 ] . transactionId ) . toEqual ( transactionId ) ;
349
+ }
350
+
351
+ // legacy crypto picks devices individually; rust crypto uses a broadcast message
352
+ const toDeviceMessage =
353
+ requestBody . messages [ TEST_USER_ID ] [ "*" ] ?? requestBody . messages [ TEST_USER_ID ] [ TEST_DEVICE_ID ] ;
354
+ expect ( toDeviceMessage . from_device ) . toEqual ( aliceClient . deviceId ) ;
355
+ expect ( toDeviceMessage . transaction_id ) . toEqual ( transactionId ) ;
356
+ } ) ;
357
+
320
358
oldBackendOnly ( "can verify another via QR code with an untrusted cross-signing key" , async ( ) => {
321
359
// QRCode fails if we don't yet have the cross-signing keys, so make sure we have them now.
322
360
e2eKeyResponder . addCrossSigningData ( SIGNED_CROSS_SIGNING_KEYS_DATA ) ;
0 commit comments