mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2025-06-29 04:39:53 +00:00
core: more test cases checking deletion of unused contacts and incognito profiles (#1513)
This commit is contained in:
parent
fb05218558
commit
4319a581ca
1 changed files with 219 additions and 37 deletions
|
@ -52,6 +52,7 @@ chatTests :: Spec
|
|||
chatTests = do
|
||||
describe "direct messages" $ do
|
||||
describe "add contact and send/receive message" testAddContact
|
||||
it "deleting contact deletes profile" testDeleteContactDeletesProfile
|
||||
it "direct message quoted replies" testDirectMessageQuotedReply
|
||||
it "direct message update" testDirectMessageUpdate
|
||||
it "direct message delete" testDirectMessageDelete
|
||||
|
@ -121,6 +122,13 @@ chatTests = do
|
|||
it "can't see global preferences update" testCantSeeGlobalPrefsUpdateIncognito
|
||||
it "deleting contact first, group second deletes incognito profile" testDeleteContactThenGroupDeletesIncognitoProfile
|
||||
it "deleting group first, contact second deletes incognito profile" testDeleteGroupThenContactDeletesIncognitoProfile
|
||||
describe "group links" $ do
|
||||
it "create group link, join via group link" testGroupLink
|
||||
it "delete group, re-join via same link" testGroupLinkDeleteGroupRejoin
|
||||
it "sending message to contact created via group link marks it used" testGroupLinkContactUsed
|
||||
it "create group link, join via group link - incognito membership" testGroupLinkIncognitoMembership
|
||||
it "unused host contact is deleted after all groups with it are deleted" testGroupLinkUnusedHostContactDeleted
|
||||
it "leaving groups with unused host contacts deletes incognito profiles" testGroupLinkIncognitoUnusedHostContactsDeleted
|
||||
describe "contact aliases" $ do
|
||||
it "set contact alias" testSetAlias
|
||||
it "set connection alias" testSetConnectionAlias
|
||||
|
@ -157,11 +165,6 @@ chatTests = do
|
|||
it "mute/unmute group" testMuteGroup
|
||||
describe "chat item expiration" $ do
|
||||
it "set chat item TTL" testSetChatItemTTL
|
||||
describe "group links" $ do
|
||||
it "create group link, join via group link" testGroupLink
|
||||
it "delete group, re-join via same link" testGroupLinkDeleteGroupRejoin
|
||||
it "sending message to contact created via group link marks it used" testGroupLinkContactUsed
|
||||
it "create group link, join via group link - incognito membership" testGroupLinkIncognitoMembership
|
||||
describe "queue rotation" $ do
|
||||
it "switch contact to a different queue" testSwitchContact
|
||||
it "switch group member to a different queue" testSwitchGroupMember
|
||||
|
@ -265,7 +268,9 @@ testAddContact = versionTestMatrix2 runTestAddContact
|
|||
alice ##> "@bob_1 hey"
|
||||
alice <## "no contact bob_1"
|
||||
alice @@@ [("@bob", "how are you?")]
|
||||
alice `hasContactProfiles` ["alice", "bob"]
|
||||
bob @@@ [("@alice_1", "hi"), ("@alice", "how are you?")]
|
||||
bob `hasContactProfiles` ["alice", "alice", "bob"]
|
||||
-- test clearing chat
|
||||
alice #$> ("/clear bob", id, "bob: all messages are removed locally ONLY")
|
||||
alice #$> ("/_get chat @2 count=100", chat, [])
|
||||
|
@ -297,6 +302,25 @@ testAddContact = versionTestMatrix2 runTestAddContact
|
|||
alice #$> ("/_read chat @2", id, "ok")
|
||||
bob #$> ("/_read chat @2", id, "ok")
|
||||
|
||||
testDeleteContactDeletesProfile :: IO ()
|
||||
testDeleteContactDeletesProfile =
|
||||
testChat2 aliceProfile bobProfile $
|
||||
\alice bob -> do
|
||||
connectUsers alice bob
|
||||
alice <##> bob
|
||||
-- alice deletes contact, profile is deleted
|
||||
alice ##> "/d bob"
|
||||
alice <## "bob: contact is deleted"
|
||||
alice ##> "/cs"
|
||||
(alice </)
|
||||
alice `hasContactProfiles` ["alice"]
|
||||
-- bob deletes contact, profile is deleted
|
||||
bob ##> "/d alice"
|
||||
bob <## "alice: contact is deleted"
|
||||
bob ##> "/cs"
|
||||
(bob </)
|
||||
bob `hasContactProfiles` ["bob"]
|
||||
|
||||
testDirectMessageQuotedReply :: IO ()
|
||||
testDirectMessageQuotedReply =
|
||||
testChat2 aliceProfile bobProfile $
|
||||
|
@ -1433,22 +1457,8 @@ testGroupDeleteUnusedContacts =
|
|||
cath ##> "/cs"
|
||||
cath <## "alice (Alice)"
|
||||
cath <## "bob (Bob)"
|
||||
-- delete group 1
|
||||
alice ##> "/d #team"
|
||||
concurrentlyN_
|
||||
[ alice <## "#team: you deleted the group",
|
||||
do
|
||||
bob <## "#team: alice deleted the group"
|
||||
bob <## "use /d #team to delete the local copy of the group",
|
||||
do
|
||||
cath <## "#team: alice deleted the group"
|
||||
cath <## "use /d #team to delete the local copy of the group"
|
||||
]
|
||||
bob ##> "/d #team"
|
||||
bob <## "#team: you deleted the group"
|
||||
cath ##> "/d #team"
|
||||
cath <## "#team: you deleted the group"
|
||||
-- contacts and profiles are kept
|
||||
-- delete group 1, contacts and profiles are kept
|
||||
deleteGroup alice bob cath "team"
|
||||
bob ##> "/cs"
|
||||
bob <## "alice (Alice)"
|
||||
bob <## "cath (Catherine)"
|
||||
|
@ -1457,28 +1467,30 @@ testGroupDeleteUnusedContacts =
|
|||
cath <## "alice (Alice)"
|
||||
cath <## "bob (Bob)"
|
||||
cath `hasContactProfiles` ["alice", "bob", "cath"]
|
||||
-- delete group 2
|
||||
alice ##> "/d #club"
|
||||
concurrentlyN_
|
||||
[ alice <## "#club: you deleted the group",
|
||||
do
|
||||
bob <## "#club: alice deleted the group"
|
||||
bob <## "use /d #club to delete the local copy of the group",
|
||||
do
|
||||
cath <## "#club: alice deleted the group"
|
||||
cath <## "use /d #club to delete the local copy of the group"
|
||||
]
|
||||
bob ##> "/d #club"
|
||||
bob <## "#club: you deleted the group"
|
||||
cath ##> "/d #club"
|
||||
cath <## "#club: you deleted the group"
|
||||
-- unused contacts and profiles are deleted
|
||||
-- delete group 2, unused contacts and profiles are deleted
|
||||
deleteGroup alice bob cath "club"
|
||||
bob ##> "/cs"
|
||||
bob <## "alice (Alice)"
|
||||
bob `hasContactProfiles` ["alice", "bob"]
|
||||
cath ##> "/cs"
|
||||
cath <## "alice (Alice)"
|
||||
cath `hasContactProfiles` ["alice", "cath"]
|
||||
where
|
||||
deleteGroup alice bob cath group = do
|
||||
alice ##> ("/d #" <> group)
|
||||
concurrentlyN_
|
||||
[ alice <## ("#" <> group <> ": you deleted the group"),
|
||||
do
|
||||
bob <## ("#" <> group <> ": alice deleted the group")
|
||||
bob <## ("use /d #" <> group <> " to delete the local copy of the group"),
|
||||
do
|
||||
cath <## ("#" <> group <> ": alice deleted the group")
|
||||
cath <## ("use /d #" <> group <> " to delete the local copy of the group")
|
||||
]
|
||||
bob ##> ("/d #" <> group)
|
||||
bob <## ("#" <> group <> ": you deleted the group")
|
||||
cath ##> ("/d #" <> group)
|
||||
cath <## ("#" <> group <> ": you deleted the group")
|
||||
|
||||
testGroupAsync :: IO ()
|
||||
testGroupAsync = withTmpFiles $ do
|
||||
|
@ -2731,6 +2743,28 @@ testConnectIncognitoInvitationLink = testChat3 aliceProfile bobProfile cathProfi
|
|||
alice <## "Full deletion: off (you allow: no, contact allows: no)"
|
||||
bob <## (aliceIncognito <> " updated preferences for you:")
|
||||
bob <## "Full deletion: off (you allow: no, contact allows: no)"
|
||||
-- list contacts
|
||||
alice ##> "/cs"
|
||||
alice
|
||||
<### [ ConsoleString $ "i " <> bobIncognito,
|
||||
"cath (Catherine)"
|
||||
]
|
||||
alice `hasContactProfiles` ["alice", T.pack aliceIncognito, T.pack bobIncognito, "cath"]
|
||||
bob ##> "/cs"
|
||||
bob <## ("i " <> aliceIncognito)
|
||||
bob `hasContactProfiles` ["bob", T.pack aliceIncognito, T.pack bobIncognito]
|
||||
-- alice deletes contact, incognito profile is deleted
|
||||
alice ##> ("/d " <> bobIncognito)
|
||||
alice <## (bobIncognito <> ": contact is deleted")
|
||||
alice ##> "/cs"
|
||||
alice <## "cath (Catherine)"
|
||||
alice `hasContactProfiles` ["alice", "cath"]
|
||||
-- bob deletes contact, incognito profile is deleted
|
||||
bob ##> ("/d " <> aliceIncognito)
|
||||
bob <## (aliceIncognito <> ": contact is deleted")
|
||||
bob ##> "/cs"
|
||||
(bob </)
|
||||
bob `hasContactProfiles` ["bob"]
|
||||
|
||||
testConnectIncognitoContactAddress :: IO ()
|
||||
testConnectIncognitoContactAddress = testChat2 aliceProfile bobProfile $
|
||||
|
@ -2760,6 +2794,16 @@ testConnectIncognitoContactAddress = testChat2 aliceProfile bobProfile $
|
|||
bob ?<# "alice> who are you?"
|
||||
bob ?#> "@alice I'm Batman"
|
||||
alice <# (bobIncognito <> "> I'm Batman")
|
||||
-- list contacts
|
||||
bob ##> "/cs"
|
||||
bob <## "i alice (Alice)"
|
||||
bob `hasContactProfiles` ["alice", "bob", T.pack bobIncognito]
|
||||
-- delete contact, incognito profile is deleted
|
||||
bob ##> "/d alice"
|
||||
bob <## "alice: contact is deleted"
|
||||
bob ##> "/cs"
|
||||
(bob </)
|
||||
bob `hasContactProfiles` ["bob"]
|
||||
|
||||
testAcceptContactRequestIncognito :: IO ()
|
||||
testAcceptContactRequestIncognito = testChat2 aliceProfile bobProfile $
|
||||
|
@ -2785,6 +2829,16 @@ testAcceptContactRequestIncognito = testChat2 aliceProfile bobProfile $
|
|||
bob <# (aliceIncognito <> "> my profile is totally inconspicuous")
|
||||
bob #> ("@" <> aliceIncognito <> " I know!")
|
||||
alice ?<# "bob> I know!"
|
||||
-- list contacts
|
||||
alice ##> "/cs"
|
||||
alice <## "i bob (Bob)"
|
||||
alice `hasContactProfiles` ["alice", "bob", T.pack aliceIncognito]
|
||||
-- delete contact, incognito profile is deleted
|
||||
alice ##> "/d bob"
|
||||
alice <## "bob: contact is deleted"
|
||||
alice ##> "/cs"
|
||||
(alice </)
|
||||
alice `hasContactProfiles` ["alice"]
|
||||
|
||||
testJoinGroupIncognito :: IO ()
|
||||
testJoinGroupIncognito = testChat4 aliceProfile bobProfile cathProfile danProfile $
|
||||
|
@ -4341,6 +4395,134 @@ testGroupLinkIncognitoMembership =
|
|||
cath <# ("#team " <> danIncognito <> "> how is it going?")
|
||||
]
|
||||
|
||||
testGroupLinkUnusedHostContactDeleted :: IO ()
|
||||
testGroupLinkUnusedHostContactDeleted =
|
||||
testChat2 aliceProfile bobProfile $
|
||||
\alice bob -> do
|
||||
-- create group 1
|
||||
alice ##> "/g team"
|
||||
alice <## "group #team is created"
|
||||
alice <## "use /a team <name> to add members"
|
||||
alice ##> "/create link #team"
|
||||
gLinkTeam <- getGroupLink alice "team" True
|
||||
bob ##> ("/c " <> gLinkTeam)
|
||||
bob <## "connection request sent!"
|
||||
alice <## "bob (Bob): accepting request to join group #team..."
|
||||
concurrentlyN_
|
||||
[ do
|
||||
alice <## "bob (Bob): contact is connected"
|
||||
alice <## "bob invited to group #team via your group link"
|
||||
alice <## "#team: bob joined the group",
|
||||
do
|
||||
bob <## "alice (Alice): contact is connected"
|
||||
bob <## "#team: you joined the group"
|
||||
]
|
||||
-- create group 2
|
||||
alice ##> "/g club"
|
||||
alice <## "group #club is created"
|
||||
alice <## "use /a club <name> to add members"
|
||||
alice ##> "/create link #club"
|
||||
gLinkClub <- getGroupLink alice "club" True
|
||||
bob ##> ("/c " <> gLinkClub)
|
||||
bob <## "connection request sent!"
|
||||
alice <## "bob_1 (Bob): accepting request to join group #club..."
|
||||
concurrentlyN_
|
||||
[ alice
|
||||
<### [ "bob_1 (Bob): contact is connected",
|
||||
"contact bob_1 is merged into bob",
|
||||
"use @bob <message> to send messages",
|
||||
EndsWith "invited to group #club via your group link",
|
||||
EndsWith "joined the group"
|
||||
],
|
||||
bob
|
||||
<### [ "alice_1 (Alice): contact is connected",
|
||||
"contact alice_1 is merged into alice",
|
||||
"use @alice <message> to send messages",
|
||||
"#club: you joined the group"
|
||||
]
|
||||
]
|
||||
-- list contacts
|
||||
bob ##> "/cs"
|
||||
bob <## "alice (Alice)"
|
||||
-- delete group 1, host contact and profile are kept
|
||||
bobLeaveDeleteGroup alice bob "team"
|
||||
bob ##> "/cs"
|
||||
bob <## "alice (Alice)"
|
||||
bob `hasContactProfiles` ["alice", "bob"]
|
||||
-- delete group 2, unused host contact and profile are deleted
|
||||
bobLeaveDeleteGroup alice bob "club"
|
||||
bob ##> "/cs"
|
||||
(bob </)
|
||||
bob `hasContactProfiles` ["bob"]
|
||||
where
|
||||
bobLeaveDeleteGroup alice bob group = do
|
||||
bob ##> ("/l " <> group)
|
||||
concurrentlyN_
|
||||
[ do
|
||||
bob <## ("#" <> group <> ": you left the group")
|
||||
bob <## ("use /d #" <> group <> " to delete the group"),
|
||||
alice <## ("#" <> group <> ": bob left the group")
|
||||
]
|
||||
bob ##> ("/d #" <> group)
|
||||
bob <## ("#" <> group <> ": you deleted the group")
|
||||
|
||||
testGroupLinkIncognitoUnusedHostContactsDeleted :: IO ()
|
||||
testGroupLinkIncognitoUnusedHostContactsDeleted =
|
||||
testChat2 aliceProfile bobProfile $
|
||||
\alice bob -> do
|
||||
bob #$> ("/incognito on", id, "ok")
|
||||
bobIncognitoTeam <- createGroupBobIncognito alice bob "team" "alice"
|
||||
bobIncognitoClub <- createGroupBobIncognito alice bob "club" "alice_1"
|
||||
bobIncognitoTeam `shouldNotBe` bobIncognitoClub
|
||||
-- list contacts
|
||||
bob ##> "/cs"
|
||||
bob <## "i alice (Alice)"
|
||||
bob <## "i alice_1 (Alice)"
|
||||
bob `hasContactProfiles` ["alice", "alice", "bob", T.pack bobIncognitoTeam, T.pack bobIncognitoClub]
|
||||
-- delete group 1, unused host contact and profile are deleted
|
||||
bobLeaveDeleteGroup alice bob "team" bobIncognitoTeam
|
||||
bob ##> "/cs"
|
||||
bob <## "i alice_1 (Alice)"
|
||||
bob `hasContactProfiles` ["alice", "bob", T.pack bobIncognitoClub]
|
||||
-- delete group 2, unused host contact and profile are deleted
|
||||
bobLeaveDeleteGroup alice bob "club" bobIncognitoClub
|
||||
bob ##> "/cs"
|
||||
(bob </)
|
||||
bob `hasContactProfiles` ["bob"]
|
||||
where
|
||||
createGroupBobIncognito alice bob group bobsAliceContact = do
|
||||
alice ##> ("/g " <> group)
|
||||
alice <## ("group #" <> group <> " is created")
|
||||
alice <## ("use /a " <> group <> " <name> to add members")
|
||||
alice ##> ("/create link #" <> group)
|
||||
gLinkTeam <- getGroupLink alice group True
|
||||
bob ##> ("/c " <> gLinkTeam)
|
||||
bobIncognito <- getTermLine bob
|
||||
bob <## "connection request sent incognito!"
|
||||
alice <## (bobIncognito <> ": accepting request to join group #" <> group <> "...")
|
||||
_ <- getTermLine bob
|
||||
concurrentlyN_
|
||||
[ do
|
||||
alice <## (bobIncognito <> ": contact is connected")
|
||||
alice <## (bobIncognito <> " invited to group #" <> group <> " via your group link")
|
||||
alice <## ("#" <> group <> ": " <> bobIncognito <> " joined the group"),
|
||||
do
|
||||
bob <## (bobsAliceContact <> " (Alice): contact is connected, your incognito profile for this contact is " <> bobIncognito)
|
||||
bob <## ("use /info " <> bobsAliceContact <> " to print out this incognito profile again")
|
||||
bob <## ("#" <> group <> ": you joined the group incognito as " <> bobIncognito)
|
||||
]
|
||||
pure bobIncognito
|
||||
bobLeaveDeleteGroup alice bob group bobIncognito = do
|
||||
bob ##> ("/l " <> group)
|
||||
concurrentlyN_
|
||||
[ do
|
||||
bob <## ("#" <> group <> ": you left the group")
|
||||
bob <## ("use /d #" <> group <> " to delete the group"),
|
||||
alice <## ("#" <> group <> ": " <> bobIncognito <> " left the group")
|
||||
]
|
||||
bob ##> ("/d #" <> group)
|
||||
bob <## ("#" <> group <> ": you deleted the group")
|
||||
|
||||
testSwitchContact :: IO ()
|
||||
testSwitchContact =
|
||||
testChat2 aliceProfile bobProfile $
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue