@@ -277,6 +277,10 @@ describe.each(Object.entries(CRYPTO_BACKENDS))("verification (%s)", (backend: st
277
277
await verificationPromise ;
278
278
expect ( request . phase ) . toEqual ( VerificationPhase . Done ) ;
279
279
280
+ // at this point, cancelling should do nothing.
281
+ await request . cancel ( ) ;
282
+ expect ( request . phase ) . toEqual ( VerificationPhase . Done ) ;
283
+
280
284
// we're done with the temporary keypair
281
285
olmSAS . free ( ) ;
282
286
} ) ;
@@ -393,11 +397,41 @@ describe.each(Object.entries(CRYPTO_BACKENDS))("verification (%s)", (backend: st
393
397
await verificationPromise ;
394
398
expect ( request . phase ) . toEqual ( VerificationPhase . Done ) ;
395
399
} ) ;
400
+ } ) ;
401
+
402
+ describe ( "cancellation" , ( ) => {
403
+ beforeEach ( async ( ) => {
404
+ // pretend that we have another device, which we will start verifying
405
+ e2eKeyResponder . addDeviceKeys ( TEST_USER_ID , TEST_DEVICE_ID , SIGNED_TEST_DEVICE_DATA ) ;
396
406
397
- it ( "can cancel during the SAS phase" , async ( ) => {
398
407
aliceClient = await startTestClient ( ) ;
399
408
await waitForDeviceList ( ) ;
409
+ } ) ;
410
+
411
+ it ( "can cancel during the Ready phase" , async ( ) => {
412
+ // have alice initiate a verification. She should send a m.key.verification.request
413
+ const [ , request ] = await Promise . all ( [
414
+ expectSendToDeviceMessage ( "m.key.verification.request" ) ,
415
+ aliceClient . getCrypto ( ) ! . requestDeviceVerification ( TEST_USER_ID , TEST_DEVICE_ID ) ,
416
+ ] ) ;
417
+ const transactionId = request . transactionId ! ;
400
418
419
+ // The dummy device replies with an m.key.verification.ready...
420
+ returnToDeviceMessageFromSync ( buildReadyMessage ( transactionId , [ "m.sas.v1" ] ) ) ;
421
+ await waitForVerificationRequestChanged ( request ) ;
422
+
423
+ // now alice changes her mind
424
+ const [ requestBody ] = await Promise . all ( [
425
+ expectSendToDeviceMessage ( "m.key.verification.cancel" ) ,
426
+ request . cancel ( ) ,
427
+ ] ) ;
428
+ const toDeviceMessage = requestBody . messages [ TEST_USER_ID ] [ TEST_DEVICE_ID ] ;
429
+ expect ( toDeviceMessage . transaction_id ) . toEqual ( transactionId ) ;
430
+ expect ( toDeviceMessage . code ) . toEqual ( "m.user" ) ;
431
+ expect ( request . phase ) . toEqual ( VerificationPhase . Cancelled ) ;
432
+ } ) ;
433
+
434
+ it ( "can cancel during the SAS phase" , async ( ) => {
401
435
// have alice initiate a verification. She should send a m.key.verification.request
402
436
const [ , request ] = await Promise . all ( [
403
437
expectSendToDeviceMessage ( "m.key.verification.request" ) ,
0 commit comments