fix tests

This commit is contained in:
spaced4ndy
2025-07-18 14:56:07 +04:00
parent 2a37b5491c
commit 0c2b1e5b06
5 changed files with 55 additions and 92 deletions
+2 -1
View File
@@ -835,7 +835,7 @@ struct ChatView: View {
.fontWeight(.regular)
.multilineTextAlignment(.center)
.fixedSize(horizontal: false, vertical: true)
.lineLimit(2)
.lineLimit(3)
.frame(maxWidth: 260)
}
if let shortDescr = chat.chatInfo.shortDescr {
@@ -843,6 +843,7 @@ struct ChatView: View {
.font(.subheadline)
.multilineTextAlignment(.center)
.fixedSize(horizontal: false, vertical: true)
.lineLimit(4)
.padding(.horizontal)
}
@@ -559,18 +559,6 @@ Query:
Plan:
SEARCH messages USING INDEX idx_messages_group_id_shared_msg_id (group_id=? AND shared_msg_id=?)
Query:
SELECT chat_item_id, contact_id, group_id, group_scope_tag, group_scope_group_member_id, note_folder_id
FROM chat_items
WHERE user_id = ? AND LOWER(item_text) LIKE '%' || LOWER(?) || '%'
AND (item_ts < ? OR (item_ts = ? AND chat_item_id < ?))
ORDER BY item_ts DESC, chat_item_id DESC
LIMIT ?
Plan:
SEARCH chat_items USING INDEX idx_chat_items_group_scope_item_ts (user_id=?)
USE TEMP B-TREE FOR ORDER BY
Query:
SELECT chat_item_id, contact_id, group_id, group_scope_tag, group_scope_group_member_id, note_folder_id
FROM chat_items
@@ -1164,26 +1152,6 @@ Query:
Plan:
SEARCH chat_items USING INDEX idx_chat_items_group_id (group_id=?)
Query:
SELECT chat_item_id, contact_id, group_id, group_scope_tag, group_scope_group_member_id, note_folder_id
FROM chat_items
WHERE chat_item_id = ?
Plan:
SEARCH chat_items USING INTEGER PRIMARY KEY (rowid=?)
Query:
SELECT chat_item_id, contact_id, group_id, group_scope_tag, group_scope_group_member_id, note_folder_id
FROM chat_items
WHERE user_id = ? AND LOWER(item_text) LIKE '%' || LOWER(?) || '%'
AND (item_ts > ? OR (item_ts = ? AND chat_item_id > ?))
ORDER BY item_ts ASC, chat_item_id ASC
LIMIT ?
Plan:
SEARCH chat_items USING INDEX idx_chat_items_group_scope_item_ts (user_id=?)
USE TEMP B-TREE FOR ORDER BY
Query:
SELECT chat_item_moderation_id, moderator_member_id, created_by_msg_id, moderated_at
FROM chat_item_moderations
@@ -4687,14 +4655,6 @@ Query:
Plan:
SEARCH user_contact_links USING INTEGER PRIMARY KEY (rowid=?)
Query:
UPDATE users
SET view_pwd_hash = ?, view_pwd_salt = ?, show_ntfs = ?
WHERE user_id = ?
Plan:
SEARCH users USING INTEGER PRIMARY KEY (rowid=?)
Query:
UPDATE xftp_file_descriptions
SET file_descr_text = ?, file_descr_part_no = ?, file_descr_complete = ?, updated_at = ?
@@ -5926,10 +5886,6 @@ Query: SELECT contact_id, conn_full_link_to_connect FROM contacts WHERE user_id
Plan:
SEARCH contacts USING INDEX idx_contacts_chat_ts (user_id=?)
Query: SELECT contact_id, group_id FROM chat_items WHERE user_id = ? AND chat_item_id = ?
Plan:
SEARCH chat_items USING INTEGER PRIMARY KEY (rowid=?)
Query: SELECT contact_request_id FROM contact_requests WHERE user_id = ? AND local_display_name = ?
Plan:
SEARCH contact_requests USING COVERING INDEX sqlite_autoindex_contact_requests_1 (user_id=? AND local_display_name=?)
+42 -43
View File
@@ -233,10 +233,7 @@ testAddContact = versionTestMatrix2 runTestAddContact
bob #$> ("/_read chat @2", id, "ok")
alice #$> ("/read user", id, "ok")
alice #$> ("/_read user 1", id, "ok")
features =
if pqExpected
then chatFeatures
else (0, e2eeInfoNoPQStr) : tail chatFeatures
features = if pqExpected then chatFeatures else chatFeaturesNoPQ
testRetryConnecting :: HasCallStack => TestParams -> IO ()
testRetryConnecting ps = testChatCfgOpts2 cfg' opts' aliceProfile bobProfile test ps
@@ -557,9 +554,9 @@ testContactClear =
alice <##> bob
threadDelay 500000
alice #$> ("/clear bob", id, "bob: all messages are removed locally ONLY")
alice #$> ("/_get chat @2 count=100", chat, [])
alice #$> ("/_get chat @2 count=100", chat, [(1,"chat banner")])
bob #$> ("/clear alice", id, "alice: all messages are removed locally ONLY")
bob #$> ("/_get chat @2 count=100", chat, [])
bob #$> ("/_get chat @2 count=100", chat, [(1,"chat banner")])
testDeleteContactDeletesProfile :: HasCallStack => TestParams -> IO ()
testDeleteContactDeletesProfile =
@@ -611,7 +608,7 @@ testDeleteConversationKeepContact =
alice ##> "/_delete @2 messages"
alice <## "bob: contact is deleted"
alice @@@ [("@bob", "")] -- UI would filter
alice @@@ [("@bob", "chat banner")] -- UI would filter
bob @@@ [("@alice", "hey")]
bob #> "@alice hi"
alice <# "bob> hi"
@@ -916,13 +913,13 @@ testDirectLiveMessage =
connectUsers alice bob
-- non-empty live message is sent instantly
alice `send` "/live @bob hello"
bob <# "alice> [LIVE started] use /show [on/off/7] hello"
bob <# "alice> [LIVE started] use /show [on/off/8] hello"
alice ##> ("/_update item @2 " <> itemId 1 <> " text hello there")
alice <# "@bob [LIVE] hello there"
bob <# "alice> [LIVE ended] hello there"
-- empty live message is also sent instantly
alice `send` "/live @bob"
bob <# "alice> [LIVE started] use /show [on/off/8]"
bob <# "alice> [LIVE started] use /show [on/off/9]"
alice ##> ("/_update item @2 " <> itemId 2 <> " text hello 2")
alice <# "@bob [LIVE] hello 2"
bob <# "alice> [LIVE ended] hello 2"
@@ -2002,7 +1999,7 @@ testUsersDifferentCIExpirationTTL ps = do
-- first user messages
alice ##> "/user alice"
showActiveUser alice "alice (Alice)"
alice #$> ("/_get chat @2 count=100", chat, [])
alice #$> ("/_get chat @2 count=100", chat, [(1,"chat banner")])
-- second user messages
alice ##> "/user alisa"
@@ -2011,7 +2008,7 @@ testUsersDifferentCIExpirationTTL ps = do
threadDelay 2000000
alice #$> ("/_get chat @6 count=100", chat, [])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner")])
where
cfg = testCfg {initialCleanupManagerDelay = 0, cleanupManagerStepDelay = 0, ciExpirationInterval = 500000}
@@ -2085,7 +2082,7 @@ testUsersRestartCIExpiration ps = do
-- first user messages
alice ##> "/user alice"
showActiveUser alice "alice (Alice)"
alice #$> ("/_get chat @2 count=100", chat, [])
alice #$> ("/_get chat @2 count=100", chat, [(1,"chat banner")])
-- second user messages
alice ##> "/user alisa"
@@ -2094,7 +2091,7 @@ testUsersRestartCIExpiration ps = do
threadDelay 4000000
alice #$> ("/_get chat @6 count=100", chat, [])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner")])
where
cfg = testCfg {initialCleanupManagerDelay = 0, cleanupManagerStepDelay = 0, ciExpirationInterval = 500000}
@@ -2143,7 +2140,7 @@ testEnableCIExpirationOnlyForOneUser ps = do
-- messages are deleted for first user
alice ##> "/user alice"
showActiveUser alice "alice (Alice)"
alice #$> ("/_get chat @2 count=100", chat, [])
alice #$> ("/_get chat @2 count=100", chat, [(1,"chat banner")])
-- messages are not deleted for second user
alice ##> "/user alisa"
@@ -2204,7 +2201,7 @@ testDisableCIExpirationOnlyForOneUser ps = do
threadDelay 2000000
-- second user messages are deleted
alice #$> ("/_get chat @6 count=100", chat, [])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner")])
withTestChatCfg ps cfg "alice" $ \alice -> do
alice <## "1 contacts connected (use /cs for the list)"
@@ -2218,12 +2215,12 @@ testDisableCIExpirationOnlyForOneUser ps = do
bob #> "@alisa alisa 4"
alice <# "bob> alisa 4"
alice #$> ("/_get chat @6 count=100", chat, [(1, "alisa 3"), (0, "alisa 4")])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner"), (1, "alisa 3"), (0, "alisa 4")])
threadDelay 2000000
-- second user messages are deleted
alice #$> ("/_get chat @6 count=100", chat, [])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner")])
where
cfg = testCfg {initialCleanupManagerDelay = 0, cleanupManagerStepDelay = 0, ciExpirationInterval = 500000}
@@ -2263,11 +2260,11 @@ testUsersTimedMessages ps = do
alice ##> "/user alice"
showActiveUser alice "alice (Alice)"
alice #$> ("/_get chat @2 count=100", chat, [(1, "alice 1"), (0, "alice 2")])
alice #$> ("/_get chat @2 count=100", chat, [(1,"chat banner"), (1, "alice 1"), (0, "alice 2")])
alice ##> "/user alisa"
showActiveUser alice "alisa"
alice #$> ("/_get chat @6 count=100", chat, [(1, "alisa 1"), (0, "alisa 2")])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner"), (1, "alisa 1"), (0, "alisa 2")])
threadDelay 1000000
@@ -2278,11 +2275,11 @@ testUsersTimedMessages ps = do
alice ##> "/user alice"
showActiveUser alice "alice (Alice)"
alice #$> ("/_get chat @2 count=100", chat, [])
alice #$> ("/_get chat @2 count=100", chat, [(1,"chat banner")])
alice ##> "/user alisa"
showActiveUser alice "alisa"
alice #$> ("/_get chat @6 count=100", chat, [(1, "alisa 1"), (0, "alisa 2")])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner"), (1, "alisa 1"), (0, "alisa 2")])
threadDelay 1000000
@@ -2293,7 +2290,7 @@ testUsersTimedMessages ps = do
alice ##> "/user"
showActiveUser alice "alisa"
alice #$> ("/_get chat @6 count=100", chat, [])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner")])
-- first user messages
alice ##> "/user alice"
@@ -2319,11 +2316,11 @@ testUsersTimedMessages ps = do
alice ##> "/user alice"
showActiveUser alice "alice (Alice)"
alice #$> ("/_get chat @2 count=100", chat, [(1, "alice 3"), (0, "alice 4")])
alice #$> ("/_get chat @2 count=100", chat, [(1,"chat banner"), (1, "alice 3"), (0, "alice 4")])
alice ##> "/user alisa"
showActiveUser alice "alisa"
alice #$> ("/_get chat @6 count=100", chat, [(1, "alisa 3"), (0, "alisa 4")])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner"), (1, "alisa 3"), (0, "alisa 4")])
-- messages are deleted after restart
threadDelay 1000000
@@ -2335,11 +2332,11 @@ testUsersTimedMessages ps = do
alice ##> "/user alice"
showActiveUser alice "alice (Alice)"
alice #$> ("/_get chat @2 count=100", chat, [])
alice #$> ("/_get chat @2 count=100", chat, [(1,"chat banner")])
alice ##> "/user alisa"
showActiveUser alice "alisa"
alice #$> ("/_get chat @6 count=100", chat, [(1, "alisa 3"), (0, "alisa 4")])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner"), (1, "alisa 3"), (0, "alisa 4")])
threadDelay 1000000
@@ -2350,7 +2347,7 @@ testUsersTimedMessages ps = do
alice ##> "/user"
showActiveUser alice "alisa"
alice #$> ("/_get chat @6 count=100", chat, [])
alice #$> ("/_get chat @6 count=100", chat, [(1,"chat banner")])
where
configureTimedMessages :: HasCallStack => TestCC -> TestCC -> String -> String -> IO ()
configureTimedMessages alice bob bobId ttl = do
@@ -2406,20 +2403,21 @@ testUserPrivacy =
alice <## "alice (Alice)"
alice <## "alisa (active, hidden, muted, unread: 1)"
-- hidden message is saved
alice ##> "/tail"
alice ##> "/tail 11"
alice <##? chatHistory
alice ##> "/_get items count=10"
alice ##> "/_get items count=11"
alice <##? chatHistory
alice ##> "/_get items before=13 count=10"
alice ##> "/_get items before=15 count=10"
alice
<##? [ ConsoleString ("bob> " <> e2eeInfoPQStr),
<##? [ "@bob chat banner",
ConsoleString ("bob> " <> e2eeInfoPQStr),
"bob> Disappearing messages: allowed",
"bob> Full deletion: off",
"bob> Message reactions: enabled",
"bob> Voice messages: enabled",
"bob> Audio/video calls: enabled"
]
alice ##> "/_get items around=11 count=2"
alice ##> "/_get items around=13 count=2"
alice
<##? [ "bob> Full deletion: off",
"bob> Message reactions: enabled",
@@ -2427,7 +2425,7 @@ testUserPrivacy =
"bob> Audio/video calls: enabled",
"@bob hello"
]
alice ##> "/_get items after=12 count=10"
alice ##> "/_get items after=14 count=10"
alice
<##? [ "@bob hello",
"bob> hey",
@@ -2491,7 +2489,8 @@ testUserPrivacy =
alice <## "messages are shown"
alice <## "profile is visible"
chatHistory =
[ ConsoleString ("bob> " <> e2eeInfoPQStr),
[ "@bob chat banner",
ConsoleString ("bob> " <> e2eeInfoPQStr),
"bob> Disappearing messages: allowed",
"bob> Full deletion: off",
"bob> Message reactions: enabled",
@@ -2529,7 +2528,7 @@ testSetChatItemTTL =
alice #$> ("/_get chat @2 count=100", chatF, chatFeaturesF <> [((1, "1"), Nothing), ((0, "2"), Nothing), ((1, ""), Just "test.jpg"), ((1, "3"), Nothing), ((0, "4"), Nothing)])
checkActionDeletesFile "./tests/tmp/app_files/test.jpg" $
alice #$> ("/_ttl 1 2", id, "ok")
alice #$> ("/_get chat @2 count=100", chat, [(1, "3"), (0, "4")]) -- when expiration is turned on, first cycle is synchronous
alice #$> ("/_get chat @2 count=100", chat, [(1, "chat banner"), (1, "3"), (0, "4")]) -- when expiration is turned on, first cycle is synchronous
bob #$> ("/_get chat @2 count=100", chat, chatFeatures <> [(0, "1"), (1, "2"), (0, ""), (0, "3"), (1, "4")])
alice #$> ("/_ttl 1", id, "old messages are set to be deleted after: 2 second(s)")
alice #$> ("/ttl week", id, "ok")
@@ -2563,7 +2562,7 @@ testSetDirectChatTTL =
alice #$> ("/_get chat @2 count=100", chatF, chatFeaturesF <> [((1, "1"), Nothing), ((0, "2"), Nothing), ((1, "3"), Nothing), ((0, "4"), Nothing)])
alice #$> ("/_ttl 1 2", id, "ok")
-- when expiration is turned on, first cycle is synchronous
alice #$> ("/_get chat @2 count=100", chat, [(1, "3"), (0, "4")])
alice #$> ("/_get chat @2 count=100", chat, [(1, "chat banner"), (1, "3"), (0, "4")])
-- chat @3 doesn't expire since it was set to not expire
alice #$> ("/_get chat @3 count=100", chat, chatFeatures <> [(1, "10"), (0, "11")])
@@ -2576,14 +2575,14 @@ testSetDirectChatTTL =
bob #> "@alice 6"
alice <# "bob> 6"
alice #$> ("/_get chat @3 count=100", chat, chatFeatures <> [(1, "10"), (0, "11")])
alice #$> ("/_get chat @2 count=100", chat, [(1, "3"), (0, "4"), (1, "5"), (0, "6")])
alice #$> ("/_get chat @2 count=100", chat, [(1, "chat banner"), (1, "3"), (0, "4"), (1, "5"), (0, "6")])
-- set ttl for chat @3, only chat @3 is affected since global ttl is disabled
alice #$> ("/_ttl 1 @3 1", id, "ok")
alice #$> ("/ttl @cath", id, "old messages are set to be deleted after: 1 second(s)")
threadDelay 3000000
alice #$> ("/_get chat @3 count=100", chat, [])
alice #$> ("/_get chat @2 count=100", chat, [(1, "3"), (0, "4"), (1, "5"), (0, "6")])
alice #$> ("/_get chat @3 count=100", chat, [(1, "chat banner")])
alice #$> ("/_get chat @2 count=100", chat, [(1, "chat banner"), (1, "3"), (0, "4"), (1, "5"), (0, "6")])
bob #$> ("/_get chat @2 count=100", chat, chatFeatures <> [(0, "1"), (1, "2"), (0, "3"), (1, "4"), (0, "5"), (1, "6")])
-- set ttl to never expire again
@@ -2593,16 +2592,16 @@ testSetDirectChatTTL =
cath #> "@alice 13"
alice <# "cath> 13"
threadDelay 3000000
alice #$> ("/_get chat @3 count=100", chat, [(1, "12"), (0, "13")])
alice #$> ("/_get chat @2 count=100", chat, [(1, "3"), (0, "4"), (1, "5"), (0, "6")])
alice #$> ("/_get chat @3 count=100", chat, [(1, "chat banner"), (1, "12"), (0, "13")])
alice #$> ("/_get chat @2 count=100", chat, [(1, "chat banner"), (1, "3"), (0, "4"), (1, "5"), (0, "6")])
bob #$> ("/_get chat @2 count=100", chat, chatFeatures <> [(0, "1"), (1, "2"), (0, "3"), (1, "4"), (0, "5"), (1, "6")])
-- set ttl back to default
alice #$> ("/ttl @cath default", id, "ok")
alice #$> ("/ttl @cath", id, "old messages are set to delete according to default user config")
alice #$> ("/_ttl 1 2", id, "ok")
alice #$> ("/_get chat @3 count=100", chat, [])
alice #$> ("/_get chat @2 count=100", chat, [])
alice #$> ("/_get chat @3 count=100", chat, [(1, "chat banner")])
alice #$> ("/_get chat @2 count=100", chat, [(1, "chat banner")])
alice #$> ("/ttl @cath day", id, "ok")
alice #$> ("/ttl @cath", id, "old messages are set to be deleted after: one day")
+1 -1
View File
@@ -2220,7 +2220,7 @@ testSetContactPrefs = testChat2 aliceProfile bobProfile $
alice ##> "/_set prefs @2 {}"
alice <## "your preferences for bob did not change"
(bob </)
let startFeatures = [(0, e2eeInfoPQStr), (0, "Disappearing messages: allowed"), (0, "Full deletion: off"), (0, "Message reactions: enabled"), (0, "Voice messages: off"), (0, "Audio/video calls: enabled")]
let startFeatures = [(1, "chat banner"), (0, e2eeInfoPQStr), (0, "Disappearing messages: allowed"), (0, "Full deletion: off"), (0, "Message reactions: enabled"), (0, "Voice messages: off"), (0, "Audio/video calls: enabled")]
alice #$> ("/_get chat @2 count=100", chat, startFeatures)
bob #$> ("/_get chat @2 count=100", chat, startFeatures)
let sendVoice = "/_send @2 json [{\"filePath\": \"test.txt\", \"msgContent\": {\"type\": \"voice\", \"text\": \"\", \"duration\": 10}}]"
+10 -3
View File
@@ -271,6 +271,11 @@ chat'' = read
chatFeatures :: [(Int, String)]
chatFeatures = map (\(a, _, _) -> a) chatFeatures''
chatFeaturesNoPQ :: [(Int, String)]
chatFeaturesNoPQ =
map (\(a, _, _) -> a) $
((1, "chat banner"), Nothing, Nothing) : ((0, e2eeInfoNoPQStr), Nothing, Nothing) : chatFeatures_
chatFeatures' :: [((Int, String), Maybe (Int, String))]
chatFeatures' = map (\(a, b, _) -> (a, b)) chatFeatures''
@@ -278,9 +283,11 @@ chatFeaturesF :: [((Int, String), Maybe String)]
chatFeaturesF = map (\(a, _, c) -> (a, c)) chatFeatures''
chatFeatures'' :: [((Int, String), Maybe (Int, String), Maybe String)]
chatFeatures'' =
[ ((0, e2eeInfoPQStr), Nothing, Nothing),
((0, "Disappearing messages: allowed"), Nothing, Nothing),
chatFeatures'' = ((1, "chat banner"), Nothing, Nothing) : ((0, e2eeInfoPQStr), Nothing, Nothing) : chatFeatures_
chatFeatures_ :: [((Int, String), Maybe (Int, String), Maybe String)]
chatFeatures_ =
[ ((0, "Disappearing messages: allowed"), Nothing, Nothing),
((0, "Full deletion: off"), Nothing, Nothing),
((0, "Message reactions: enabled"), Nothing, Nothing),
((0, "Voice messages: enabled"), Nothing, Nothing),