{-# LANGUAGE OverloadedStrings #-}
module Test.HTTPSpec (httpSpec) where
import Database.ClickHouseDriver
import Database.ClickHouseDriver.HTTP
import Data.ByteString as B
import Data.ByteString.Char8 as C8
import qualified Data.HashMap.Strict as HM
import Haxl.Core
import Test.HUnit
import Test.Hspec
import Data.Either
httpSpec :: IO()
httpSpec = hspec $ parallel $ do
query1
query2
query3
queryTCP
lowCardinalityTest
query1 :: Spec
query1 = describe "show databases" $ do
deSetting <- runIO $ defaultHttpConnection
env <- runIO $ setupEnv deSetting
res <- runIO $ runQuery env (getByteString "SHOW DATABASES")
it "returns query result in text format" $ do
res `shouldBe` C8.pack "_temporary_and_external_tables\ndefault\nsystem\n"
query2 :: Spec
query2 = describe "select 1" $ do
deSetting <- runIO $ defaultHttpConnection
env <- runIO $ setupEnv deSetting
res <- runIO $ runQuery env (getByteString "SELECT 1")
it "returns query result in text format" $ do
res `shouldBe` C8.pack "1\n"
query3 :: Spec
query3 = describe "format in JSON" $ do
deSetting <- runIO $ defaultHttpConnection
env <- runIO $ setupEnv deSetting
res <- runIO $ runQuery env (getJSON "SELECT * FROM default.test_table")
let check = case res of
Right (x : xs) -> C8.pack $ show (HM.lookup "id" x)
_ -> C8.pack "error"
it "returns query result in JSON" $ do
check `shouldBe` C8.pack "Just (String \"0000000011\")"
queryTCP :: Spec
queryTCP = describe "select 1" $ do
conn <- runIO $ defaultClient
res <- runIO $ query conn "SELECT 1"
it "returns result in ClickhouseType" $ do
(show res) `shouldBe` ("Right [[CKUInt8 1]]")
lowCardinalityTest :: Spec
lowCardinalityTest = describe "lowCardinality" $ do
conn <- runIO $ defaultClient
res <- runIO $ query conn "SELECT * FROM crd3"
it "returns result in ClickhouseType" $ do
(show res) `shouldBe` ("Right " ++ show [[CKString "abc",CKString "myString",CKNull],[CKString"xyz",CKString "Noctis",CKString "Ross"],[CKString "123",CKString "Alice",CKNull],[CKString "456",CKString "Bob",CKString "Walter"]])
comprehensiveTest :: Spec
comprehensiveTest = describe "array string number etc." $ do
conn <- runIO $ defaultClient
res <- runIO $ query conn "SELECT * FROM big"
it "returns result in ClickhouseType" $ do
(show res) `shouldBe` (show "")