Skip to content

Commit d7e8417

Browse files
committed
test: cover optional security alternatives
1 parent 0337b43 commit d7e8417

3 files changed

Lines changed: 47 additions & 9 deletions

File tree

tests/integration/data/v3.0/security_override.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ paths:
3030
responses:
3131
default:
3232
description: Remove security.
33+
patch:
34+
security:
35+
- api_key: []
36+
- {}
37+
responses:
38+
default:
39+
description: Optional security.
3340
components:
3441
securitySchemes:
3542
api_key:

tests/integration/data/v3.1/security_override.yaml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ paths:
3030
responses:
3131
default:
3232
description: Remove security.
33+
patch:
34+
security:
35+
- api_key: []
36+
- {}
37+
responses:
38+
default:
39+
description: Optional security.
3340
components:
3441
securitySchemes:
3542
api_key:
@@ -38,4 +45,4 @@ components:
3845
in: query
3946
petstore_auth:
4047
type: http
41-
scheme: basic
48+
scheme: basic

tests/integration/unmarshalling/test_security_override.py

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,23 @@
66
from openapi_core.testing import MockRequest
77
from openapi_core.unmarshalling.request.unmarshallers import (
88
V30RequestUnmarshaller,
9+
V31RequestUnmarshaller,
910
)
1011
from openapi_core.validation.request.exceptions import SecurityValidationError
1112

1213

13-
@pytest.fixture(scope="class")
14-
def schema_path(schema_path_factory):
15-
return schema_path_factory.from_file("data/v3.0/security_override.yaml")
16-
17-
18-
@pytest.fixture(scope="class")
19-
def request_unmarshaller(schema_path):
20-
return V30RequestUnmarshaller(schema_path)
14+
@pytest.fixture(
15+
scope="class",
16+
params=[
17+
("data/v3.0/security_override.yaml", V30RequestUnmarshaller),
18+
("data/v3.1/security_override.yaml", V31RequestUnmarshaller),
19+
],
20+
ids=["openapi-3.0", "openapi-3.1"],
21+
)
22+
def request_unmarshaller(schema_path_factory, request):
23+
schema_file, unmarshaller_cls = request.param
24+
schema_path = schema_path_factory.from_file(schema_file)
25+
return unmarshaller_cls(schema_path)
2126

2227

2328
class TestSecurityOverride:
@@ -85,3 +90,22 @@ def test_remove(self, request_unmarshaller):
8590

8691
assert not result.errors
8792
assert result.security == {}
93+
94+
def test_optional_without_security(self, request_unmarshaller):
95+
request = MockRequest(self.host_url, "patch", "/resource/one")
96+
97+
result = request_unmarshaller.unmarshal(request)
98+
99+
assert not result.errors
100+
assert result.security == {}
101+
102+
def test_optional_with_security(self, request_unmarshaller):
103+
args = {"api_key": self.api_key}
104+
request = MockRequest(self.host_url, "patch", "/resource/one", args=args)
105+
106+
result = request_unmarshaller.unmarshal(request)
107+
108+
assert not result.errors
109+
assert result.security == {
110+
"api_key": self.api_key,
111+
}

0 commit comments

Comments
 (0)