core: allow deleting last user (#3567)
* core: allow deleting last user (tests fail) * tests, allow activating the hidden user when there is no active user * hide logs Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> * comment Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> * comment Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --------- Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
This commit is contained in:
1 parent
5e042d222e
commit
7b073ba9f8
4 files changed
+61
-39
No files matched your search
+2
-2
@@ -18,7 +18,7 @@ import Control.Monad.Except
|
||||
import Data.ByteArray (ScrubbedBytes)
|
||||
import Data.Functor (($>))
|
||||
import Data.List (dropWhileEnd, find)
|
||||
import Data.Maybe (fromJust, isNothing)
|
||||
import Data.Maybe (isNothing)
|
||||
import qualified Data.Text as T
|
||||
import Network.Socket
|
||||
import Simplex.Chat
|
||||
@@ -284,7 +284,7 @@ getTermLine cc =
|
||||
_ -> error "no output for 5 seconds"
|
||||
|
||||
userName :: TestCC -> IO [Char]
|
||||
userName (TestCC ChatController {currentUser} _ _ _ _ _) = T.unpack . localDisplayName . fromJust <$> readTVarIO currentUser
|
||||
userName (TestCC ChatController {currentUser} _ _ _ _ _) = maybe "no current user" (T.unpack . localDisplayName) <$> readTVarIO currentUser
|
||||
|
||||
testChat2 :: HasCallStack => Profile -> Profile -> (HasCallStack => TestCC -> TestCC -> IO ()) -> FilePath -> IO ()
|
||||
testChat2 = testChatCfgOpts2 testCfg testOpts
|
||||
|
||||
+41
-26
@@ -1492,16 +1492,16 @@ testDeleteUser =
|
||||
\alice bob cath dan -> do
|
||||
connectUsers alice bob
|
||||
|
||||
-- cannot delete active user
|
||||
alice ##> "/create user alisa"
|
||||
showActiveUser alice "alisa"
|
||||
|
||||
alice ##> "/_delete user 1 del_smp=off"
|
||||
-- cannot delete active user when there is another user
|
||||
|
||||
alice ##> "/_delete user 2 del_smp=off"
|
||||
alice <## "cannot delete active user"
|
||||
|
||||
-- delete user without deleting SMP queues
|
||||
|
||||
alice ##> "/create user alisa"
|
||||
showActiveUser alice "alisa"
|
||||
|
||||
connectUsers alice cath
|
||||
alice <##> cath
|
||||
|
||||
@@ -1519,17 +1519,7 @@ testDeleteUser =
|
||||
-- no connection authorization error - connection wasn't deleted
|
||||
(alice </)
|
||||
|
||||
-- cannot delete new active user
|
||||
|
||||
alice ##> "/delete user alisa"
|
||||
alice <## "cannot delete active user"
|
||||
|
||||
alice ##> "/users"
|
||||
alice <## "alisa (active)"
|
||||
|
||||
alice <##> cath
|
||||
|
||||
-- delete user deleting SMP queues
|
||||
-- cannot delete active user when there is another user
|
||||
|
||||
alice ##> "/create user alisa2"
|
||||
showActiveUser alice "alisa2"
|
||||
@@ -1537,10 +1527,17 @@ testDeleteUser =
|
||||
connectUsers alice dan
|
||||
alice <##> dan
|
||||
|
||||
alice ##> "/delete user alisa2"
|
||||
alice <## "cannot delete active user"
|
||||
|
||||
alice ##> "/users"
|
||||
alice <## "alisa"
|
||||
alice <## "alisa2 (active)"
|
||||
|
||||
alice <##> dan
|
||||
|
||||
-- delete user deleting SMP queues
|
||||
|
||||
alice ##> "/delete user alisa"
|
||||
alice <### ["ok", "completed deleting user"]
|
||||
|
||||
@@ -1553,6 +1550,16 @@ testDeleteUser =
|
||||
|
||||
alice <##> dan
|
||||
|
||||
-- delete last active user
|
||||
|
||||
alice ##> "/delete user alisa2 del_smp=off"
|
||||
alice <### ["ok", "completed deleting user"]
|
||||
alice ##> "/users"
|
||||
alice <## "no users"
|
||||
|
||||
alice ##> "/create user alisa3"
|
||||
showActiveUser alice "alisa3"
|
||||
|
||||
testUsersDifferentCIExpirationTTL :: HasCallStack => FilePath -> IO ()
|
||||
testUsersDifferentCIExpirationTTL tmp = do
|
||||
withNewTestChat tmp "bob" bobProfile $ \bob -> do
|
||||
@@ -2047,12 +2054,23 @@ testUserPrivacy =
|
||||
userVisible alice "current "
|
||||
alice ##> "/hide user new_password"
|
||||
userHidden alice "current "
|
||||
alice ##> "/_delete user 1 del_smp=on"
|
||||
alice <## "cannot delete last user"
|
||||
alice ##> "/_hide user 1 \"password\""
|
||||
alice <## "cannot hide the only not hidden user"
|
||||
alice ##> "/user alice"
|
||||
showActiveUser alice "alice (Alice)"
|
||||
-- delete last visible active user
|
||||
alice ##> "/_delete user 1 del_smp=on"
|
||||
alice <### ["ok", "completed deleting user"]
|
||||
-- hidden user is not shown
|
||||
alice ##> "/users"
|
||||
alice <## "no users"
|
||||
-- but it is still possible to switch to it
|
||||
alice ##> "/user alisa wrong_password"
|
||||
alice <## "user does not exist or incorrect password"
|
||||
alice ##> "/user alisa new_password"
|
||||
showActiveUser alice "alisa"
|
||||
alice ##> "/create user alisa2"
|
||||
showActiveUser alice "alisa2"
|
||||
alice ##> "/_hide user 3 \"password2\""
|
||||
alice <## "cannot hide the only not hidden user"
|
||||
-- change profile privacy for inactive user via API requires correct password
|
||||
alice ##> "/_unmute user 2"
|
||||
alice <## "hidden user always muted when inactive"
|
||||
@@ -2064,17 +2082,14 @@ testUserPrivacy =
|
||||
userVisible alice ""
|
||||
alice ##> "/_hide user 2 \"another_password\""
|
||||
userHidden alice ""
|
||||
alice ##> "/user alisa another_password"
|
||||
showActiveUser alice "alisa"
|
||||
alice ##> "/user alice"
|
||||
showActiveUser alice "alice (Alice)"
|
||||
alice ##> "/_delete user 2 del_smp=on"
|
||||
alice <## "user does not exist or incorrect password"
|
||||
alice ##> "/_delete user 2 del_smp=on \"wrong_password\""
|
||||
alice <## "user does not exist or incorrect password"
|
||||
alice ##> "/_delete user 2 del_smp=on \"another_password\""
|
||||
alice <## "ok"
|
||||
alice <## "completed deleting user"
|
||||
alice <### ["ok", "completed deleting user"]
|
||||
alice ##> "/_delete user 3 del_smp=on"
|
||||
alice <### ["ok", "completed deleting user"]
|
||||
where
|
||||
userHidden alice current = do
|
||||
alice <## (current <> "user alisa:")
|
||||
|
||||
Reference in new issue
Block a user