git.iko.soy/typeable/bloodhound
on master help sign in
welp.
commit886ef3ffdd398360949172c39644daa7ec1112ef authorChris Allen <cma@bitemyapp.com> dateSun 6 Apr 2014, 18:29 (13 years ago) parent1ed7096
4 files changed+68−5
Database/Bloodhound/Client.hs+3 Makefile+12 bloodhound.cabal+9−2 tests/tests.hs+44−3
Database/Bloodhound/Client.hs+3
@@ -8,6 +8,9 @@ module Database.Bloodhound.Client
88 , Server(..)
99 , defaultIndexSettings
1010 , indexDocument
11+ , getDocument
12+ , documentExists
13+ , deleteDocument
1114 )
1215 where
1316
Makefilenew file+12
@@ -0,0 +1,12 @@
1+
2+test:
3+ cabal install --enable-tests
4+
5+build:
6+ cabal build
7+
8+test-repl:
9+ cabal repl tests
10+
11+repl:
12+ cabal repl
bloodhound.cabal+9−2
@@ -43,7 +43,14 @@ test-suite tests
4343 hs-source-dirs: tests
4444 build-depends: base,
4545 bloodhound,
46− hspec >= 1.9,
4746 http-conduit,
48− http-types
47+ http-types,
48+ hspec >= 1.9,
49+ QuickCheck >= 2.5,
50+ derive >= 2.5,
51+ text >= 0.11,
52+ time >= 1.4,
53+ aeson >= 0.7,
54+ random >= 1.0,
55+ quickcheck-instances >= 0.3
4956 default-language: Haskell2010
tests/tests.hs+44−3
@@ -1,20 +1,61 @@
1+{-# LANGUAGE DeriveGeneric, TemplateHaskell #-}
2+
13module Main where
24
35import Database.Bloodhound.Client
6+import Data.Aeson
7+import Data.DeriveTH
8+import Data.Maybe (fromJust)
9+import Data.Time.Clock (UTCTime)
10+import Data.Text (Text)
11+import GHC.Generics (Generic)
412import Network.HTTP.Conduit
513import qualified Network.HTTP.Types.Status as NHTS
14+import System.Random
615import Test.Hspec
16+import Test.QuickCheck
17+import Test.QuickCheck.Gen
18+import Test.QuickCheck.Instances
719
820
921testServer = Server "http://localhost:9200"
1022testIndex = "twitter"
1123validateStatus resp expected = (NHTS.statusCode $ responseStatus resp) `shouldBe` (expected :: Int)
24+createExampleIndex = createIndex testServer defaultIndexSettings testIndex
25+deleteExampleIndex = deleteIndex testServer testIndex
26+
27+data Tweet = Tweet { user :: Text
28+ , postDate :: UTCTime
29+ , message :: Text }
30+ deriving (Eq, Generic, Show)
31+
32+instance ToJSON Tweet
33+instance FromJSON Tweet
34+$(derive makeArbitrary ''Tweet)
35+
36+newTweet :: IO Tweet
37+newTweet = do
38+ g <- newStdGen
39+ let seed = head (take 1 $ randoms g)
40+ return (unGen arbitrary (mkStdGen seed) 100)
1241
1342main :: IO ()
1443main = hspec $ do
15− describe "index API" $ do
44+ describe "index create/delete API" $ do
1645 it "creates and then deletes the requested index" $ do
17− resp <- createIndex testServer defaultIndexSettings testIndex
18− deleteResp <- deleteIndex testServer testIndex
46+ -- priming state.
47+ _ <- deleteExampleIndex
48+ resp <- createExampleIndex
49+ deleteResp <- deleteExampleIndex
1950 validateStatus resp 200
2051 validateStatus deleteResp 200
52+ describe "document API" $ do
53+ it "indexes, gets, and then deletes the generated document" $ do
54+ tweet <- newTweet
55+ let encoded = encode tweet
56+ created <- createExampleIndex
57+ docCreated <- indexDocument (Server "http://localhost:9200") "twitter" "tweet" tweet "1"
58+ docInserted <- getDocument (Server "http://localhost:9200") "twitter" "tweet" "1"
59+ let newTweet = decode (responseBody docInserted) :: Maybe Tweet
60+ deleted <- deleteExampleIndex
61+ (Just tweet) `shouldBe` newTweet