fix: Return 204 No Content without Content-Type for RPCs returning VOID

Resolves #2001

BREAKING CHANGE: Previously, those RPCs would return "null" as a body with Content-Type: application/json.
This commit is contained in:
Wolfgang Walther
2022-02-05 09:28:28 +01:00
committed by Wolfgang Walther
parent 9ca9a54d21
commit 52d628f1ed
7 changed files with 66 additions and 33 deletions
+6 -6
View File
@@ -630,7 +630,7 @@ def test_jwt_secret_external_file_reload(tmp_path, defaultenv):
# reload config and external file with NOTIFY
response = postgrest.session.post("/rpc/reload_pgrst_config")
assert response.status_code == 200
assert response.status_code == 204
time.sleep(0.1)
response = postgrest.session.get("/authors_only", headers=headers)
@@ -685,7 +685,7 @@ def test_db_schema_notify_reload(defaultenv):
# reset db-schemas config on the db
response = postgrest.session.post("/rpc/reset_db_schema_config")
assert response.status_code == 200
assert response.status_code == 204
def test_max_rows_reload(defaultenv):
@@ -714,7 +714,7 @@ def test_max_rows_reload(defaultenv):
# reset max-rows config on the db
response = postgrest.session.post("/rpc/reset_max_rows_config")
assert response.status_code == 200
assert response.status_code == 204
def test_max_rows_notify_reload(defaultenv):
@@ -744,7 +744,7 @@ def test_max_rows_notify_reload(defaultenv):
# reset max-rows config on the db
response = postgrest.session.post("/rpc/reset_max_rows_config")
assert response.status_code == 200
assert response.status_code == 204
def test_invalid_role_claim_key_notify_reload(defaultenv):
@@ -770,7 +770,7 @@ def test_invalid_role_claim_key_notify_reload(defaultenv):
assert "failed to parse role-claim-key value" in output.decode()
response = postgrest.session.post("/rpc/reset_invalid_role_claim_key")
assert response.status_code == 200
assert response.status_code == 204
def test_db_prepared_statements_enable(defaultenv):
@@ -835,7 +835,7 @@ def test_admin_ready_includes_schema_cache_state(defaultenv):
response = postgrest.session.post(
"/rpc/no_schema_cache_for_limited_authenticator"
)
assert response.status_code == 200
assert response.status_code == 204
# force a reconnection so the new role setting is picked up
postgrest.process.send_signal(signal.SIGUSR1)
+12 -3
View File
@@ -179,7 +179,10 @@ spec actualPgVersion = do
[("Prefer", "tx=commit")]
[json|{"name": "auto_incrementing_pk_id_seq", "value": 2}|]
`shouldRespondWith`
[json|""|]
""
{ matchStatus = 204
, matchHeaders = [ matchHeaderAbsent hContentType ]
}
request methodPost "/auto_incrementing_pk"
[("Prefer", "return=headers-only")]
@@ -357,7 +360,10 @@ spec actualPgVersion = do
[("Prefer", "tx=commit")]
[json|{"name": "items2_id_seq", "value": 20}|]
`shouldRespondWith`
[json|""|]
""
{ matchStatus = 204
, matchHeaders = [ matchHeaderAbsent hContentType ]
}
request methodPost "/items2"
[("Prefer", "return=representation")]
@@ -372,7 +378,10 @@ spec actualPgVersion = do
[("Prefer", "tx=commit")]
[json|{"name": "items3_id_seq", "value": 20}|]
`shouldRespondWith`
[json|""|]
""
{ matchStatus = 204
, matchHeaders = [ matchHeaderAbsent hContentType ]
}
request methodPost "/items3?select=id"
[("Prefer", "return=representation")]
+15 -8
View File
@@ -329,18 +329,20 @@ spec actualPgVersion =
`shouldRespondWith`
[json|{"id": 2}|]
it "returns null for void" $
it "returns 204, no Content-Type header and no content for void" $
post "/rpc/ret_void"
[json|{}|]
`shouldRespondWith`
[json|null|]
""
{ matchStatus = 204
, matchHeaders = [matchHeaderAbsent hContentType]
}
it "returns null for an integer with null value" $
post "/rpc/ret_null"
[json|{}|]
`shouldRespondWith`
"null"
{ matchHeaders = [matchContentTypeJson] }
[json|null|]
context "different types when overloaded" $ do
it "returns composite type" $
@@ -527,7 +529,10 @@ spec actualPgVersion =
[("Prefer", "tx=commit")]
[json|{"name": "callcounter_count", "value": 1}|]
`shouldRespondWith`
[json|""|]
""
{ matchStatus = 204
, matchHeaders = [ matchHeaderAbsent hContentType ]
}
-- now the test
post "/rpc/callcounter"
@@ -1074,10 +1079,12 @@ spec actualPgVersion =
it "can set the same http header twice" $
get "/rpc/set_cookie_twice"
`shouldRespondWith`
"null"
{ matchHeaders = [ matchContentTypeJson
""
{ matchStatus = 204
, matchHeaders = [ matchHeaderAbsent hContentType
, "Set-Cookie" <:> "sessionid=38afes7a8; HttpOnly; Path=/"
, "Set-Cookie" <:> "id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly" ]}
, "Set-Cookie" <:> "id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly" ]
}
it "can override the Location header on a trigger" $
post "/stuff"