diff --git a/src/openapi_parser/builders/parameter.py b/src/openapi_parser/builders/parameter.py index 1f439fc..3ddfbc4 100644 --- a/src/openapi_parser/builders/parameter.py +++ b/src/openapi_parser/builders/parameter.py @@ -80,6 +80,8 @@ def build(self, data: dict[str, Any]) -> Parameter: cast=self._content_builder.build_list, ), "description": PropertyMeta(name="description", cast=str), + "example": PropertyMeta(name="example", cast=None), + "examples": PropertyMeta(name="examples", cast=dict), "deprecated": PropertyMeta(name="deprecated", cast=bool), "explode": PropertyMeta(name="explode", cast=bool), } diff --git a/src/openapi_parser/specification.py b/src/openapi_parser/specification.py index 580f8d9..1271381 100644 --- a/src/openapi_parser/specification.py +++ b/src/openapi_parser/specification.py @@ -212,8 +212,8 @@ class Parameter: content: list[Content] | None = None required: bool | None = field(default=False) description: str | None = None - # example: Optional[Any] # TODO - # examples: list[Any] = field(default_factory=list) # TODO + example: Any | None = None + examples: dict[str, Any] = field(default_factory=dict) # allow_reserved: bool # TODO deprecated: bool | None = field(default=False) style: ( diff --git a/tests/builders/test_parameter_builder.py b/tests/builders/test_parameter_builder.py index 0f601a0..c784f5c 100644 --- a/tests/builders/test_parameter_builder.py +++ b/tests/builders/test_parameter_builder.py @@ -129,6 +129,68 @@ def _get_content_builder_mock( _get_schema_factory_mock(string_schema), _get_content_builder_mock(None), ), + ( + { + "name": "limit", + "in": "query", + "required": True, + "schema": { + "type": "integer", + }, + "example": 10, + }, + Parameter( + name="limit", + location=ParameterLocation.QUERY, + required=True, + schema=string_schema, + style=QueryParameterStyle.FORM, + explode=True, + example=10, + ), + _get_schema_factory_mock(string_schema), + _get_content_builder_mock(None), + ), + ( + { + "name": "filter", + "in": "query", + "required": False, + "schema": { + "type": "string", + }, + "examples": { + "foo": { + "summary": "A foo example", + "value": {"foo": "bar"}, + }, + "bar": { + "summary": "A bar example", + "value": {"bar": "baz"}, + }, + }, + }, + Parameter( + name="filter", + location=ParameterLocation.QUERY, + required=False, + schema=string_schema, + style=QueryParameterStyle.FORM, + explode=True, + examples={ + "foo": { + "summary": "A foo example", + "value": {"foo": "bar"}, + }, + "bar": { + "summary": "A bar example", + "value": {"bar": "baz"}, + }, + }, + ), + _get_schema_factory_mock(string_schema), + _get_content_builder_mock(None), + ), ) collection_data_provider = ( diff --git a/tests/openapi_fixture.py b/tests/openapi_fixture.py index b99488d..a2599e3 100644 --- a/tests/openapi_fixture.py +++ b/tests/openapi_fixture.py @@ -308,6 +308,7 @@ def create_specification() -> Specification: required=True, explode=False, style=PathParameterStyle.SIMPLE, + example="12345678-1234-5678-1234-567812345678", schema=String( type=DataType.STRING, format=StringFormat.UUID, @@ -333,6 +334,7 @@ def create_specification() -> Specification: required=True, explode=True, style=QueryParameterStyle.FORM, + example=10, schema=Integer(type=DataType.INTEGER), ), Parameter( @@ -342,6 +344,7 @@ def create_specification() -> Specification: required=True, explode=True, style=QueryParameterStyle.FORM, + example=0, schema=Integer(type=DataType.INTEGER), ), Parameter(