@@ -56,6 +56,14 @@ exampleTweet = Tweet { user = "bitemyapp"
56 , age = 10000
56 , age = 10000
57 , location = Location 40.12 (-71.34) }
57 , location = Location 40.12 (-71.34) }
59+otherTweet = Tweet { user = "notmyapp"
61+ (ModifiedJulianDay 55000)
62+ (secondsToDiffTime 11)
63+ , message = "Use haskell!"
65+ , location = Location 40.12 (-71.34) }
59insertData :: IO ()
67insertData :: IO ()
60insertData = do
68insertData = do
61 let encoded = encode exampleTweet
69 let encoded = encode exampleTweet
@@ -66,6 +74,12 @@ insertData = do
66 _ <- refreshIndex testServer testIndex
74 _ <- refreshIndex testServer testIndex
79+ docCreated <- indexDocument testServer testIndex testMapping otherTweet (DocId "2")
80+ _ <- refreshIndex testServer testIndex
69searchTweet :: Search -> IO (Either String Tweet)
83searchTweet :: Search -> IO (Either String Tweet)
70searchTweet search = do
84searchTweet search = do
71 reply <- searchByIndex testServer testIndex search
85 reply <- searchByIndex testServer testIndex search
@@ -132,6 +146,19 @@ main = hspec $ do
132 myTweet <- searchTweet search
146 myTweet <- searchTweet search
133 myTweet `shouldBe` Right exampleTweet
147 myTweet `shouldBe` Right exampleTweet
149+ describe "sorting" $ do
150+ it "returns documents in the right order" $ do
153+ let sortSpec = DefaultSortSpec $ mkSort (FieldName "age") Ascending
154+ let search = Search Nothing
155+ (Just IdentityFilter) (Just [sortSpec])
157+ reply <- searchByIndex testServer testIndex search
158+ let result = eitherDecode (responseBody reply) :: Either String (SearchResult Tweet)
159+ let myTweet = fmap (hitSource . head . hits . searchHits) result
160+ myTweet `shouldBe` Right otherTweet
135 describe "filtering API" $ do
162 describe "filtering API" $ do
136 it "returns document for composed boolmatch and identity" $ do
163 it "returns document for composed boolmatch and identity" $ do
137 _ <- insertData
164 _ <- insertData