@@ -56,6 +56,14 @@ exampleTweet = Tweet { user = "bitemyapp"
5656 , age = 10000
5757 , location = Location 40.12 (-71.34) }
5858
59+otherTweet = Tweet { user = "notmyapp"
60+ , postDate = UTCTime
61+ (ModifiedJulianDay 55000)
62+ (secondsToDiffTime 11)
63+ , message = "Use haskell!"
64+ , age = 1000
65+ , location = Location 40.12 (-71.34) }
66+
5967insertData :: IO ()
6068insertData = do
6169 let encoded = encode exampleTweet
@@ -66,6 +74,12 @@ insertData = do
6674 _ <- refreshIndex testServer testIndex
6775 return ()
6876
77+insertOther :: IO ()
78+insertOther = do
79+ docCreated <- indexDocument testServer testIndex testMapping otherTweet (DocId "2")
80+ _ <- refreshIndex testServer testIndex
81+ return ()
82+
6983searchTweet :: Search -> IO (Either String Tweet)
7084searchTweet search = do
7185 reply <- searchByIndex testServer testIndex search
@@ -132,6 +146,19 @@ main = hspec $ do
132146 myTweet <- searchTweet search
133147 myTweet `shouldBe` Right exampleTweet
134148
149+ describe "sorting" $ do
150+ it "returns documents in the right order" $ do
151+ _ <- insertData
152+ _ <- insertOther
153+ let sortSpec = DefaultSortSpec $ mkSort (FieldName "age") Ascending
154+ let search = Search Nothing
155+ (Just IdentityFilter) (Just [sortSpec])
156+ False 0 10
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
161+
135162 describe "filtering API" $ do
136163 it "returns document for composed boolmatch and identity" $ do
137164 _ <- insertData