Skip to content

Commit 6d660fb

Browse files
committed
Rafactor extract params into a private method
Also adds unittests for it.
1 parent 239a938 commit 6d660fb

File tree

2 files changed

+62
-8
lines changed

2 files changed

+62
-8
lines changed

pulp-glue/pulp_glue/common/openapi.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ def param_spec(
310310
param_spec = {k: v for k, v in param_spec.items() if v.get("required", False)}
311311
return param_spec
312312

313-
def extract_params(
313+
def _extract_params(
314314
self,
315315
param_in: str,
316316
path_spec: t.Dict[str, t.Any],
@@ -603,15 +603,15 @@ def call(
603603
else:
604604
parameters = parameters.copy()
605605

606-
if any(self.extract_params("cookie", path_spec, method_spec, parameters)):
606+
if any(self._extract_params("cookie", path_spec, method_spec, parameters)):
607607
raise NotImplementedError(_("Cookie parameters are not implemented."))
608608

609-
headers = self.extract_params("header", path_spec, method_spec, parameters)
609+
headers = self._extract_params("header", path_spec, method_spec, parameters)
610610

611-
for name, value in self.extract_params("path", path_spec, method_spec, parameters).items():
611+
for name, value in self._extract_params("path", path_spec, method_spec, parameters).items():
612612
path = path.replace("{" + name + "}", value)
613613

614-
query_params = self.extract_params("query", path_spec, method_spec, parameters)
614+
query_params = self._extract_params("query", path_spec, method_spec, parameters)
615615

616616
if any(parameters):
617617
raise OpenAPIError(

pulp-glue/tests/test_openapi.py

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
1+
import datetime
2+
import json
3+
14
import pytest
25

36
from pulp_glue.common.openapi import OpenAPI, _Response
47

58
pytestmark = pytest.mark.glue
69

7-
TEST_SCHEMA = b'{"openapi": "3.0.3", "paths": {}}'
10+
TEST_SCHEMA = json.dumps(
11+
{
12+
"openapi": "3.0.3",
13+
"paths": {"test/": {"get": {"operationId": "test_id"}}},
14+
"components": {"schemas": {}},
15+
}
16+
).encode()
817

918

1019
@pytest.fixture
1120
def openapi(monkeypatch: pytest.MonkeyPatch) -> OpenAPI:
12-
monkeypatch.setattr(OpenAPI, "_download_api", lambda x: TEST_SCHEMA)
13-
return OpenAPI("base_url", "doc_path")
21+
monkeypatch.setattr(OpenAPI, "load_api", lambda self, refresh_cache: TEST_SCHEMA)
22+
openapi = OpenAPI("base_url", "doc_path")
23+
openapi._parse_api(TEST_SCHEMA)
24+
return openapi
1425

1526

1627
def test_parse_response_returns_dict_for_no_content(openapi: OpenAPI) -> None:
@@ -25,3 +36,46 @@ def test_parse_response_decodes_json(openapi: OpenAPI) -> None:
2536
{"responses": {"200": {"content": {"application/json": {}}}}}, response
2637
)
2738
assert result == {"a": 1, "b": "Hallo!"}
39+
40+
41+
def test_extract_params_with_no_match(openapi: OpenAPI) -> None:
42+
parameters = {"a": 1, "b": "C"}
43+
query_params = openapi._extract_params("query", {}, {}, parameters)
44+
assert query_params == {}
45+
assert parameters == {"a": 1, "b": "C"}
46+
47+
48+
def test_extract_params_raises_for_missing_required_parameter(openapi: OpenAPI) -> None:
49+
parameters = {"a": 1, "b": "C"}
50+
with pytest.raises(RuntimeError, match=r"Required parameters \[c\] missing"):
51+
openapi._extract_params(
52+
"query",
53+
{"parameters": [{"name": "c", "in": "query", "required": True}]},
54+
{},
55+
parameters,
56+
)
57+
assert parameters == {"a": 1, "b": "C"}
58+
59+
60+
def test_extract_params_removes_matches(openapi: OpenAPI) -> None:
61+
parameters = {"a": 1, "c": "C"}
62+
query_params = openapi._extract_params(
63+
"query", {"parameters": [{"name": "c", "in": "query", "required": True}]}, {}, parameters
64+
)
65+
assert query_params == {"c": "C"}
66+
assert parameters == {"a": 1}
67+
68+
69+
def test_extract_params_encodes_date(openapi: OpenAPI) -> None:
70+
parameters = {"a": datetime.date(2000, 1, 1)}
71+
query_params = openapi._extract_params(
72+
"query",
73+
{
74+
"parameters": [
75+
{"name": "a", "in": "query", "schema": {"type": "string", "format": "date"}}
76+
]
77+
},
78+
{},
79+
parameters,
80+
)
81+
assert query_params == {"a": "2000-01-01"}

0 commit comments

Comments
 (0)