packages feed

clickhouse-haskell-0.1.1.0: test/Test/HTTPSpec.hs

{-# 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 "")