@@ -53,6 +53,7 @@ tests s =
53
53
[ test s " conversation roles admin (and downgrade)" handleConversationRoleAdmin,
54
54
test s " conversation roles member (and upgrade)" handleConversationRoleMember,
55
55
test s " conversation role update with remote users present" roleUpdateWithRemotes,
56
+ test s " conversation access update with remote users present" accessUpdateWithRemotes,
56
57
test s " conversation role update of remote member" roleUpdateRemoteMember,
57
58
test s " get all conversation roles" testAllConversationRoles
58
59
]
@@ -286,6 +287,51 @@ roleUpdateWithRemotes = do
286
287
evtFrom e @?= qbob
287
288
evtData e @?= EdMemberUpdate mu
288
289
290
+ accessUpdateWithRemotes :: TestM ()
291
+ accessUpdateWithRemotes = do
292
+ c <- view tsCannon
293
+ let remoteDomain = Domain " alice.example.com"
294
+ qalice <- Qualified <$> randomId <*> pure remoteDomain
295
+ qbob <- randomQualifiedUser
296
+ qcharlie <- randomQualifiedUser
297
+ let bob = qUnqualified qbob
298
+ charlie = qUnqualified qcharlie
299
+
300
+ connectUsers bob (singleton charlie)
301
+ resp <-
302
+ postConvWithRemoteUser
303
+ remoteDomain
304
+ (mkProfile qalice (Name " Alice" ))
305
+ bob
306
+ [qalice, qcharlie]
307
+ let qconv = decodeQualifiedConvId resp
308
+
309
+ opts <- view tsGConf
310
+ let access = ConversationAccessData (Set. singleton CodeAccess ) NonActivatedAccessRole
311
+ WS. bracketR2 c bob charlie $ \ (wsB, wsC) -> do
312
+ (_, requests) <-
313
+ withTempMockFederator opts remoteDomain (const () ) $
314
+ putQualifiedAccessUpdate bob qconv access
315
+ !!! const 200 === statusCode
316
+
317
+ req <- assertOne requests
318
+ liftIO $ do
319
+ F. domain req @?= domainText remoteDomain
320
+ fmap F. component (F. request req) @?= Just F. Galley
321
+ fmap F. path (F. request req) @?= Just " /federation/on-conversation-updated"
322
+ Just (Right cu) <- pure $ fmap (eitherDecode . LBS. fromStrict . F. body) (F. request req)
323
+ F. cuConvId cu @?= qUnqualified qconv
324
+ F. cuAction cu @?= ConversationActionAccessUpdate access
325
+ F. cuAlreadyPresentUsers cu @?= [qUnqualified qalice]
326
+
327
+ liftIO . WS. assertMatchN_ (5 # Second ) [wsB, wsC] $ \ n -> do
328
+ let e = List1. head (WS. unpackPayload n)
329
+ ntfTransient n @?= False
330
+ evtConv e @?= qconv
331
+ evtType e @?= ConvAccessUpdate
332
+ evtFrom e @?= qbob
333
+ evtData e @?= EdConvAccessUpdate access
334
+
289
335
-- | Given an admin, another admin and a member run all
290
336
-- the necessary checks targeting the admin
291
337
wireAdminChecks ::
0 commit comments