From 9475557a4290070680d832598db8a25d37d58721 Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Mon, 14 Feb 2022 15:31:57 +0300 Subject: [PATCH 1/2] fix(openapi): change RequestBodies --- components.go | 3 ++- requestbody.go | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/components.go b/components.go index 41dbf5c..8e911d1 100644 --- a/components.go +++ b/components.go @@ -2,5 +2,6 @@ package openapi // Components -. type Components struct { - Schemas Schemas `json:"schemas,omitempty" yaml:"schemas,omitempty"` + Schemas Schemas `json:"schemas,omitempty" yaml:"schemas,omitempty"` + RequestBodies RequestBodies `json:"requestBodies,omitempty" yaml:"requestBodies,omitempty"` } diff --git a/requestbody.go b/requestbody.go index be9f61b..ce712f4 100644 --- a/requestbody.go +++ b/requestbody.go @@ -7,3 +7,6 @@ type RequestBody struct { Content Content `json:"content,omitempty" yaml:"content,omitempty"` Ref string `json:"$ref,omitempty" yaml:"$ref,omitempty"` } + +// RequestBodies -. +type RequestBodies map[string]*RequestBody From 39395a6ac98e1615a9fd8ed5634a31ee2309aae2 Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Mon, 14 Feb 2022 15:41:40 +0300 Subject: [PATCH 2/2] fix(openapi): change RequestBodies and add more helpers --- openapi.go | 24 +++++++++++++++++++----- openapi_test.go | 21 ++++++++++++++++++++- schema.go | 4 ++-- schema_test.go | 2 +- 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/openapi.go b/openapi.go index b0542f1..c42ce3e 100644 --- a/openapi.go +++ b/openapi.go @@ -14,6 +14,16 @@ func (e *SchemaError) Error() string { return "unknown schema " + e.Ref } +// RequestBodyError -. +type RequestBodyError struct { + Ref string +} + +// Error -. +func (e *RequestBodyError) Error() string { + return "unknown request body " + e.Ref +} + // OpenAPI Object // See specification https://swagger.io/specification/#openapi-object type OpenAPI struct { @@ -26,19 +36,23 @@ type OpenAPI struct { Info Info `json:"info" yaml:"info"` } -// LookupByReference -. -func (api OpenAPI) LookupByReference(ref string) (Schema, error) { +// LookupSchemaByReference -. +func (api OpenAPI) LookupSchemaByReference(ref string) (Schema, error) { schema, ok := api.Components.Schemas[schemaKey(ref)] if ok { return *schema, nil } - schema, ok = api.Components.RequestBodies[requestBodiesKey(ref)] + return Schema{}, &SchemaError{Ref: ref} +} + +func (api OpenAPI) LookupRequestBodyByReference(ref string) (RequestBody, error) { + requestBody, ok := api.Components.RequestBodies[requestBodiesKey(ref)] if ok { - return *schema, nil + return *requestBody, nil } - return Schema{}, &SchemaError{Ref: ref} + return RequestBody{}, &RequestBodyError{Ref: ref} } func schemaKey(ref string) string { diff --git a/openapi_test.go b/openapi_test.go index 763c2d3..a25d250 100644 --- a/openapi_test.go +++ b/openapi_test.go @@ -20,10 +20,29 @@ func TestSchemaError(t *testing.T) { func TestLookupByReference(t *testing.T) { api := openapi.OpenAPI{} - schema, err := api.LookupByReference("") + schema, err := api.LookupSchemaByReference("") var schemaErr *openapi.SchemaError require.Equal(t, openapi.Schema{}, schema) require.True(t, errors.As(err, &schemaErr)) } + +func TestRequestBodyError(t *testing.T) { + got := &openapi.RequestBodyError{ + Ref: "test", + } + + require.Equal(t, got.Error(), "unknown request body test") +} + +func TestLookupRequestBodyByReference(t *testing.T) { + api := openapi.OpenAPI{} + + schema, err := api.LookupRequestBodyByReference("") + + var requestBodyErr *openapi.RequestBodyError + + require.Equal(t, openapi.RequestBody{}, schema) + require.True(t, errors.As(err, &requestBodyErr)) +} diff --git a/schema.go b/schema.go index 4f5e9b8..ddf3a23 100644 --- a/schema.go +++ b/schema.go @@ -27,13 +27,13 @@ type Schemas map[string]*Schema // SchemaContext -. type SchemaContext interface { - LookupByReference(ref string) (Schema, error) + LookupSchemaByReference(ref string) (Schema, error) } // ResponseByExample -. func (s Schema) ResponseByExample(schemaContext SchemaContext) (interface{}, error) { if s.Ref != "" { - schema, err := schemaContext.LookupByReference(s.Ref) + schema, err := schemaContext.LookupSchemaByReference(s.Ref) if err != nil { return nil, fmt.Errorf("lookup: %w", err) } diff --git a/schema_test.go b/schema_test.go index 2f36a91..d542dce 100644 --- a/schema_test.go +++ b/schema_test.go @@ -11,7 +11,7 @@ import ( type schemaContextStub struct{} -func (s schemaContextStub) LookupByReference(ref string) (openapi.Schema, error) { +func (s schemaContextStub) LookupSchemaByReference(ref string) (openapi.Schema, error) { userSchema := openapi.Schema{ Properties: openapi.Schemas{ "id": &openapi.Schema{