Fix location header for inserted objects with nulls

This commit is contained in:
Joe Nelson
2015-03-15 18:26:32 -07:00
parent ddb5ba8b64
commit 42d3d0de6c
4 changed files with 12 additions and 4 deletions
+2
View File
@@ -7,6 +7,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### Added ### Added
- Option to specify nulls first or last, eg `/people?order=age.desc.nullsfirst` - Option to specify nulls first or last, eg `/people?order=age.desc.nullsfirst`
- Filter nulls, `?col=is.null` and `?col=isnot.null` - Filter nulls, `?col=is.null` and `?col=isnot.null`
### Fixed
- Allow NULL values in posts
## [0.2.7.0] - 2015-03-03 ## [0.2.7.0] - 2015-03-03
### Added ### Added
+1 -1
View File
@@ -112,7 +112,7 @@ app v1schema reqBody req =
then inserted then inserted
else filterWithKey (const . (`elem` primaryKeys)) inserted else filterWithKey (const . (`elem` primaryKeys)) inserted
let params = urlEncodeVars let params = urlEncodeVars
$ map (\t -> (cs $ fst t, "eq." <> cs (unquoted $ snd t))) $ map (\t -> (cs $ fst t, cs (paramFilter $ snd t)))
$ sortBy (comparing fst) $ toList primaries $ sortBy (comparing fst) $ toList primaries
return $ responseLBS status201 return $ responseLBS status201
[ jsonH [ jsonH
+4
View File
@@ -237,3 +237,7 @@ unquoted _ = ""
insertableValue :: JSON.Value -> T.Text insertableValue :: JSON.Value -> T.Text
insertableValue JSON.Null = "null" insertableValue JSON.Null = "null"
insertableValue v = ((<> "::unknown") . pgFmtLit . unquoted) v insertableValue v = ((<> "::unknown") . pgFmtLit . unquoted) v
paramFilter :: JSON.Value -> T.Text
paramFilter JSON.Null = "is.null"
paramFilter v = "eq." <> unquoted v
+5 -3
View File
@@ -69,9 +69,11 @@ spec = afterAll_ resetDb $ around withApp $ do
it "can post nulls" $ do it "can post nulls" $ do
p <- request methodPost "/no_pk" p <- request methodPost "/no_pk"
[("Prefer", "return=representation")] [("Prefer", "return=representation")]
[json| { "a":null, "b":null } |] [json| { "a":null, "b":"foo" } |]
liftIO $ liftIO $ do
simpleBody p `shouldBe` [json| { "a":null, "b":null } |] simpleBody p `shouldBe` [json| { "a":null, "b":"foo" } |]
simpleHeaders p `shouldSatisfy` matchHeader hLocation "/no_pk\\?a=is.null&b=eq.foo"
simpleStatus p `shouldBe` created201
context "with compound pk supplied" . after_ (clearTable "compound_pk") $ context "with compound pk supplied" . after_ (clearTable "compound_pk") $
it "builds response location header appropriately" $ it "builds response location header appropriately" $