feat: support OPTIONS on RPC and root path
This commit is contained in:
committed by
Steve Chavez
parent
71a5748718
commit
2eb7c803e3
+15
-3
@@ -140,7 +140,14 @@ def dumpconfig(configpath=None, env=None, stdin=None):
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def run(configpath=None, stdin=None, env=None, port=None, host=None, no_pool_connection_available=False):
|
||||
def run(
|
||||
configpath=None,
|
||||
stdin=None,
|
||||
env=None,
|
||||
port=None,
|
||||
host=None,
|
||||
no_pool_connection_available=False,
|
||||
):
|
||||
"Run PostgREST and yield an endpoint that is ready for connections."
|
||||
env = env or {}
|
||||
env["PGRST_DB_POOL"] = "1"
|
||||
@@ -244,6 +251,7 @@ def sleep_pool_connection(url, seconds):
|
||||
except requests.exceptions.ReadTimeout:
|
||||
pass
|
||||
|
||||
|
||||
def authheader(token):
|
||||
"Bearer token HTTP authorization header."
|
||||
return {"Authorization": f"Bearer {token}"}
|
||||
@@ -982,9 +990,13 @@ def test_no_pool_connection_required_on_options(defaultenv):
|
||||
response = postgrest.session.options("/projects")
|
||||
assert response.status_code == 200
|
||||
|
||||
# OPTIONS on RPC is not implemented yet, still it shouldn't require opening a connection
|
||||
# OPTIONS on RPC shouldn't require opening a connection
|
||||
response = postgrest.session.options("/rpc/hello")
|
||||
assert response.status_code == 405
|
||||
assert response.status_code == 200
|
||||
|
||||
# OPTIONS on root shouldn't require opening a connection
|
||||
response = postgrest.session.options("/")
|
||||
assert response.status_code == 200
|
||||
|
||||
|
||||
def test_no_pool_connection_required_on_bad_jwt_claim(defaultenv):
|
||||
|
||||
@@ -22,6 +22,9 @@ spec actualPgVersion = describe "Allow header" $ do
|
||||
simpleHeaders r `shouldSatisfy`
|
||||
matchHeader "Allow" "OPTIONS,GET,HEAD,POST,PUT,PATCH,DELETE"
|
||||
|
||||
it "fails with 404 for an unknown table" $
|
||||
request methodOptions "/unknown" [] "" `shouldRespondWith` 404
|
||||
|
||||
when (actualPgVersion >= pgVersion100) $
|
||||
context "a partitioned table" $ do
|
||||
it "includes read/write methods for writeable partitioned tables" $ do
|
||||
@@ -85,3 +88,29 @@ spec actualPgVersion = describe "Allow header" $ do
|
||||
liftIO $
|
||||
simpleHeaders r `shouldSatisfy`
|
||||
matchHeader "Allow" "OPTIONS,GET,HEAD,DELETE"
|
||||
|
||||
context "a function" $ do
|
||||
it "includes the POST method for a volatile function" $ do
|
||||
r <- request methodOptions "/rpc/reset_items_tables" [] ""
|
||||
liftIO $
|
||||
simpleHeaders r `shouldSatisfy`
|
||||
matchHeader "Allow" "OPTIONS,POST"
|
||||
|
||||
it "includes the GET/HEAD/POST method for a stable function" $ do
|
||||
r <- request methodOptions "/rpc/getallusers" [] ""
|
||||
liftIO $
|
||||
simpleHeaders r `shouldSatisfy`
|
||||
matchHeader "Allow" "OPTIONS,GET,HEAD,POST"
|
||||
|
||||
it "includes the GET/HEAD/POST method for a immutable function" $ do
|
||||
r <- request methodOptions "/rpc/jwt_test" [] ""
|
||||
liftIO $
|
||||
simpleHeaders r `shouldSatisfy`
|
||||
matchHeader "Allow" "OPTIONS,GET,HEAD,POST"
|
||||
|
||||
context "root endpoint" $ do
|
||||
it "includes the GET/HEAD method " $ do
|
||||
r <- request methodOptions "/" [] ""
|
||||
liftIO $
|
||||
simpleHeaders r `shouldSatisfy`
|
||||
matchHeader "Allow" "OPTIONS,GET,HEAD"
|
||||
|
||||
@@ -541,10 +541,6 @@ spec actualPgVersion =
|
||||
it "PATCH fails" $
|
||||
request methodPatch "/rpc/sayhello" [] ""
|
||||
`shouldRespondWith` 405
|
||||
it "OPTIONS fails" $
|
||||
-- TODO: should return info about the function
|
||||
request methodOptions "/rpc/sayhello" [] ""
|
||||
`shouldRespondWith` 405
|
||||
|
||||
it "executes the proc exactly once per request" $ do
|
||||
-- callcounter is persistent even with rollback, because it uses a sequence
|
||||
|
||||
Reference in New Issue
Block a user