@@ -290,6 +290,10 @@ describe.each(Object.entries(CRYPTO_BACKENDS))("verification (%s)", (backend: st
290
290
await verificationPromise ;
291
291
expect ( request . phase ) . toEqual ( VerificationPhase . Done ) ;
292
292
293
+ // at this point, cancelling should do nothing.
294
+ await request . cancel ( ) ;
295
+ expect ( request . phase ) . toEqual ( VerificationPhase . Done ) ;
296
+
293
297
// we're done with the temporary keypair
294
298
olmSAS . free ( ) ;
295
299
} ) ;
@@ -406,11 +410,41 @@ describe.each(Object.entries(CRYPTO_BACKENDS))("verification (%s)", (backend: st
406
410
await verificationPromise ;
407
411
expect ( request . phase ) . toEqual ( VerificationPhase . Done ) ;
408
412
} ) ;
413
+ } ) ;
414
+
415
+ describe ( "cancellation" , ( ) => {
416
+ beforeEach ( async ( ) => {
417
+ // pretend that we have another device, which we will start verifying
418
+ e2eKeyResponder . addDeviceKeys ( TEST_USER_ID , TEST_DEVICE_ID , SIGNED_TEST_DEVICE_DATA ) ;
409
419
410
- it ( "can cancel during the SAS phase" , async ( ) => {
411
420
aliceClient = await startTestClient ( ) ;
412
421
await waitForDeviceList ( ) ;
422
+ } ) ;
423
+
424
+ it ( "can cancel during the Ready phase" , async ( ) => {
425
+ // have alice initiate a verification. She should send a m.key.verification.request
426
+ const [ , request ] = await Promise . all ( [
427
+ expectSendToDeviceMessage ( "m.key.verification.request" ) ,
428
+ aliceClient . getCrypto ( ) ! . requestDeviceVerification ( TEST_USER_ID , TEST_DEVICE_ID ) ,
429
+ ] ) ;
430
+ const transactionId = request . transactionId ! ;
413
431
432
+ // The dummy device replies with an m.key.verification.ready...
433
+ returnToDeviceMessageFromSync ( buildReadyMessage ( transactionId , [ "m.sas.v1" ] ) ) ;
434
+ await waitForVerificationRequestChanged ( request ) ;
435
+
436
+ // now alice changes her mind
437
+ const [ requestBody ] = await Promise . all ( [
438
+ expectSendToDeviceMessage ( "m.key.verification.cancel" ) ,
439
+ request . cancel ( ) ,
440
+ ] ) ;
441
+ const toDeviceMessage = requestBody . messages [ TEST_USER_ID ] [ TEST_DEVICE_ID ] ;
442
+ expect ( toDeviceMessage . transaction_id ) . toEqual ( transactionId ) ;
443
+ expect ( toDeviceMessage . code ) . toEqual ( "m.user" ) ;
444
+ expect ( request . phase ) . toEqual ( VerificationPhase . Cancelled ) ;
445
+ } ) ;
446
+
447
+ it ( "can cancel during the SAS phase" , async ( ) => {
414
448
// have alice initiate a verification. She should send a m.key.verification.request
415
449
const [ , request ] = await Promise . all ( [
416
450
expectSendToDeviceMessage ( "m.key.verification.request" ) ,
0 commit comments