a few more tests fixed

This commit is contained in:
Ruslan Talpa
2015-10-22 16:17:23 +03:00
parent 2b8f5f791a
commit 2662e24991
3 changed files with 28 additions and 14 deletions
+9 -8
View File
@@ -205,7 +205,7 @@ app dbstructure conf authenticator reqBody dbrole req =
locationH = fromMaybe "" locationRaw
return $ responseLBS status201
[
jsonH,
contentTypeH,
(hLocation, "/" <> cs table <> "?" <> cs locationH)
]
$ if echoRequested then body else ""
@@ -493,13 +493,14 @@ parsePostRequest httpRequest reqBody =
rows <- (map V.toList . V.toList) <$> CSV.decode CSV.NoHeader reqBody
if null rows then Left "CSV requires header"
else Right (head rows, (map $ map $ parseCsvCell . cs) (tail rows))
else jsn >>= \val -> convertJson val
jsn = eitherDecode reqBody
returnSingle = first cs $ jsn >>= (\v->
case v of
Object _ -> Right True
_ -> Right False
)
else eitherDecode reqBody >>= \val -> convertJson val
-- jsn = eitherDecode reqBody
-- returnSingle = first cs $ jsn >>= (\v->
-- case v of
-- Object _ -> Right True
-- _ -> Right False
-- )
returnSingle = (==1) . length . snd <$> parsed
hdrs = requestHeaders httpRequest
lookupHeader = flip lookup hdrs
rootTableName = cs $ head $ pathInfo httpRequest -- TODO unsafe head
+2 -1
View File
@@ -378,7 +378,8 @@ locationF :: [T.Text] -> T.Text
locationF pKeys =
"(" <>
" 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" <>
(
if null pKeys
+17 -5
View File
@@ -1,6 +1,6 @@
module Feature.InsertSpec where
import Test.Hspec
import Test.Hspec hiding (pendingWith)
import Test.Hspec.Wai
import Test.Hspec.Wai.JSON
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"]
}
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"
[("Content-Type", "text/csv"), ("Prefer", "return=representation")]
[("Content-Type", "text/csv"), ("Accept", "text/csv"), ("Prefer", "return=representation")]
"a,b\nNULL,foo"
`shouldRespondWith` ResponseMatcher {
matchBody = Just [json| { "a":null, "b":"foo" } |]
matchBody = Just "a,b\n,foo"
, matchStatus = 201
, matchHeaders = ["Content-Type" <:> "application/json",
, matchHeaders = ["Content-Type" <:> "text/csv",
"Location" <:> "/no_pk?a=is.null&b=eq.foo"]
}
after_ (clearTable "no_pk") . context "with wrong number of columns" $ do
it "fails for too few" $ do
p <- request methodPost "/no_pk" [("Content-Type", "text/csv")] "a,b\nfoo,bar\nbaz"