Handle overloaded function case
* Add test for params=single-object on GET * Add tests for procs with DEFAULT args * Add tests for overloaded functions * Add test for PATCHing with an empty json array, this previously gave a "Something is wrong" error
This commit is contained in:
committed by
Steve Chávez
parent
38f3bcf4a6
commit
f7e7834a1c
@@ -416,13 +416,21 @@ spec = do
|
||||
-- put value back for other tests
|
||||
void $ request methodPatch "/items?id=eq.99" [] [json| { "id":1 } |]
|
||||
|
||||
it "makes no updates and returns 204, when patching with an empty json object" $ do
|
||||
it "makes no updates and returns 204, when patching with an empty json object/array" $ do
|
||||
request methodPatch "/items" [] [json| {} |]
|
||||
`shouldRespondWith` ""
|
||||
{
|
||||
matchStatus = 204,
|
||||
matchHeaders = ["Content-Range" <:> "*/*"]
|
||||
}
|
||||
|
||||
request methodPatch "/items" [] [json| [] |]
|
||||
`shouldRespondWith` ""
|
||||
{
|
||||
matchStatus = 204,
|
||||
matchHeaders = ["Content-Range" <:> "*/*"]
|
||||
}
|
||||
|
||||
get "/items" `shouldRespondWith`
|
||||
[json|[{"id":3},{"id":4},{"id":5},{"id":6},{"id":7},{"id":8},{"id":9},{"id":10},{"id":11},{"id":12},{"id":13},{"id":14},{"id":15},{id:16},{"id":2},{"id":1}]|]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
|
||||
+28
-3
@@ -275,8 +275,14 @@ spec =
|
||||
[json|[{"my_json":{"a": 1, "b": "two"},"num":3,"str":"four"}]|] { matchHeaders = [matchContentTypeJson] }
|
||||
|
||||
it "returns a row result when there are many INOUT params" $
|
||||
get "/rpc/many_inout_params?num=1&str=two" `shouldRespondWith`
|
||||
[json| [{"num":1,"str":"two","b":true}]|] { matchHeaders = [matchContentTypeJson] }
|
||||
get "/rpc/many_inout_params?num=1&str=two&b=false" `shouldRespondWith`
|
||||
[json| [{"num":1,"str":"two","b":false}]|] { matchHeaders = [matchContentTypeJson] }
|
||||
|
||||
it "can handle procs with args that have a DEFAULT value" $ do
|
||||
get "/rpc/many_inout_params?num=1&str=two" `shouldRespondWith`
|
||||
[json| [{"num":1,"str":"two","b":true}]|] { matchHeaders = [matchContentTypeJson] }
|
||||
get "/rpc/three_defaults?b=4" `shouldRespondWith`
|
||||
[json|8|] { matchHeaders = [matchContentTypeJson] }
|
||||
|
||||
it "can map a RAISE error code and message to a http status" $
|
||||
get "/rpc/raise_pt402"
|
||||
@@ -291,7 +297,7 @@ spec =
|
||||
context "expects a single json object" $ do
|
||||
it "does not expand posted json into parameters" $
|
||||
request methodPost "/rpc/singlejsonparam"
|
||||
[("Prefer","params=single-object")] [json| { "p1": 1, "p2": "text", "p3" : {"obj":"text"} } |] `shouldRespondWith`
|
||||
[("prefer","params=single-object")] [json| { "p1": 1, "p2": "text", "p3" : {"obj":"text"} } |] `shouldRespondWith`
|
||||
[json| { "p1": 1, "p2": "text", "p3" : {"obj":"text"} } |]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
|
||||
@@ -304,6 +310,25 @@ spec =
|
||||
, "boolean":"false", "date":"1900-01-01", "money":"$3.99", "enum":"foo" } |]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
|
||||
it "works with GET" $
|
||||
request methodGet "/rpc/singlejsonparam?p1=1&p2=text" [("Prefer","params=single-object")] ""
|
||||
`shouldRespondWith` [json|{ "p1": "1", "p2": "text"}|]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
|
||||
it "should work with an overloaded function" $ do
|
||||
get "/rpc/overloaded" `shouldRespondWith`
|
||||
[json|[{ "overloaded": 1 },
|
||||
{ "overloaded": 2 },
|
||||
{ "overloaded": 3 }]|]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
request methodPost "/rpc/overloaded" [("Prefer","params=single-object")]
|
||||
[json|[{"x": 1, "y": "first"}, {"x": 2, "y": "second"}]|]
|
||||
`shouldRespondWith`
|
||||
[json|[{"x": 1, "y": "first"}, {"x": 2, "y": "second"}]|]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
get "/rpc/overloaded?a=1&b=2" `shouldRespondWith` [str|3|]
|
||||
get "/rpc/overloaded?a=1&b=2&c=3" `shouldRespondWith` [str|"123"|]
|
||||
|
||||
context "only for POST rpc" $
|
||||
it "gives a parse filter error if GET style proc args are specified" $
|
||||
post "/rpc/sayhello?name=John" [json|{}|] `shouldRespondWith` 400
|
||||
|
||||
Vendored
+20
-3
@@ -1325,6 +1325,23 @@ $$ language sql;
|
||||
create or replace function test.set_cookie_twice() returns void as $$
|
||||
set local "response.headers" = '[{"Set-Cookie": "sessionid=38afes7a8; HttpOnly; Path=/"}, {"Set-Cookie": "id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly"}]';
|
||||
$$ language sql;
|
||||
--
|
||||
-- PostgreSQL database dump complete
|
||||
--
|
||||
|
||||
create or replace function test.three_defaults(a int default 1, b int default 2, c int default 3) returns int as $$
|
||||
select a + b + c
|
||||
$$ language sql;
|
||||
|
||||
create or replace function test.overloaded() returns setof int as $$
|
||||
values (1), (2), (3);
|
||||
$$ language sql;
|
||||
|
||||
create or replace function test.overloaded(pg_catalog.json) returns table(x int, y text) as $$
|
||||
select * from json_to_recordset($1) as r(x int, y text);
|
||||
$$ language sql;
|
||||
|
||||
create or replace function test.overloaded(a int, b int) returns int as $$
|
||||
select a + b
|
||||
$$ language sql;
|
||||
|
||||
create or replace function test.overloaded(a text, b text, c text) returns text as $$
|
||||
select a || b || c
|
||||
$$ language sql;
|
||||
|
||||
Reference in New Issue
Block a user