diff --git a/examples/petstore/controllers/pets_test.go b/examples/petstore/controllers/pets_test.go index 9ce05db6..13a877a7 100644 --- a/examples/petstore/controllers/pets_test.go +++ b/examples/petstore/controllers/pets_test.go @@ -24,6 +24,31 @@ func TestGetAllPets(t *testing.T) { }) } +func TestGenericController(t *testing.T) { + t.Run("generic controller - validation issue", func(t *testing.T) { + s := lib.NewPetStoreServer() + + w := httptest.NewRecorder() + r := httptest.NewRequest("POST", "/pets/generic-response", nil) + + s.Mux.ServeHTTP(w, r) + + require.Equal(t, http.StatusBadRequest, w.Code) + }) + + t.Run("generic controller - success", func(t *testing.T) { + s := lib.NewPetStoreServer() + + w := httptest.NewRecorder() + r := httptest.NewRequest("POST", "/pets/generic-response", strings.NewReader(`{"data": {"id": "1", "name": "Napoleon"}}`)) + + s.Mux.ServeHTTP(w, r) + + t.Log(w.Body.String()) + require.Equal(t, http.StatusOK, w.Code) + }) +} + func TestGetAllPetsStd(t *testing.T) { t.Run("can get all pets std", func(t *testing.T) { s := lib.NewPetStoreServer() diff --git a/openapi.go b/openapi.go index 8e97ca90..558afa37 100644 --- a/openapi.go +++ b/openapi.go @@ -311,11 +311,10 @@ func dive(openapi *OpenAPI, t reflect.Type, tag SchemaTag, maxDepth int) SchemaT return tag default: - tag.Name = t.Name() + tag.Name = transformTypeName(t.Name()) if t.Kind() == reflect.Struct && strings.HasPrefix(tag.Name, "DataOrTemplate") { return dive(openapi, t.Field(0).Type, tag, maxDepth-1) } - tag.Name = transformTypeName(tag.Name) tag.Ref = "#/components/schemas/" + tag.Name tag.Value = openapi.getOrCreateSchema(tag.Name, reflect.New(t).Interface())