Skip to content

Commit 3151928

Browse files
committed
Add federated access update tests
1 parent bdd2063 commit 3151928

File tree

3 files changed

+72
-0
lines changed

3 files changed

+72
-0
lines changed

services/galley/test/integration/API/Federation.hs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ tests s =
7272
test s "POST /federation/on-conversation-updated : Notify local user about message timer update" notifyMessageTimer,
7373
test s "POST /federation/on-conversation-updated : Notify local user about member update" notifyMemberUpdate,
7474
test s "POST /federation/on-conversation-updated : Notify local user about receipt mode update" notifyReceiptMode,
75+
test s "POST /federation/on-conversation-updated : Notify local user about access update" notifyAccess,
7576
test s "POST /federation/leave-conversation : Success" leaveConversationSuccess,
7677
test s "POST /federation/on-message-sent : Receive a message from another backend" onMessageSent,
7778
test s "POST /federation/send-message : Post a message sent from another backend" sendMessage
@@ -365,6 +366,15 @@ notifyReceiptMode = do
365366
ConvReceiptModeUpdate
366367
(EdConvReceiptModeUpdate d)
367368

369+
notifyAccess :: TestM ()
370+
notifyAccess = do
371+
let d = ConversationAccessData (Set.fromList [InviteAccess, LinkAccess]) TeamAccessRole
372+
notifyUpdate
373+
[]
374+
(ConversationActionAccessUpdate d)
375+
ConvAccessUpdate
376+
(EdConvAccessUpdate d)
377+
368378
notifyMemberUpdate :: TestM ()
369379
notifyMemberUpdate = do
370380
qdee <- randomQualifiedUser

services/galley/test/integration/API/Roles.hs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ tests s =
5353
[ test s "conversation roles admin (and downgrade)" handleConversationRoleAdmin,
5454
test s "conversation roles member (and upgrade)" handleConversationRoleMember,
5555
test s "conversation role update with remote users present" roleUpdateWithRemotes,
56+
test s "conversation access update with remote users present" accessUpdateWithRemotes,
5657
test s "conversation role update of remote member" roleUpdateRemoteMember,
5758
test s "get all conversation roles" testAllConversationRoles
5859
]
@@ -286,6 +287,51 @@ roleUpdateWithRemotes = do
286287
evtFrom e @?= qbob
287288
evtData e @?= EdMemberUpdate mu
288289

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+
289335
-- | Given an admin, another admin and a member run all
290336
-- the necessary checks targeting the admin
291337
wireAdminChecks ::

services/galley/test/integration/API/Util.hs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,6 +1086,22 @@ putAccessUpdate u c acc = do
10861086
. zType "access"
10871087
. json acc
10881088

1089+
putQualifiedAccessUpdate ::
1090+
(MonadHttp m, HasGalley m, MonadIO m) =>
1091+
UserId ->
1092+
Qualified ConvId ->
1093+
ConversationAccessData ->
1094+
m ResponseLBS
1095+
putQualifiedAccessUpdate u (Qualified c domain) acc = do
1096+
g <- viewGalley
1097+
put $
1098+
g
1099+
. paths ["/conversations", toByteString' domain, toByteString' c, "access"]
1100+
. zUser u
1101+
. zConn "conn"
1102+
. zType "access"
1103+
. json acc
1104+
10891105
putMessageTimerUpdateQualified ::
10901106
(HasGalley m, MonadIO m, MonadHttp m) =>
10911107
UserId ->

0 commit comments

Comments
 (0)