bloodhound-0.23.0.0: tests/Test/PointInTimeSpec.hs
module Test.PointInTimeSpec (spec) where
import qualified Data.Text as Text
import qualified Database.Bloodhound.OpenSearch2.Client as ClientOS2
import TestsUtils.Common
import TestsUtils.Import
import Prelude
spec :: Spec
spec = do
describe "Point in time (PIT) API (ElasticSearch 7)" $ do
it' <- runIO esOnlyIT
it' "returns a single document using the point in time (PIT) API" $
withTestEnv $ do
_ <- insertData
_ <- insertOther
let search =
( mkSearch
(Just $ MatchAllQuery Nothing)
Nothing
)
{ size = Size 1
}
regular_search <- searchTweet search
pit_search' <- pitSearch testIndex search :: BH IO [Hit Tweet]
let pit_search = map hitSource pit_search'
liftIO $
regular_search `shouldBe` Right exampleTweet -- Check that the size restriction is being honored
liftIO $
pit_search `shouldMatchList` [Just exampleTweet]
it' "returns many documents using the point in time (PIT) API" $
withTestEnv $ do
resetIndex
let ids = [1 .. 1000]
let docs = map exampleTweetWithAge ids
let docIds = map (Text.pack . show) ids
mapM_ (uncurry insertTweetWithDocId) (docs `zip` docIds)
let sort = mkSort (FieldName "postDate") Ascending
let search =
( mkSearch
(Just $ MatchAllQuery Nothing)
Nothing
)
{ sortBody = Just [DefaultSortSpec sort]
}
scan_search' <- scanSearch testIndex search :: BH IO [Hit Tweet]
let scan_search = map hitSource scan_search'
pit_search' <- pitSearch testIndex search :: BH IO [Hit Tweet]
let pit_search = map hitSource pit_search'
let expectedHits = map Just docs
liftIO $
scan_search `shouldMatchList` expectedHits
liftIO $
pit_search `shouldMatchList` expectedHits
xdescribe "Point in time (PIT) API (OpenSearch 2)" $ do
it' <- runIO os2OnlyIT
it' "returns a single document using the point in time (PIT) API" $
withTestEnv $ do
_ <- insertData
_ <- insertOther
let search =
( mkSearch
(Just $ MatchAllQuery Nothing)
Nothing
)
{ size = Size 1
}
regular_search <- searchTweet search
pit_search' <- ClientOS2.pitSearch testIndex search :: BH IO [Hit Tweet]
let pit_search = map hitSource pit_search'
liftIO $
regular_search `shouldBe` Right exampleTweet -- Check that the size restriction is being honored
liftIO $
pit_search `shouldMatchList` [Just exampleTweet]
it' "returns many documents using the point in time (PIT) API" $
withTestEnv $ do
resetIndex
let ids = [1 .. 1000]
let docs = map exampleTweetWithAge ids
let docIds = map (Text.pack . show) ids
mapM_ (uncurry insertTweetWithDocId) (docs `zip` docIds)
let sort = mkSort (FieldName "postDate") Ascending
let search =
( mkSearch
(Just $ MatchAllQuery Nothing)
Nothing
)
{ sortBody = Just [DefaultSortSpec sort]
}
scan_search' <- scanSearch testIndex search :: BH IO [Hit Tweet]
let scan_search = map hitSource scan_search'
pit_search' <- ClientOS2.pitSearch testIndex search :: BH IO [Hit Tweet]
let pit_search = map hitSource pit_search'
let expectedHits = map Just docs
liftIO $
scan_search `shouldMatchList` expectedHits
liftIO $
pit_search `shouldMatchList` expectedHits