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 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
+2 -1
View File
@@ -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
+17 -5
View File
@@ -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"