From edfece3206f674235ae104eaa15628e0512e00f4 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Thu, 5 Jan 2023 09:08:31 +0000 Subject: [PATCH] core: test for live messages (#1694) --- tests/ChatTests.hs | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/ChatTests.hs b/tests/ChatTests.hs index f4dbb9633c..3a6cedbc7d 100644 --- a/tests/ChatTests.hs +++ b/tests/ChatTests.hs @@ -57,6 +57,7 @@ chatTests = do it "direct message quoted replies" testDirectMessageQuotedReply it "direct message update" testDirectMessageUpdate it "direct message delete" testDirectMessageDelete + it "direct live message" testDirectLiveMessage describe "chat groups" $ do describe "add contacts, create group and send/receive messages" testGroup it "add contacts, create group and send/receive messages, check messages" testGroupCheckMessages @@ -73,6 +74,7 @@ chatTests = do it "group message quoted replies" testGroupMessageQuotedReply it "group message update" testGroupMessageUpdate it "group message delete" testGroupMessageDelete + it "group live message" testGroupLiveMessage it "update group profile" testUpdateGroupProfile it "update member role" testUpdateMemberRole it "unused contacts are deleted after all their groups are deleted" testGroupDeleteUnusedContacts @@ -495,6 +497,23 @@ testDirectMessageDelete = bob #$> ("/_delete item @2 " <> itemId 4 <> " internal", id, "message deleted") bob #$> ("/_get chat @2 count=100", chat', chatFeatures' <> [((0, "hello 🙂"), Nothing), ((1, "do you receive my messages?"), Just (0, "hello 🙂"))]) +testDirectLiveMessage :: IO () +testDirectLiveMessage = + testChat2 aliceProfile bobProfile $ \alice bob -> do + connectUsers alice bob + -- non-empty live message is sent instantly + alice `send` "/live @bob hello" + bob <# "alice> [LIVE started] use /show [on/off/4] 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/5]" + alice ##> ("/_update item @2 " <> itemId 2 <> " text hello 2") + alice <# "@bob [LIVE] hello 2" + bob <# "alice> [LIVE ended] hello 2" + testGroup :: Spec testGroup = versionTestMatrix3 runTestGroup where @@ -1371,6 +1390,30 @@ testGroupMessageDelete = bob #$> ("/_get chat #1 count=3", chat', [((0, "hello!"), Nothing), ((1, "hi alice"), Just (0, "hello!")), ((0, "how are you? [marked deleted]"), Nothing)]) cath #$> ("/_get chat #1 count=3", chat', [((0, "hello!"), Nothing), ((0, "hi alice"), Just (0, "hello!")), ((1, "how are you? [marked deleted]"), Nothing)]) +testGroupLiveMessage :: IO () +testGroupLiveMessage = + testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do + createGroup3 "team" alice bob cath + threadDelay 500000 + -- non-empty live message is sent instantly + alice `send` "/live #team hello" + msgItemId1 <- lastItemId alice + bob <#. "#team alice> [LIVE started]" + cath <#. "#team alice> [LIVE started]" + alice ##> ("/_update item #1 " <> msgItemId1 <> " text hello there") + alice <# "#team [LIVE] hello there" + bob <# "#team alice> [LIVE ended] hello there" + cath <# "#team alice> [LIVE ended] hello there" + -- empty live message is also sent instantly + alice `send` "/live #team" + msgItemId2 <- lastItemId alice + bob <#. "#team alice> [LIVE started]" + cath <#. "#team alice> [LIVE started]" + alice ##> ("/_update item #1 " <> msgItemId2 <> " text hello 2") + alice <# "#team [LIVE] hello 2" + bob <# "#team alice> [LIVE ended] hello 2" + cath <# "#team alice> [LIVE ended] hello 2" + testUpdateGroupProfile :: IO () testUpdateGroupProfile = testChat3 aliceProfile bobProfile cathProfile $ @@ -5062,6 +5105,13 @@ cc <##. line = do unless prefix $ print ("expected to start from: " <> line, ", got: " <> l) prefix `shouldBe` True +(<#.) :: TestCC -> String -> Expectation +cc <#. line = do + l <- dropTime <$> getTermLine cc + let prefix = line `isPrefixOf` l + unless prefix $ print ("expected to start from: " <> line, ", got: " <> l) + prefix `shouldBe` True + (<##..) :: TestCC -> [String] -> Expectation cc <##.. ls = do l <- getTermLine cc