telegram-api-0.7.2.0: test/UpdatesSpec.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}
module UpdatesSpec (spec) where
import Control.Concurrent
import Control.Monad.IO.Class
import Data.Text (Text)
import qualified Data.Text as T
import Network.HTTP.Client (newManager)
import Network.HTTP.Client.TLS (tlsManagerSettings)
import Test.Hspec
import Web.Telegram.API.Bot
spec :: Token -> Text -> Spec
spec token botName = do
manager <- runIO $ newManager tlsManagerSettings
describe "/getMe and /getWebhookInfo work together" $
it "responds with correct bot's name and empty webhook" $ do
res <- runTelegramClient token manager $ do
b <- getMeM
info <- getWebhookInfoM
return (b, info)
let Right (Response {result = me}, Response {result = whi}) = res
user_first_name me `shouldBe` botName
whi_url whi `shouldBe` ""
describe "webhook operations" $ do
let url = "https://example.com/bot"
it "able to get and set webhook" $ do
res <- runTelegramClient token manager $ do
info <- getWebhookInfoM
liftIO $ (whi_url . result) info `shouldBe` ""
liftIO $ threadDelay $ 2 * 1000 * 1000 -- to avoid Too many request error
set <- setWebhookM $ setWebhookRequest' url
liftIO $ result set `shouldBe` True
info <- getWebhookInfoM
liftIO $ (whi_url . result) info `shouldBe` url
liftIO $ threadDelay $ 2 * 1000 * 1000 -- to avoid Too many request error
del <- deleteWebhookM
liftIO $ result del `shouldBe` True
getWebhookInfoM
let Right Response { result = whi } = res
whi_url whi `shouldBe` ""
it "should set allowed updates" $ do
let allowedUpdates = map T.pack ["message", "callback_query"]
res <- runTelegramClient token manager $ do
let request = (setWebhookRequest' url) {
webhook_allowed_updates = Just allowedUpdates
}
set <- setWebhookM request
liftIO $ result set `shouldBe` True
getWebhookInfoM
let Right Response { result = whi } = res
whi_allowed_updates whi `shouldBe` Just allowedUpdates
it "should set max connections" $ do
res <- runTelegramClient token manager $ do
let request = (setWebhookRequest' url) {
webhook_max_connections = Just 5
}
liftIO $ threadDelay $ 2 * 1000 * 1000 -- to avoid Too many request error
set <- setWebhookM request
liftIO $ result set `shouldBe` True
getWebhookInfoM
let Right Response { result = whi } = res
whi_max_connections whi `shouldBe` Just 5