{-# LANGUAGE OverloadedStrings #-} module Test.Indices where import Test.Common import Test.Import import qualified Data.List as L import qualified Data.List.NonEmpty as NE spec :: Spec spec = do describe "Index create/delete API" $ do it "creates and then deletes the requested index" $ withTestEnv $ do -- priming state. _ <- deleteExampleIndex resp <- createExampleIndex deleteResp <- deleteExampleIndex liftIO $ do validateStatus resp 200 validateStatus deleteResp 200 describe "Index aliases" $ do let aname = IndexAliasName (IndexName "bloodhound-tests-twitter-1-alias") let alias = IndexAlias (testIndex) aname let create = IndexAliasCreate Nothing Nothing let action = AddAlias alias create it "handles the simple case of aliasing an existing index" $ do withTestEnv $ do resetIndex resp <- updateIndexAliases (action :| []) liftIO $ validateStatus resp 200 let cleanup = withTestEnv (updateIndexAliases (RemoveAlias alias :| [])) (do aliases <- withTestEnv getIndexAliases let expected = IndexAliasSummary alias create case aliases of Right (IndexAliasesSummary summs) -> L.find ((== alias) . indexAliasSummaryAlias) summs `shouldBe` Just expected Left e -> expectationFailure ("Expected an IndexAliasesSummary but got " <> show e)) `finally` cleanup describe "Index Listing" $ do it "returns a list of index names" $ withTestEnv $ do _ <- createExampleIndex ixns <- listIndices liftIO (ixns `shouldContain` [testIndex]) describe "Index Settings" $ do it "persists settings" $ withTestEnv $ do _ <- deleteExampleIndex _ <- createExampleIndex let updates = BlocksWrite False :| [] updateResp <- updateIndexSettings updates testIndex liftIO $ validateStatus updateResp 200 getResp <- getIndexSettings testIndex liftIO $ getResp `shouldBe` Right (IndexSettingsSummary testIndex (IndexSettings (ShardCount 1) (ReplicaCount 0)) (NE.toList updates)) it "allows total fields to be set" $ when' (atleast es50) $ withTestEnv $ do _ <- deleteExampleIndex _ <- createExampleIndex let updates = FailOnMergeFailure True :| [] updateResp <- updateIndexSettings updates testIndex liftIO $ validateStatus updateResp 200 getResp <- getIndexSettings testIndex liftIO $ getResp `shouldBe` Right (IndexSettingsSummary testIndex (IndexSettings (ShardCount 1) (ReplicaCount 0)) (NE.toList updates)) describe "Index Optimization" $ do it "returns a successful response upon completion" $ withTestEnv $ do _ <- createExampleIndex resp <- optimizeIndex (IndexList (testIndex :| [])) defaultIndexOptimizationSettings liftIO $ validateStatus resp 200