github.com/6543-forks/go-swagger@v0.26.0/generator/response_test.go (about) 1 // Copyright 2015 go-swagger maintainers 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package generator 16 17 import ( 18 "bytes" 19 "fmt" 20 "io/ioutil" 21 "log" 22 "os" 23 "path/filepath" 24 "testing" 25 26 "github.com/go-openapi/spec" 27 "github.com/stretchr/testify/assert" 28 "github.com/stretchr/testify/require" 29 ) 30 31 func TestSimpleResponseRender(t *testing.T) { 32 b, err := opBuilder("updateTask", "../fixtures/codegen/todolist.responses.yml") 33 require.NoError(t, err) 34 35 op, err := b.MakeOperation() 36 require.NoError(t, err) 37 38 var buf bytes.Buffer 39 opts := opts() 40 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 41 42 ff, err := opts.LanguageOpts.FormatContent("update_task_responses.go", buf.Bytes()) 43 require.NoErrorf(t, err, buf.String()) 44 45 assertInCode(t, "o.XErrorCode", string(ff)) 46 assertInCode(t, "o.Payload", string(ff)) 47 } 48 49 func TestDefaultResponseRender(t *testing.T) { 50 b, err := opBuilder("getAllParameters", "../fixtures/codegen/todolist.responses.yml") 51 require.NoError(t, err) 52 53 op, err := b.MakeOperation() 54 require.NoError(t, err) 55 56 var buf bytes.Buffer 57 opts := opts() 58 require.NoError(t, templates.MustGet("clientResponse").Execute(&buf, op)) 59 60 ff, err := opts.LanguageOpts.FormatContent("get_all_parameters_responses.go", buf.Bytes()) 61 require.NoErrorf(t, err, buf.String()) 62 63 res := string(ff) 64 assertInCode(t, "type GetAllParametersDefault struct", res) 65 assertInCode(t, `if response.Code()/100 == 2`, res) 66 assertNotInCode(t, `switch response.Code()`, res) 67 assertNotInCode(t, "o.Payload", res) 68 } 69 70 func TestSimpleResponses(t *testing.T) { 71 b, err := opBuilder("updateTask", "../fixtures/codegen/todolist.responses.yml") 72 require.NoError(t, err) 73 74 _, _, op, ok := b.Analyzed.OperationForName("updateTask") 75 require.True(t, ok) 76 require.NotNil(t, op) 77 require.NotNil(t, op.Responses) 78 79 resolver := &typeResolver{ModelsPackage: b.ModelsPackage, Doc: b.Doc} 80 require.NotNil(t, op.Responses.Default) 81 82 resp, err := spec.ResolveResponse(b.Doc.Spec(), op.Responses.Default.Ref) 83 require.NoError(t, err) 84 85 defCtx := responseTestContext{ 86 OpID: "updateTask", 87 Name: "default", 88 } 89 res, err := b.MakeResponse("a", defCtx.Name, false, resolver, -1, *resp) 90 require.NoError(t, err) 91 92 defCtx.Require(t, *resp, res) 93 94 for code, response := range op.Responses.StatusCodeResponses { 95 sucCtx := responseTestContext{ 96 OpID: "updateTask", 97 Name: "success", 98 IsSuccess: code/100 == 2, 99 } 100 res, err := b.MakeResponse("a", sucCtx.Name, sucCtx.IsSuccess, resolver, code, response) 101 require.NoError(t, err) 102 sucCtx.Require(t, response, res) 103 } 104 } 105 106 func TestInlinedSchemaResponses(t *testing.T) { 107 b, err := opBuilder("getTasks", "../fixtures/codegen/todolist.responses.yml") 108 require.NoError(t, err) 109 110 _, _, op, ok := b.Analyzed.OperationForName("getTasks") 111 require.True(t, ok) 112 require.NotNil(t, op) 113 require.NotNil(t, op.Responses) 114 115 resolver := &typeResolver{ModelsPackage: b.ModelsPackage, Doc: b.Doc} 116 require.NotNil(t, op.Responses.Default) 117 118 resp := *op.Responses.Default 119 defCtx := responseTestContext{ 120 OpID: "getTasks", 121 Name: "default", 122 } 123 res, err := b.MakeResponse("a", defCtx.Name, false, resolver, -1, resp) 124 require.NoError(t, err) 125 126 defCtx.Require(t, resp, res) 127 128 for code, response := range op.Responses.StatusCodeResponses { 129 sucCtx := responseTestContext{ 130 OpID: "getTasks", 131 Name: "success", 132 IsSuccess: code/100 == 2, 133 } 134 res, err := b.MakeResponse("a", sucCtx.Name, sucCtx.IsSuccess, resolver, code, response) 135 require.NoError(t, err) 136 sucCtx.Require(t, response, res) 137 assert.Len(t, b.ExtraSchemas, 1) 138 // ExtraSchema is not a definition: it is rendered in current operations package 139 assert.Equal(t, "[]*SuccessBodyItems0", res.Schema.GoType) 140 } 141 } 142 143 type responseTestContext struct { 144 OpID string 145 Name string 146 IsSuccess bool 147 } 148 149 func (ctx *responseTestContext) Assert(t testing.TB, response spec.Response, res GenResponse) bool { 150 if !assert.Equal(t, ctx.IsSuccess, res.IsSuccess) { 151 return false 152 } 153 154 if !assert.Equal(t, ctx.Name, res.Name) { 155 return false 156 } 157 158 if !assert.Equal(t, response.Description, res.Description) { 159 return false 160 } 161 162 if len(response.Headers) > 0 { 163 for k, v := range response.Headers { 164 found := false 165 for _, h := range res.Headers { 166 if h.Name == k { 167 found = true 168 if k == "X-Last-Task-Id" { 169 hctx := &respHeaderTestContext{k, "swag.FormatInt64", "swag.ConvertInt64"} 170 if !hctx.Assert(t, v, h) { 171 return false 172 } 173 break 174 } 175 if k == "X-Error-Code" { 176 hctx := &respHeaderTestContext{k, "", ""} 177 if !hctx.Assert(t, v, h) { 178 return false 179 } 180 } 181 182 break 183 } 184 } 185 if !assert.True(t, found) { 186 return false 187 } 188 } 189 } 190 191 if response.Schema != nil { 192 if !assert.NotNil(t, res.Schema) { 193 return false 194 } 195 } else { 196 if !assert.Nil(t, res.Schema) { 197 return false 198 } 199 } 200 201 return true 202 } 203 204 func (ctx *responseTestContext) Require(t testing.TB, response spec.Response, res GenResponse) { 205 if !ctx.Assert(t, response, res) { 206 t.FailNow() 207 } 208 } 209 210 type respHeaderTestContext struct { 211 Name string 212 Formatter string 213 Converter string 214 } 215 216 func (ctx *respHeaderTestContext) Assert(t testing.TB, header spec.Header, hdr GenHeader) bool { 217 if !assert.Equal(t, ctx.Name, hdr.Name) { 218 return false 219 } 220 if !assert.Equal(t, "a", hdr.ReceiverName) { 221 return false 222 } 223 if !assert.Equal(t, ctx.Formatter, hdr.Formatter) { 224 return false 225 } 226 if !assert.Equal(t, ctx.Converter, hdr.Converter) { 227 return false 228 } 229 if !assert.Equal(t, header.Description, hdr.Description) { 230 return false 231 } 232 if !assert.Equal(t, header.Minimum, hdr.Minimum) || !assert.Equal(t, header.ExclusiveMinimum, hdr.ExclusiveMinimum) { 233 return false 234 } 235 if !assert.Equal(t, header.Maximum, hdr.Maximum) || !assert.Equal(t, header.ExclusiveMaximum, hdr.ExclusiveMaximum) { 236 return false 237 } 238 if !assert.Equal(t, header.MinLength, hdr.MinLength) { 239 return false 240 } 241 if !assert.Equal(t, header.MaxLength, hdr.MaxLength) { 242 return false 243 } 244 if !assert.Equal(t, header.Pattern, hdr.Pattern) { 245 return false 246 } 247 if !assert.Equal(t, header.MaxItems, hdr.MaxItems) { 248 return false 249 } 250 if !assert.Equal(t, header.MinItems, hdr.MinItems) { 251 return false 252 } 253 if !assert.Equal(t, header.UniqueItems, hdr.UniqueItems) { 254 return false 255 } 256 if !assert.Equal(t, header.MultipleOf, hdr.MultipleOf) { 257 return false 258 } 259 if !assert.EqualValues(t, header.Enum, hdr.Enum) { 260 return false 261 } 262 if !assert.Equal(t, header.Type, hdr.SwaggerType) { 263 return false 264 } 265 if !assert.Equal(t, header.Format, hdr.SwaggerFormat) { 266 return false 267 } 268 return true 269 } 270 271 func TestGenResponses_Issue540(t *testing.T) { 272 b, err := opBuilder("postPet", "../fixtures/bugs/540/swagger.yml") 273 require.NoError(t, err) 274 275 op, err := b.MakeOperation() 276 require.NoError(t, err) 277 278 var buf bytes.Buffer 279 opts := opts() 280 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 281 282 ff, err := opts.LanguageOpts.FormatContent("post_pet_responses.go", buf.Bytes()) 283 require.NoErrorf(t, err, buf.String()) 284 285 assertInCode(t, "func (o *PostPetOK) WithPayload(payload models.Pet) *PostPetOK {", string(ff)) 286 assertInCode(t, "func (o *PostPetOK) SetPayload(payload models.Pet) {", string(ff)) 287 } 288 289 func TestGenResponses_Issue718_NotRequired(t *testing.T) { 290 b, err := opBuilder("doEmpty", "../fixtures/codegen/todolist.simple.yml") 291 require.NoError(t, err) 292 293 op, err := b.MakeOperation() 294 require.NoError(t, err) 295 296 var buf bytes.Buffer 297 opts := opts() 298 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 299 300 ff, err := opts.LanguageOpts.FormatContent("do_empty_responses.go", buf.Bytes()) 301 require.NoErrorf(t, err, buf.String()) 302 303 assertInCode(t, "if payload == nil", string(ff)) 304 assertInCode(t, "payload = make([]models.Foo, 0, 50)", string(ff)) 305 } 306 307 func TestGenResponses_Issue718_Required(t *testing.T) { 308 b, err := opBuilder("doEmpty", "../fixtures/codegen/todolist.simple.yml") 309 require.NoError(t, err) 310 op, err := b.MakeOperation() 311 require.NoError(t, err) 312 var buf bytes.Buffer 313 opts := opts() 314 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 315 ff, err := opts.LanguageOpts.FormatContent("do_empty_responses.go", buf.Bytes()) 316 if err != nil { 317 fmt.Println(buf.String()) 318 } 319 require.NoError(t, err) 320 assertInCode(t, "if payload == nil", string(ff)) 321 assertInCode(t, "payload = make([]models.Foo, 0, 50)", string(ff)) 322 } 323 324 // Issue776 includes references that span multiple files. Flattening or Expanding is required 325 func TestGenResponses_Issue776_Spec(t *testing.T) { 326 log.SetOutput(ioutil.Discard) 327 defer func() { 328 log.SetOutput(os.Stdout) 329 }() 330 331 b, err := opBuilderWithFlatten("GetItem", "../fixtures/bugs/776/spec.yaml") 332 require.NoError(t, err) 333 op, err := b.MakeOperation() 334 require.NoError(t, err) 335 var buf bytes.Buffer 336 opts := opts() 337 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 338 ff, err := opts.LanguageOpts.FormatContent("do_empty_responses.go", buf.Bytes()) 339 if err != nil { 340 fmt.Println(buf.String()) 341 } 342 require.NoError(t, err) 343 // This should be models.Item if flat works correctly 344 assertInCode(t, "Payload *models.Item", string(ff)) 345 assertNotInCode(t, "type GetItemOKBody struct", string(ff)) 346 } 347 348 func TestGenResponses_Issue776_SwaggerTemplate(t *testing.T) { 349 //spec.Debug = true 350 log.SetOutput(ioutil.Discard) 351 defer func() { 352 log.SetOutput(os.Stdout) 353 //spec.Debug = false 354 }() 355 356 b, err := opBuilderWithFlatten("getHealthy", "../fixtures/bugs/776/swagger-template.yml") 357 require.NoError(t, err) 358 op, err := b.MakeOperation() 359 require.NoError(t, err) 360 var buf bytes.Buffer 361 opts := opts() 362 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 363 ff, err := opts.LanguageOpts.FormatContent("do_empty_responses.go", buf.Bytes()) 364 if err != nil { 365 fmt.Println(buf.String()) 366 } 367 require.NoError(t, err) 368 assertInCode(t, "Payload *models.Error", string(ff)) 369 } 370 371 func TestIssue846(t *testing.T) { 372 // do it 8 times, to ensure it's always in the same order 373 for i := 0; i < 8; i++ { 374 b, err := opBuilder("getFoo", "../fixtures/bugs/846/swagger.yml") 375 require.NoError(t, err) 376 op, err := b.MakeOperation() 377 require.NoError(t, err) 378 var buf bytes.Buffer 379 opts := opts() 380 require.NoError(t, templates.MustGet("clientResponse").Execute(&buf, op)) 381 ff, err := opts.LanguageOpts.FormatContent("do_empty_responses.go", buf.Bytes()) 382 if err != nil { 383 fmt.Println(buf.String()) 384 } 385 require.NoError(t, err) 386 // sorted by code 387 assert.Regexp(t, "(?s)"+ 388 "GetFooOK struct.+"+ 389 "GetFooNotFound struct.+"+ 390 "GetFooInternalServerError struct", string(ff)) 391 // sorted by name 392 assert.Regexp(t, "(?s)"+ 393 "GetFooInternalServerErrorBody struct.+"+ 394 "GetFooNotFoundBody struct.+"+ 395 "GetFooOKBody struct", string(ff)) 396 } 397 } 398 399 func TestIssue881(t *testing.T) { 400 b, err := opBuilder("getFoo", "../fixtures/bugs/881/swagger.yml") 401 require.NoError(t, err) 402 op, err := b.MakeOperation() 403 require.NoError(t, err) 404 var buf bytes.Buffer 405 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 406 } 407 408 func TestIssue881Deep(t *testing.T) { 409 b, err := opBuilder("getFoo", "../fixtures/bugs/881/deep.yml") 410 require.NoError(t, err) 411 op, err := b.MakeOperation() 412 require.NoError(t, err) 413 var buf bytes.Buffer 414 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 415 } 416 417 func TestGenResponses_XGoName(t *testing.T) { 418 b, err := opBuilder("putTesting", "../fixtures/specs/response_name.json") 419 require.NoError(t, err) 420 op, err := b.MakeOperation() 421 require.NoError(t, err) 422 var buf bytes.Buffer 423 opts := opts() 424 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 425 ff, err := opts.LanguageOpts.FormatContent("put_testing_responses.go", buf.Bytes()) 426 if err != nil { 427 fmt.Println(buf.String()) 428 } 429 require.NoError(t, err) 430 assertInCode(t, "const PutTestingAlternateNameCode int =", string(ff)) 431 assertInCode(t, "type PutTestingAlternateName struct {", string(ff)) 432 assertInCode(t, "func NewPutTestingAlternateName() *PutTestingAlternateName {", string(ff)) 433 assertInCode(t, "func (o *PutTestingAlternateName) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {", string(ff)) 434 } 435 436 func TestGenResponses_Issue892(t *testing.T) { 437 b, err := methodPathOpBuilder("get", "/media/search", "../fixtures/bugs/982/swagger.yaml") 438 require.NoError(t, err) 439 440 op, err := b.MakeOperation() 441 require.NoError(t, err) 442 443 var buf bytes.Buffer 444 opts := opts() 445 require.NoError(t, templates.MustGet("clientResponse").Execute(&buf, op)) 446 447 ff, err := opts.LanguageOpts.FormatContent("get_media_search_responses.go", buf.Bytes()) 448 require.NoErrorf(t, err, buf.String()) 449 450 assertInCode(t, "o.Media = aO0", string(ff)) 451 } 452 453 func TestGenResponses_Issue1013(t *testing.T) { 454 b, err := methodPathOpBuilder("get", "/test", "../fixtures/bugs/1013/fixture-1013.yaml") 455 require.NoError(t, err) 456 457 op, err := b.MakeOperation() 458 require.NoError(t, err) 459 460 var buf bytes.Buffer 461 opt := opts() 462 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 463 464 ff, err := opt.LanguageOpts.FormatContent("foo.go", buf.Bytes()) 465 require.NoErrorf(t, err, buf.String()) 466 assertInCode(t, "Payload *models.Response `json:\"body,omitempty\"`", string(ff)) 467 468 buf.Reset() 469 b, err = methodPathOpBuilder("get", "/test2", "../fixtures/bugs/1013/fixture-1013.yaml") 470 require.NoError(t, err) 471 472 op, err = b.MakeOperation() 473 require.NoError(t, err) 474 475 opt = opts() 476 require.NoError(t, templates.MustGet("serverResponses").Execute(&buf, op)) 477 ff, err = opt.LanguageOpts.FormatContent("foo.go", buf.Bytes()) 478 require.NoErrorf(t, err, buf.String()) 479 assertInCode(t, "Payload *models.Response `json:\"body,omitempty\"`", string(ff)) 480 } 481 482 func TestGenResponse_15362_WithExpand(t *testing.T) { 483 log.SetOutput(ioutil.Discard) 484 defer func() { 485 log.SetOutput(os.Stdout) 486 }() 487 488 fixtureConfig := map[string]map[string][]string{ 489 // load expectations for parameters in operation get_nested_required_responses.go 490 "getNestedRequired": { // fixture index 491 "serverResponses": { // executed template 492 // expected code lines 493 `const GetNestedRequiredOKCode int = 200`, 494 `type GetNestedRequiredOK struct {`, 495 " Payload [][][][]*GetNestedRequiredOKBodyItems0 `json:\"body,omitempty\"`", 496 `func NewGetNestedRequiredOK() *GetNestedRequiredOK {`, 497 ` return &GetNestedRequiredOK{`, 498 `func (o *GetNestedRequiredOK) WithPayload(payload [][][][]*GetNestedRequiredOKBodyItems0) *GetNestedRequiredOK {`, 499 `func (o *GetNestedRequiredOK) SetPayload(payload [][][][]*GetNestedRequiredOKBodyItems0) {`, 500 `func (o *GetNestedRequiredOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {`, 501 }, 502 "serverOperation": { // executed template 503 // expected code lines 504 `type GetNestedRequiredOKBodyItems0 struct {`, 505 " Pkcs *string `json:\"pkcs\"`", 506 `func (o *GetNestedRequiredOKBodyItems0) Validate(formats strfmt.Registry) error {`, 507 ` if err := o.validatePkcs(formats); err != nil {`, 508 ` return errors.CompositeValidationError(res...`, 509 `func (o *GetNestedRequiredOKBodyItems0) validatePkcs(formats strfmt.Registry) error {`, 510 ` if err := validate.Required("pkcs", "body", o.Pkcs); err != nil {`, 511 }, 512 }, 513 } 514 515 // assertParams also works for responses 516 assertParams(t, fixtureConfig, filepath.Join("..", "fixtures", "bugs", "1536", "fixture-1536-2-responses.yaml"), true, false) 517 } 518 519 func TestGenResponse_1572(t *testing.T) { 520 log.SetOutput(ioutil.Discard) 521 defer func() { 522 log.SetOutput(os.Stdout) 523 }() 524 525 // testing fixture-1572.yaml with minimal flatten 526 // edge cases for operations schemas 527 528 /* 529 Run the following test caes and exercise the minimal flatten mode: 530 - [x] nil schema in body param / response 531 - [x] interface{} in body param /response 532 - [x] additional schema reused from model (body param and response) (with maps or arrays) 533 - [x] primitive body / response 534 - [x] $ref'ed response and param (check that minimal flatten expands it) 535 536 */ 537 538 fixtureConfig := map[string]map[string][]string{ 539 540 // load expectations for responses in operation get_interface_responses.go 541 "getInterface": { // fixture index 542 "serverResponses": { // executed template 543 // expected code lines 544 `const GetInterfaceOKCode int = 200`, 545 `type GetInterfaceOK struct {`, 546 " Payload interface{} `json:\"body,omitempty\"`", 547 `func NewGetInterfaceOK() *GetInterfaceOK {`, 548 ` return &GetInterfaceOK{`, 549 `func (o *GetInterfaceOK) WithPayload(payload interface{}) *GetInterfaceOK {`, 550 ` o.Payload = payload`, 551 ` return o`, 552 `func (o *GetInterfaceOK) SetPayload(payload interface{}) {`, 553 ` o.Payload = payload`, 554 `func (o *GetInterfaceOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {`, 555 ` rw.WriteHeader(200`, 556 ` payload := o.Payload`, 557 ` if err := producer.Produce(rw, payload); err != nil {`, 558 }, 559 }, 560 561 // load expectations for responses in operation get_primitive_responses.go 562 "getPrimitive": { // fixture index 563 "serverResponses": { // executed template 564 // expected code lines 565 `const GetPrimitiveOKCode int = 200`, 566 `type GetPrimitiveOK struct {`, 567 " Payload float32 `json:\"body,omitempty\"`", 568 `func NewGetPrimitiveOK() *GetPrimitiveOK {`, 569 ` return &GetPrimitiveOK{`, 570 `func (o *GetPrimitiveOK) WithPayload(payload float32) *GetPrimitiveOK {`, 571 ` o.Payload = payload`, 572 ` return o`, 573 `func (o *GetPrimitiveOK) SetPayload(payload float32) {`, 574 ` o.Payload = payload`, 575 `func (o *GetPrimitiveOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {`, 576 ` rw.WriteHeader(200`, 577 ` payload := o.Payload`, 578 ` if err := producer.Produce(rw, payload); err != nil {`, 579 }, 580 }, 581 582 // load expectations for responses in operation get_null_responses.go 583 "getNull": { // fixture index 584 "serverResponses": { // executed template 585 // expected code lines 586 `const GetNullOKCode int = 200`, 587 `type GetNullOK struct {`, 588 " Payload interface{} `json:\"body,omitempty\"`", 589 `func NewGetNullOK() *GetNullOK {`, 590 ` return &GetNullOK{`, 591 `func (o *GetNullOK) WithPayload(payload interface{}) *GetNullOK {`, 592 ` o.Payload = payload`, 593 ` return o`, 594 `func (o *GetNullOK) SetPayload(payload interface{}) {`, 595 ` o.Payload = payload`, 596 `func (o *GetNullOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {`, 597 ` rw.WriteHeader(200`, 598 ` payload := o.Payload`, 599 ` if err := producer.Produce(rw, payload); err != nil {`, 600 `const GetNullRequestProcessedCode int = 203`, 601 `/*GetNullRequestProcessed OK`, 602 `swagger:response getNullRequestProcessed`, 603 `*/`, 604 `type GetNullRequestProcessed struct {`, 605 `func NewGetNullRequestProcessed() *GetNullRequestProcessed {`, 606 ` return &GetNullRequestProcessed{`, 607 `func (o *GetNullRequestProcessed) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {`, 608 ` rw.Header().Del(runtime.HeaderContentType`, 609 ` rw.WriteHeader(203`, 610 }, 611 }, 612 613 // load expectations for responses in operation get_model_interface_responses.go 614 "getModelInterface": { // fixture index 615 "serverResponses": { // executed template 616 // expected code lines 617 `const GetModelInterfaceOKCode int = 200`, 618 `type GetModelInterfaceOK struct {`, 619 " Payload []models.ModelInterface `json:\"body,omitempty\"`", 620 `func NewGetModelInterfaceOK() *GetModelInterfaceOK {`, 621 ` return &GetModelInterfaceOK{`, 622 `func (o *GetModelInterfaceOK) WithPayload(payload []models.ModelInterface) *GetModelInterfaceOK {`, 623 ` o.Payload = payload`, 624 ` return o`, 625 `func (o *GetModelInterfaceOK) SetPayload(payload []models.ModelInterface) {`, 626 ` o.Payload = payload`, 627 `func (o *GetModelInterfaceOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {`, 628 ` rw.WriteHeader(200`, 629 ` payload := o.Payload`, 630 ` if payload == nil {`, 631 ` payload = make([]models.ModelInterface, 0, 50`, 632 ` if err := producer.Produce(rw, payload); err != nil {`, 633 }, 634 }, 635 } 636 637 // assertParams also works for responses 638 assertParams(t, fixtureConfig, filepath.Join("..", "fixtures", "enhancements", "1572", "fixture-1572.yaml"), true, false) 639 } 640 641 func TestGenResponse_1893(t *testing.T) { 642 log.SetOutput(ioutil.Discard) 643 defer func() { 644 log.SetOutput(os.Stdout) 645 }() 646 647 fixtureConfig := map[string]map[string][]string{ 648 // load expectations for parameters in operation get_nested_required_responses.go 649 "getRecords": { // fixture index 650 "clientResponse": { // executed template 651 // expected code lines 652 `type GetRecordsStatus512 struct {`, 653 `type GetRecordsStatus515 struct {`, 654 }, 655 "serverResponses": { // executed template 656 // expected code lines 657 `type GetRecordsStatus512 struct {`, 658 `type GetRecordsStatus515 struct {`, 659 }, 660 }, 661 } 662 // assertParams also works for responses 663 assertParams(t, fixtureConfig, filepath.Join("..", "fixtures", "bugs", "1893", "fixture-1893.yaml"), true, false) 664 }