bloodhound-0.23.0.0: tests/Test/TypesSpec.hs
{-# LANGUAGE QuasiQuotes #-}
module Test.TypesSpec (spec) where
import qualified Data.Text as T
import TestsUtils.Common
import TestsUtils.Generators ()
import TestsUtils.Import
import Prelude
spec :: Spec
spec = do
describe "error parsing" $
it "can parse EsErrors for >= 2.0" $
withTestEnv $ do
errorResp <- tryPerformBHRequest $ verifySnapshotRepo (SnapshotRepoName "bogus")
liftIO (errorResp `shouldBe` Left (EsError (Just 404) "[bogus] missing"))
describe "Monoid (SearchHits a)" $
prop "abides the monoid laws" $
eq $
prop_Monoid (T :: T (SearchHits ()))
describe "mkDocVersion" $
prop "can never construct an out of range docVersion" $ \i ->
let res = mkDocVersion i
in case res of
Nothing -> property True
Just dv ->
(dv >= minBound)
.&&. (dv <= maxBound)
.&&. docVersionNumber dv
=== i
describe "Enum DocVersion" $
it "follows the laws of Enum, Bounded" $ do
evaluate (succ maxBound :: DocVersion) `shouldThrow` anyErrorCall
evaluate (pred minBound :: DocVersion) `shouldThrow` anyErrorCall
evaluate (toEnum 0 :: DocVersion) `shouldThrow` anyErrorCall
evaluate (toEnum 9200000000000000001 :: DocVersion) `shouldThrow` anyErrorCall
enumFrom (pred maxBound :: DocVersion) `shouldBe` [pred maxBound, maxBound]
enumFrom (pred maxBound :: DocVersion) `shouldBe` [pred maxBound, maxBound]
enumFromThen minBound (pred maxBound :: DocVersion) `shouldBe` [minBound, pred maxBound]
describe "IndexName" $ do
it "Empty should fail" $
mkIndexName "" `shouldBe` Left "Is empty"
it "Long should fail" $
mkIndexName (T.replicate 256 "x") `shouldBe` Left "Is longer than 255 bytes"
it "Upper case should fail" $
mkIndexName "azerTY" `shouldBe` Left "Contains uppercase letter(s)"
it "Special symbols should fail" $
mkIndexName "hello#world" `shouldBe` Left "Includes [\\/*?\"<>| ,#:]"
it "Not starting with a letter should fail" $
mkIndexName "-test" `shouldBe` Left "Starts with [-_+.]"
it "'.' should fail" $
mkIndexName "." `shouldBe` Left "Is (.|..)"
it "'..' should fail" $
mkIndexName ".." `shouldBe` Left "Is (.|..)"
it "Regular should work" $
mkIndexName "hello-world_42" `shouldBe` Right [qqIndexName|hello-world_42|]