@@ -3444,13 +3444,23 @@ putReceiptModeOk = do
3444
3444
assertEqual " modes should match" mode 0
3445
3445
_ -> assertFailure " Unexpected event data"
3446
3446
3447
+ -- | Test setup
3448
+ -- A (local) - alice: admin on remote conversation, adam: regular member of remote conversation
3449
+ -- B (mocked) - owns the conversation
3450
+ --
3451
+ -- The federator on A is also mocked.
3452
+ --
3453
+ -- alice changes receipt remote via client api
3454
+ -- assertion: A's federator is called correctly
3455
+ -- assertion: backend A generates events for adam (and alice)
3456
+ -- and federator's response
3447
3457
putRemoteReceiptModeOk :: TestM ()
3448
3458
putRemoteReceiptModeOk = do
3449
3459
c <- view tsCannon
3450
3460
qalice <- randomQualifiedUser
3451
3461
let alice = qUnqualified qalice
3452
3462
3453
- -- create a remote conversation with alice as admin
3463
+ -- create a remote conversation at bob with alice as admin
3454
3464
let remoteDomain = Domain " bobland.example.com"
3455
3465
qbob <- Qualified <$> randomId <*> pure remoteDomain
3456
3466
qconv <- Qualified <$> randomId <*> pure remoteDomain
@@ -3468,7 +3478,7 @@ putRemoteReceiptModeOk = do
3468
3478
}
3469
3479
runFedClient @ " on-conversation-updated" fedGalleyClient remoteDomain cuAddAlice
3470
3480
3471
- -- add another users from this backend
3481
+ -- add another user adam as member
3472
3482
qadam <- randomQualifiedUser
3473
3483
let adam = qUnqualified qadam
3474
3484
connectWithRemoteUser adam qbob
@@ -3495,13 +3505,26 @@ putRemoteReceiptModeOk = do
3495
3505
SomeConversationAction (sing @ 'ConversationReceiptModeUpdateTag) action
3496
3506
}
3497
3507
let mockResponse = const (ConversationUpdateResponseUpdate responseConvUpdate)
3498
- (res, federatedRequests) <- withTempMockFederator mockResponse $ do
3499
- putQualifiedReceiptMode alice qconv newReceiptMode
3500
- <!! const 200 === statusCode
3501
- -- check event in res
3502
- -- assert federatedRequest
3503
- -- assert adam gets event
3504
- pure ()
3508
+
3509
+ WS. bracketR c adam $ \ wsAdam -> do
3510
+ (res, federatedRequests) <- withTempMockFederator mockResponse $ do
3511
+ putQualifiedReceiptMode alice qconv newReceiptMode
3512
+ <!! const 200 === statusCode
3513
+
3514
+ let event :: Event = responseJsonUnsafe res
3515
+ let (EdConvReceiptModeUpdate (ConversationReceiptModeUpdate receiptModeEvent)) = evtData event
3516
+
3517
+ liftIO $ assertEqual " Unexcepected receipt mode in event" newReceiptMode receiptModeEvent
3518
+
3519
+ cFedReq <- assertOne $ filter (\ r -> frTargetDomain r == remoteDomain && frRPC r == " update-conversation" ) federatedRequests
3520
+ cFedReqBody <- assertRight $ parseFedRequest cFedReq
3521
+ liftIO $ do
3522
+ curUser cFedReqBody @?= alice
3523
+ curConvId cFedReqBody @?= qUnqualified qconv
3524
+ curAction cFedReqBody @?= SomeConversationAction (sing @ 'ConversationReceiptModeUpdateTag) action
3525
+
3526
+ WS. assertMatch_ (5 # Second ) wsAdam $ \ n -> do
3527
+ liftIO $ wsAssertConvReceiptModeUpdate qconv qadam newReceiptMode n
3505
3528
3506
3529
putReceiptModeWithRemotesOk :: TestM ()
3507
3530
putReceiptModeWithRemotesOk = do
0 commit comments