Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FS-1558] Add a test: delete a subconversation as a conversation member #3119

Merged
merged 2 commits into from
Mar 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion changelog.d/1-api-changes/delete-subconversation
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Introduce an endpoint for deleting a subconversation
Introduce an endpoint for deleting a subconversation (#2956, #3119)
32 changes: 21 additions & 11 deletions services/galley/test/integration/API/MLS.hs
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,9 @@ tests s =
test s "fail to add another client to a subconversation via internal commit" testAddClientSubConvFailure,
test s "remove another client from a subconversation" testRemoveClientSubConv,
test s "send an application message in a subconversation" testSendMessageSubConv,
test s "reset a subconversation as a member" (testDeleteSubConv True),
test s "reset a subconversation as a non-member" (testDeleteSubConv False),
test s "reset a subconversation as a creator" (testDeleteSubConv SubConvMember),
test s "reset a subconversation as a conversation member" (testDeleteSubConv ConvMember),
test s "reset a subconversation as a random user" (testDeleteSubConv RandomUser),
test s "fail to reset a subconversation with wrong epoch" testDeleteSubConvStale,
test s "leave a subconversation as a creator" (testLeaveSubConv True),
test s "leave a subconversation as a non-creator" (testLeaveSubConv False),
Expand Down Expand Up @@ -2745,18 +2746,23 @@ testRemoteMemberDeleteSubConv isAMember = do
expectFailure errExpected (DeleteSubConversationResponseError err) =
liftIO $ err @?= errExpected

testDeleteSubConv :: Bool -> TestM ()
testDeleteSubConv isAMember = do
alice <- randomQualifiedUser
-- | A choice on who is deleting a subconversation
data SubConvDeleterType
= ConvMember
| SubConvMember
| RandomUser
deriving (Eq)

testDeleteSubConv :: SubConvDeleterType -> TestM ()
testDeleteSubConv deleterType = do
[alice, bob] <- createAndConnectUsers [Nothing, Nothing]
randUser <- randomId
let (deleter, expectedCode) =
if isAMember
then (qUnqualified alice, 200)
else (randUser, 403)
let sconv = SubConvId "conference"
qcnv <- runMLSTest $ do
alice1 <- createMLSClient alice
[alice1, bob1] <- traverse createMLSClient [alice, bob]
void $ uploadNewKeyPackage bob1
(_, qcnv) <- setupMLSGroup alice1
void $ createAddCommit alice1 [bob] >>= sendAndConsumeCommitBundle
void $ createSubConv qcnv alice1 sconv
pure qcnv

Expand All @@ -2765,6 +2771,10 @@ testDeleteSubConv isAMember = do
=<< getSubConv (qUnqualified alice) qcnv sconv
<!! const 200 === statusCode
let dsc = DeleteSubConversationRequest (pscGroupId sub) (pscEpoch sub)
let (deleter, expectedCode) = case deleterType of
ConvMember -> (qUnqualified bob, 200)
SubConvMember -> (qUnqualified alice, 200)
RandomUser -> (randUser, 403)
deleteSubConv deleter qcnv sconv dsc !!! const expectedCode === statusCode

newSub <-
Expand All @@ -2773,7 +2783,7 @@ testDeleteSubConv isAMember = do
<!! do const 200 === statusCode

liftIO $
if isAMember
if deleterType == ConvMember || deleterType == SubConvMember
then
assertBool
"Old and new subconversation are equal"
Expand Down