2022-02-16 23:24:48 +00:00
|
|
|
{-# LANGUAGE CPP #-}
|
2022-02-06 16:18:01 +00:00
|
|
|
|
|
|
|
module MobileTests where
|
|
|
|
|
|
|
|
import ChatClient
|
|
|
|
import ChatTests
|
|
|
|
import Control.Monad.Except
|
|
|
|
import Simplex.Chat.Mobile
|
|
|
|
import Simplex.Chat.Store
|
|
|
|
import Test.Hspec
|
|
|
|
|
|
|
|
mobileTests :: Spec
|
|
|
|
mobileTests = do
|
|
|
|
describe "mobile API" $ do
|
|
|
|
it "start new chat without user" testChatApiNoUser
|
|
|
|
it "start new chat with existing user" testChatApi
|
|
|
|
|
|
|
|
noActiveUser :: String
|
2022-04-12 12:24:34 +01:00
|
|
|
#if defined(darwin_HOST_OS) && defined(swiftJSON)
|
2022-02-06 16:18:01 +00:00
|
|
|
noActiveUser = "{\"resp\":{\"chatCmdError\":{\"chatError\":{\"error\":{\"errorType\":{\"noActiveUser\":{}}}}}}}"
|
2022-02-16 23:24:48 +00:00
|
|
|
#else
|
|
|
|
noActiveUser = "{\"resp\":{\"type\":\"chatCmdError\",\"chatError\":{\"type\":\"error\",\"errorType\":{\"type\":\"noActiveUser\"}}}}"
|
|
|
|
#endif
|
2022-02-06 16:18:01 +00:00
|
|
|
|
|
|
|
activeUserExists :: String
|
2022-04-12 12:24:34 +01:00
|
|
|
#if defined(darwin_HOST_OS) && defined(swiftJSON)
|
2022-02-06 16:18:01 +00:00
|
|
|
activeUserExists = "{\"resp\":{\"chatCmdError\":{\"chatError\":{\"error\":{\"errorType\":{\"activeUserExists\":{}}}}}}}"
|
2022-02-16 23:24:48 +00:00
|
|
|
#else
|
|
|
|
activeUserExists = "{\"resp\":{\"type\":\"chatCmdError\",\"chatError\":{\"type\":\"error\",\"errorType\":{\"type\":\"activeUserExists\"}}}}"
|
|
|
|
#endif
|
2022-02-06 16:18:01 +00:00
|
|
|
|
|
|
|
activeUser :: String
|
2022-04-12 12:24:34 +01:00
|
|
|
#if defined(darwin_HOST_OS) && defined(swiftJSON)
|
2022-08-24 19:03:43 +04:00
|
|
|
activeUser = "{\"resp\":{\"activeUser\":{\"user\":{\"userId\":1,\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"activeUser\":true}}}}"
|
2022-02-16 23:24:48 +00:00
|
|
|
#else
|
2022-08-24 19:03:43 +04:00
|
|
|
activeUser = "{\"resp\":{\"type\":\"activeUser\",\"user\":{\"userId\":1,\"userContactId\":1,\"localDisplayName\":\"alice\",\"profile\":{\"profileId\":1,\"displayName\":\"alice\",\"fullName\":\"Alice\",\"localAlias\":\"\"},\"activeUser\":true}}}"
|
2022-02-16 23:24:48 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
chatStarted :: String
|
2022-04-12 12:24:34 +01:00
|
|
|
#if defined(darwin_HOST_OS) && defined(swiftJSON)
|
2022-02-16 23:24:48 +00:00
|
|
|
chatStarted = "{\"resp\":{\"chatStarted\":{}}}"
|
|
|
|
#else
|
|
|
|
chatStarted = "{\"resp\":{\"type\":\"chatStarted\"}}"
|
|
|
|
#endif
|
2022-02-06 16:18:01 +00:00
|
|
|
|
2022-06-11 11:52:55 +01:00
|
|
|
contactSubSummary :: String
|
|
|
|
#if defined(darwin_HOST_OS) && defined(swiftJSON)
|
|
|
|
contactSubSummary = "{\"resp\":{\"contactSubSummary\":{\"contactSubscriptions\":[]}}}"
|
|
|
|
#else
|
|
|
|
contactSubSummary = "{\"resp\":{\"type\":\"contactSubSummary\",\"contactSubscriptions\":[]}}"
|
|
|
|
#endif
|
|
|
|
|
2022-07-17 15:51:17 +01:00
|
|
|
memberSubSummary :: String
|
2022-06-11 11:52:55 +01:00
|
|
|
#if defined(darwin_HOST_OS) && defined(swiftJSON)
|
2022-07-17 15:51:17 +01:00
|
|
|
memberSubSummary = "{\"resp\":{\"memberSubSummary\":{\"memberSubscriptions\":[]}}}"
|
2022-06-11 11:52:55 +01:00
|
|
|
#else
|
2022-07-17 15:51:17 +01:00
|
|
|
memberSubSummary = "{\"resp\":{\"type\":\"memberSubSummary\",\"memberSubscriptions\":[]}}"
|
2022-06-11 11:52:55 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
pendingSubSummary :: String
|
|
|
|
#if defined(darwin_HOST_OS) && defined(swiftJSON)
|
2022-07-17 15:51:17 +01:00
|
|
|
pendingSubSummary = "{\"resp\":{\"pendingSubSummary\":{\"pendingSubscriptions\":[]}}}"
|
2022-06-11 11:52:55 +01:00
|
|
|
#else
|
2022-07-17 15:51:17 +01:00
|
|
|
pendingSubSummary = "{\"resp\":{\"type\":\"pendingSubSummary\",\"pendingSubscriptions\":[]}}"
|
2022-06-11 11:52:55 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
parsedMarkdown :: String
|
|
|
|
#if defined(darwin_HOST_OS) && defined(swiftJSON)
|
|
|
|
parsedMarkdown = "{\"formattedText\":[{\"format\":{\"bold\":{}},\"text\":\"hello\"}]}"
|
|
|
|
#else
|
|
|
|
parsedMarkdown = "{\"formattedText\":[{\"format\":{\"type\":\"bold\"},\"text\":\"hello\"}]}"
|
|
|
|
#endif
|
|
|
|
|
2022-02-06 16:18:01 +00:00
|
|
|
testChatApiNoUser :: IO ()
|
|
|
|
testChatApiNoUser = withTmpFiles $ do
|
2022-09-23 19:22:56 +01:00
|
|
|
Right cc <- chatMigrateInit testDBPrefix ""
|
|
|
|
Left (DBMErrorNotADatabase _) <- chatMigrateInit testDBPrefix "myKey"
|
2022-02-06 16:18:01 +00:00
|
|
|
chatSendCmd cc "/u" `shouldReturn` noActiveUser
|
|
|
|
chatSendCmd cc "/_start" `shouldReturn` noActiveUser
|
|
|
|
chatSendCmd cc "/u alice Alice" `shouldReturn` activeUser
|
2022-02-16 23:24:48 +00:00
|
|
|
chatSendCmd cc "/_start" `shouldReturn` chatStarted
|
2022-02-06 16:18:01 +00:00
|
|
|
|
|
|
|
testChatApi :: IO ()
|
|
|
|
testChatApi = withTmpFiles $ do
|
2022-09-02 16:38:41 +01:00
|
|
|
let dbPrefix = testDBPrefix <> "1"
|
|
|
|
f = chatStoreFile dbPrefix
|
|
|
|
st <- createChatStore f "myKey" True
|
2022-06-18 20:06:13 +01:00
|
|
|
Right _ <- withTransaction st $ \db -> runExceptT $ createUser db aliceProfile True
|
2022-09-23 19:22:56 +01:00
|
|
|
Right cc <- chatMigrateInit dbPrefix "myKey"
|
|
|
|
Left (DBMErrorNotADatabase _) <- chatMigrateInit dbPrefix ""
|
|
|
|
Left (DBMErrorNotADatabase _) <- chatMigrateInit dbPrefix "anotherKey"
|
2022-02-06 16:18:01 +00:00
|
|
|
chatSendCmd cc "/u" `shouldReturn` activeUser
|
|
|
|
chatSendCmd cc "/u alice Alice" `shouldReturn` activeUserExists
|
2022-02-16 23:24:48 +00:00
|
|
|
chatSendCmd cc "/_start" `shouldReturn` chatStarted
|
2022-06-11 11:52:55 +01:00
|
|
|
chatRecvMsg cc `shouldReturn` contactSubSummary
|
2022-07-17 15:51:17 +01:00
|
|
|
chatRecvMsg cc `shouldReturn` memberSubSummary
|
2022-06-11 11:52:55 +01:00
|
|
|
chatRecvMsgWait cc 10000 `shouldReturn` pendingSubSummary
|
|
|
|
chatRecvMsgWait cc 10000 `shouldReturn` ""
|
|
|
|
chatParseMarkdown "hello" `shouldBe` "{}"
|
|
|
|
chatParseMarkdown "*hello*" `shouldBe` parsedMarkdown
|