From adac39bd7c127e571c0995f7d5ca444d6c02cbb9 Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Sat, 15 Aug 2015 11:57:57 -0700 Subject: [PATCH] Use Content-Type text/csv for CSV responses --- src/PostgREST/App.hs | 7 +++++-- test/Feature/QuerySpec.hs | 6 +++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/PostgREST/App.hs b/src/PostgREST/App.hs index b2b6b6326..3cc092b83 100644 --- a/src/PostgREST/App.hs +++ b/src/PostgREST/App.hs @@ -85,7 +85,7 @@ app conf reqBody req = . parseSimpleQuery $ rawQueryString req return $ responseLBS status - [jsonH, contentRange, + [if accept == Just "text/csv" then csvH else jsonH, contentRange, ("Content-Location", "/" <> cs table <> if Prelude.null canonical then "" else "?" <> cs canonical @@ -248,7 +248,7 @@ rangeStatus from to total | otherwise = status200 bodyForAccept :: Maybe BS.ByteString -> QualifiedTable -> StatementT -bodyForAccept accept table = +bodyForAccept accept table = case accept of Just "text/csv" -> asCsvWithCount table _ -> asJsonWithCount -- defaults to JSON @@ -276,6 +276,9 @@ requestedSchema v1schema hdrs = jsonH :: Header jsonH = (hContentType, "application/json") +csvH :: Header +csvH = (hContentType, "text/csv") + handleJsonObj :: BL.ByteString -> (Object -> H.Tx P.Postgres s Response) -> H.Tx P.Postgres s Response handleJsonObj reqBody handler = do diff --git a/test/Feature/QuerySpec.hs b/test/Feature/QuerySpec.hs index 98f036e98..f00d74fa0 100644 --- a/test/Feature/QuerySpec.hs +++ b/test/Feature/QuerySpec.hs @@ -126,7 +126,11 @@ spec = it "should respond with CSV to 'text/csv' request" $ request methodGet "/simple_pk" (acceptHdrs "text/csv") "" - `shouldRespondWith` "k,extra\rxyyx,u\rxYYx,v" + `shouldRespondWith` ResponseMatcher { + matchBody = Just "k,extra\rxyyx,u\rxYYx,v" + , matchStatus = 200 + , matchHeaders = ["Content-Type" <:> "text/csv"] + } describe "Canonical location" $ do it "Sets Content-Location with alphabetized params" $