1{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}
5import Database.Bloodhound.Client
8import Data.Either (Either(..))
9import Data.Maybe (fromJust)
10import Data.Time.Calendar (Day(..))
11import Data.Time.Clock (secondsToDiffTime, UTCTime(..))
12import Data.Text (Text)
13import GHC.Generics (Generic)
14import Network.HTTP.Conduit
15import qualified Network.HTTP.Types.Status as NHTS
19testServer = Server "http://localhost:9200"
21validateStatus resp expected = (NHTS.statusCode $ responseStatus resp) `shouldBe` (expected :: Int)
22createExampleIndex = createIndex testServer defaultIndexSettings testIndex
23deleteExampleIndex = deleteIndex testServer testIndex
25data Tweet = Tweet { user :: Text
28 deriving (Eq, Generic, Show)
31instance FromJSON Tweet
33exampleTweet = Tweet { user = "bitemyapp"
35 (ModifiedJulianDay 55000)
36 (secondsToDiffTime 10)
37 , message = "Use haskell!" }
41 describe "index create/delete API" $ do
42 it "creates and then deletes the requested index" $ do
44 _ <- deleteExampleIndex
45 resp <- createExampleIndex
46 deleteResp <- deleteExampleIndex
47 validateStatus resp 200
48 validateStatus deleteResp 200
49 describe "document API" $ do
50 it "indexes, gets, and then deletes the generated document" $ do
51 let tweet = exampleTweet
52 let encoded = encode tweet
53 _ <- deleteExampleIndex
54 created <- createExampleIndex
55 docCreated <- indexDocument (Server "http://localhost:9200") "twitter" "tweet" tweet "1"
56 docInserted <- getDocument (Server "http://localhost:9200") "twitter" "tweet" "1"
57 let newTweet = eitherDecode (responseBody docInserted) :: Either String (EsResult Tweet)
58 deleted <- deleteExampleIndex
59 Right tweet `shouldBe` fmap _source newTweet
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list