a few more tests fixed
This commit is contained in:
@@ -205,7 +205,7 @@ app dbstructure conf authenticator reqBody dbrole req =
|
|||||||
locationH = fromMaybe "" locationRaw
|
locationH = fromMaybe "" locationRaw
|
||||||
return $ responseLBS status201
|
return $ responseLBS status201
|
||||||
[
|
[
|
||||||
jsonH,
|
contentTypeH,
|
||||||
(hLocation, "/" <> cs table <> "?" <> cs locationH)
|
(hLocation, "/" <> cs table <> "?" <> cs locationH)
|
||||||
]
|
]
|
||||||
$ if echoRequested then body else ""
|
$ if echoRequested then body else ""
|
||||||
@@ -493,13 +493,14 @@ parsePostRequest httpRequest reqBody =
|
|||||||
rows <- (map V.toList . V.toList) <$> CSV.decode CSV.NoHeader reqBody
|
rows <- (map V.toList . V.toList) <$> CSV.decode CSV.NoHeader reqBody
|
||||||
if null rows then Left "CSV requires header"
|
if null rows then Left "CSV requires header"
|
||||||
else Right (head rows, (map $ map $ parseCsvCell . cs) (tail rows))
|
else Right (head rows, (map $ map $ parseCsvCell . cs) (tail rows))
|
||||||
else jsn >>= \val -> convertJson val
|
else eitherDecode reqBody >>= \val -> convertJson val
|
||||||
jsn = eitherDecode reqBody
|
-- jsn = eitherDecode reqBody
|
||||||
returnSingle = first cs $ jsn >>= (\v->
|
-- returnSingle = first cs $ jsn >>= (\v->
|
||||||
case v of
|
-- case v of
|
||||||
Object _ -> Right True
|
-- Object _ -> Right True
|
||||||
_ -> Right False
|
-- _ -> Right False
|
||||||
)
|
-- )
|
||||||
|
returnSingle = (==1) . length . snd <$> parsed
|
||||||
hdrs = requestHeaders httpRequest
|
hdrs = requestHeaders httpRequest
|
||||||
lookupHeader = flip lookup hdrs
|
lookupHeader = flip lookup hdrs
|
||||||
rootTableName = cs $ head $ pathInfo httpRequest -- TODO unsafe head
|
rootTableName = cs $ head $ pathInfo httpRequest -- TODO unsafe head
|
||||||
|
|||||||
@@ -378,7 +378,8 @@ locationF :: [T.Text] -> T.Text
|
|||||||
locationF pKeys =
|
locationF pKeys =
|
||||||
"(" <>
|
"(" <>
|
||||||
" WITH s AS (SELECT row_to_json(source) as r from source limit 1)" <>
|
" WITH s AS (SELECT row_to_json(source) as r from source limit 1)" <>
|
||||||
" SELECT string_agg(json_data.key || '=eq.' || json_data.value, '&')" <>
|
-- " SELECT string_agg(json_data.key || '=eq.' || json_data.value, '&')" <>
|
||||||
|
" SELECT string_agg(json_data.key || '=' || coalesce( 'eq.' || json_data.value, 'is.null'), '&')" <>
|
||||||
" FROM s, json_each_text(s.r) AS json_data" <>
|
" FROM s, json_each_text(s.r) AS json_data" <>
|
||||||
(
|
(
|
||||||
if null pKeys
|
if null pKeys
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module Feature.InsertSpec where
|
module Feature.InsertSpec where
|
||||||
|
|
||||||
import Test.Hspec
|
import Test.Hspec hiding (pendingWith)
|
||||||
import Test.Hspec.Wai
|
import Test.Hspec.Wai
|
||||||
import Test.Hspec.Wai.JSON
|
import Test.Hspec.Wai.JSON
|
||||||
import Network.Wai.Test (SResponse(simpleBody,simpleHeaders,simpleStatus))
|
import Network.Wai.Test (SResponse(simpleBody,simpleHeaders,simpleStatus))
|
||||||
@@ -130,17 +130,29 @@ spec = afterAll_ resetDb $ around withApp $ do
|
|||||||
"Location" <:> "/no_pk?a=eq.bar&b=eq.baz"]
|
"Location" <:> "/no_pk?a=eq.bar&b=eq.baz"]
|
||||||
}
|
}
|
||||||
|
|
||||||
it "can post nulls" $
|
-- it "can post nulls (old way)" $ do
|
||||||
|
-- pendingWith "changed the response when in csv mode"
|
||||||
|
-- request methodPost "/no_pk"
|
||||||
|
-- [("Content-Type", "text/csv"), ("Prefer", "return=representation")]
|
||||||
|
-- "a,b\nNULL,foo"
|
||||||
|
-- `shouldRespondWith` ResponseMatcher {
|
||||||
|
-- matchBody = Just [json| { "a":null, "b":"foo" } |]
|
||||||
|
-- , matchStatus = 201
|
||||||
|
-- , matchHeaders = ["Content-Type" <:> "application/json",
|
||||||
|
-- "Location" <:> "/no_pk?a=is.null&b=eq.foo"]
|
||||||
|
-- }
|
||||||
|
it "can post nulls" $ do
|
||||||
request methodPost "/no_pk"
|
request methodPost "/no_pk"
|
||||||
[("Content-Type", "text/csv"), ("Prefer", "return=representation")]
|
[("Content-Type", "text/csv"), ("Accept", "text/csv"), ("Prefer", "return=representation")]
|
||||||
"a,b\nNULL,foo"
|
"a,b\nNULL,foo"
|
||||||
`shouldRespondWith` ResponseMatcher {
|
`shouldRespondWith` ResponseMatcher {
|
||||||
matchBody = Just [json| { "a":null, "b":"foo" } |]
|
matchBody = Just "a,b\n,foo"
|
||||||
, matchStatus = 201
|
, matchStatus = 201
|
||||||
, matchHeaders = ["Content-Type" <:> "application/json",
|
, matchHeaders = ["Content-Type" <:> "text/csv",
|
||||||
"Location" <:> "/no_pk?a=is.null&b=eq.foo"]
|
"Location" <:> "/no_pk?a=is.null&b=eq.foo"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
after_ (clearTable "no_pk") . context "with wrong number of columns" $ do
|
after_ (clearTable "no_pk") . context "with wrong number of columns" $ do
|
||||||
it "fails for too few" $ do
|
it "fails for too few" $ do
|
||||||
p <- request methodPost "/no_pk" [("Content-Type", "text/csv")] "a,b\nfoo,bar\nbaz"
|
p <- request methodPost "/no_pk" [("Content-Type", "text/csv")] "a,b\nfoo,bar\nbaz"
|
||||||
|
|||||||
Reference in New Issue
Block a user