Return inserted object from POST when Prefer: return=representation
Fixes #27 Fixes #159
This commit is contained in:
@@ -7,6 +7,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
### Added
|
||||
- Server response logging
|
||||
- Filter IN values, e.g. `?col=in.1,2,3`
|
||||
- Return POSTed resource if header "Prefer: return=representation"
|
||||
|
||||
## [0.2.6.0] - 2015-02-18
|
||||
### Added
|
||||
|
||||
+2
-1
@@ -102,6 +102,7 @@ app reqBody req =
|
||||
handleJsonObj reqBody $ \obj -> do
|
||||
let qt = QualifiedTable schema (cs table)
|
||||
query = insertInto qt (map cs $ keys obj) (elems obj)
|
||||
echoRequested = lookup "Prefer" hdrs == Just "return=representation"
|
||||
row <- H.maybeEx query
|
||||
let (Identity insertedJson) = fromMaybe (Identity "{}" :: Identity Text) row
|
||||
Just inserted = decode (cs insertedJson) :: Maybe Object
|
||||
@@ -116,7 +117,7 @@ app reqBody req =
|
||||
return $ responseLBS status201
|
||||
[ jsonH
|
||||
, (hLocation, "/" <> cs table <> "?" <> cs params)
|
||||
] ""
|
||||
] $ if echoRequested then cs insertedJson else ""
|
||||
|
||||
([table], "PUT") ->
|
||||
handleJsonObj reqBody $ \obj -> do
|
||||
|
||||
@@ -49,7 +49,7 @@ spec = afterAll_ resetDb $ around withApp $ do
|
||||
post "/simple_pk" [json| { "extra":"foo"} |]
|
||||
`shouldRespondWith` 400
|
||||
|
||||
context "into a table with no pk" . after_ (clearTable "no_pk") $
|
||||
context "into a table with no pk" . after_ (clearTable "no_pk") $ do
|
||||
it "succeeds with 201 and a link including all fields" $ do
|
||||
p <- post "/no_pk" [json| { "a":"foo", "b":"bar" } |]
|
||||
liftIO $ do
|
||||
@@ -57,6 +57,15 @@ spec = afterAll_ resetDb $ around withApp $ do
|
||||
simpleHeaders p `shouldSatisfy` matchHeader hLocation "/no_pk\\?a=eq.foo&b=eq.bar"
|
||||
simpleStatus p `shouldBe` created201
|
||||
|
||||
it "returns full details of inserted record if asked" $ do
|
||||
p <- request methodPost "/no_pk"
|
||||
[("Prefer", "return=representation")]
|
||||
[json| { "a":"bar", "b":"baz" } |]
|
||||
liftIO $ do
|
||||
simpleBody p `shouldBe` [json| { "a":"bar", "b":"baz" } |]
|
||||
simpleHeaders p `shouldSatisfy` matchHeader hLocation "/no_pk\\?a=eq.bar&b=eq.baz"
|
||||
simpleStatus p `shouldBe` created201
|
||||
|
||||
context "with compound pk supplied" . after_ (clearTable "compound_pk") $
|
||||
it "builds response location header appropriately" $
|
||||
post "/compound_pk" [json| { "k1":12, "k2":42 } |]
|
||||
|
||||
Reference in New Issue
Block a user