@@ -8,7 +8,7 @@ import Control.Applicative
88import Control.Monad
99import Control.Monad.Reader
1010import Data.Aeson
11−import qualified Data.HashMap.Strict as HM
11+import qualified Data.HashMap.Strict as HM
1212import Data.List (nub)
1313import Data.List.NonEmpty (NonEmpty (..))
1414import qualified Data.List.NonEmpty as NE
@@ -35,7 +35,7 @@ testIndex = IndexName "bloodhound-tests-twitter-1"
3535testMapping :: MappingName
3636testMapping = MappingName "tweet"
3737
38−withTestEnv :: BH a -> IO a
38+withTestEnv :: BH IO a -> IO a
3939withTestEnv = withBH defaultManagerSettings testServer
4040
4141validateStatus :: Response body -> Int -> Expectation
@@ -43,9 +43,9 @@ validateStatus resp expected =
4343 (NHTS.statusCode $ responseStatus resp)
4444 `shouldBe` (expected :: Int)
4545
46−createExampleIndex :: BH Reply
46+createExampleIndex :: BH IO Reply
4747createExampleIndex = createIndex defaultIndexSettings testIndex
48−deleteExampleIndex :: BH Reply
48+deleteExampleIndex :: BH IO Reply
4949deleteExampleIndex = deleteIndex testIndex
5050
5151data ServerVersion = ServerVersion Int Int Int deriving (Show, Eq, Ord)
@@ -138,7 +138,7 @@ otherTweet = Tweet { user = "notmyapp"
138138 , age = 1000
139139 , location = Location 40.12 (-71.34) }
140140
141−insertData :: ReaderT BHEnv IO ()
141+insertData :: BH IO ()
142142insertData = do
143143 _ <- deleteExampleIndex
144144 _ <- createExampleIndex
@@ -147,20 +147,20 @@ insertData = do
147147 _ <- refreshIndex testIndex
148148 return ()
149149
150−insertOther :: BH ()
150+insertOther :: BH IO ()
151151insertOther = do
152152 _ <- indexDocument testIndex testMapping otherTweet (DocId "2")
153153 _ <- refreshIndex testIndex
154154 return ()
155155
156−searchTweet :: Search -> BH (Either String Tweet)
156+searchTweet :: Search -> BH IO (Either String Tweet)
157157searchTweet search = do
158158 reply <- searchByIndex testIndex search
159159 let result = eitherDecode (responseBody reply) :: Either String (SearchResult Tweet)
160160 let myTweet = fmap (hitSource . head . hits . searchHits) result
161161 return myTweet
162162
163−searchExpectNoResults :: Search -> BH ()
163+searchExpectNoResults :: Search -> BH IO ()
164164searchExpectNoResults search = do
165165 reply <- searchByIndex testIndex search
166166 let result = eitherDecode (responseBody reply) :: Either String (SearchResult Tweet)
@@ -168,7 +168,7 @@ searchExpectNoResults search = do
168168 liftIO $
169169 emptyHits `shouldBe` Right []
170170
171−searchExpectAggs :: Search -> BH ()
171+searchExpectAggs :: Search -> BH IO ()
172172searchExpectAggs search = do
173173 reply <- searchAll search
174174 let isEmpty x = return (M.null x)
@@ -176,7 +176,7 @@ searchExpectAggs search = do
176176 liftIO $
177177 (result >>= aggregations >>= isEmpty) `shouldBe` Just False
178178
179−searchValidBucketAgg :: (BucketAggregation a, FromJSON a, Show a) => Search -> Text -> (Text -> AggregationResults -> Maybe (Bucket a)) -> BH ()
179+searchValidBucketAgg :: (BucketAggregation a, FromJSON a, Show a) => Search -> Text -> (Text -> AggregationResults -> Maybe (Bucket a)) -> BH IO ()
180180searchValidBucketAgg search aggKey extractor = do
181181 reply <- searchAll search
182182 let bucketDocs = docCount . head . buckets
@@ -185,14 +185,14 @@ searchValidBucketAgg search aggKey extractor = do
185185 liftIO $
186186 count `shouldBe` Just 1
187187
188−searchTermsAggHint :: [ExecutionHint] -> BH ()
188+searchTermsAggHint :: [ExecutionHint] -> BH IO ()
189189searchTermsAggHint hints = do
190190 let terms hint = TermsAgg $ (mkTermsAggregation "user") { termExecutionHint = Just hint }
191191 let search hint = mkAggregateSearch Nothing $ mkAggregations "users" $ terms hint
192192 forM_ hints $ searchExpectAggs . search
193193 forM_ hints (\x -> searchValidBucketAgg (search x) "users" toTerms)
194194
195−searchTweetHighlight :: Search -> BH (Either String (Maybe HitHighlight))
195+searchTweetHighlight :: Search -> BH IO (Either String (Maybe HitHighlight))
196196searchTweetHighlight search = do
197197 reply <- searchByIndex testIndex search
198198 let result = eitherDecode (responseBody reply) :: Either String (SearchResult Tweet)