Skip to content

Commit a4065c0

Browse files
committed
Improve MarshmallowPlugin.parameter_helper tests
1 parent 8af46c4 commit a4065c0

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

src/apispec/ext/marshmallow/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,6 @@ def parameter_helper(self, parameter, **kwargs):
174174
:param dict parameter: parameter fields. May contain a marshmallow
175175
Schema class or instance.
176176
"""
177-
# In OpenAPIv3, this only works when using the complex form using "content"
178177
self.resolver.resolve_schema(parameter)
179178
return parameter
180179

src/apispec/ext/marshmallow/schema_resolver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ def resolve_schema(self, data):
219219
if not isinstance(data, dict):
220220
return
221221

222-
# OAS 2 component or OAS 3 header
222+
# OAS 2 component or OAS 3 parameter or header
223223
if "schema" in data:
224224
data["schema"] = self.resolve_schema_dict(data["schema"])
225225
# OAS 3 component except header

tests/test_ext_marshmallow.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -220,17 +220,26 @@ class PetFamilySchema(Schema):
220220
class TestComponentParameterHelper:
221221
@pytest.mark.parametrize("schema", [PetSchema, PetSchema()])
222222
def test_can_use_schema_in_parameter(self, spec, schema):
223-
if spec.openapi_version.major < 3:
224-
param = {"schema": schema}
225-
else:
226-
param = {"content": {"application/json": {"schema": schema}}}
223+
param = {"schema": schema}
227224
spec.components.parameter("Pet", "body", param)
228225
parameter = get_parameters(spec)["Pet"]
229226
assert parameter["in"] == "body"
230-
if spec.openapi_version.major < 3:
231-
reference = parameter["schema"]
232-
else:
233-
reference = parameter["content"]["application/json"]["schema"]
227+
reference = parameter["schema"]
228+
assert reference == build_ref(spec, "schema", "Pet")
229+
230+
resolved_schema = spec.components.schemas["Pet"]
231+
assert resolved_schema["properties"]["name"]["type"] == "string"
232+
assert resolved_schema["properties"]["password"]["type"] == "string"
233+
assert resolved_schema["properties"]["id"]["type"] == "integer"
234+
235+
@pytest.mark.parametrize("spec", ("3.0.0",), indirect=True)
236+
@pytest.mark.parametrize("schema", [PetSchema, PetSchema()])
237+
def test_can_use_schema_in_parameter_with_content(self, spec, schema):
238+
param = {"content": {"application/json": {"schema": schema}}}
239+
spec.components.parameter("Pet", "body", param)
240+
parameter = get_parameters(spec)["Pet"]
241+
assert parameter["in"] == "body"
242+
reference = parameter["content"]["application/json"]["schema"]
234243
assert reference == build_ref(spec, "schema", "Pet")
235244

236245
resolved_schema = spec.components.schemas["Pet"]

0 commit comments

Comments
 (0)