github.com/ffalor/go-swagger@v0.0.0-20231011000038-9f25265ac351/generator/client_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 "log" 19 "os" 20 "path/filepath" 21 "strconv" 22 "strings" 23 "testing" 24 25 "github.com/stretchr/testify/assert" 26 "github.com/stretchr/testify/require" 27 ) 28 29 const ( 30 basicFixture = "../fixtures/petstores/petstore.json" 31 ) 32 33 func testClientGenOpts() *GenOpts { 34 g := &GenOpts{} 35 g.Target = "." 36 g.APIPackage = defaultAPIPackage 37 g.ModelPackage = defaultModelPackage 38 g.ServerPackage = defaultServerPackage 39 g.ClientPackage = defaultClientPackage 40 g.Principal = "" 41 g.IncludeModel = true 42 g.IncludeHandler = true 43 g.IncludeParameters = true 44 g.IncludeResponses = true 45 g.IncludeSupport = true 46 g.TemplateDir = "" 47 g.DumpData = false 48 g.IsClient = true 49 if err := g.EnsureDefaults(); err != nil { 50 panic(err) 51 } 52 return g 53 } 54 55 func Test_GenerateClient(t *testing.T) { 56 t.Parallel() 57 defer discardOutput()() 58 59 // exercise safeguards 60 err := GenerateClient("test", []string{"model1"}, []string{"op1", "op2"}, nil) 61 assert.Error(t, err) 62 63 opts := testClientGenOpts() 64 opts.TemplateDir = "dir/nowhere" 65 err = GenerateClient("test", []string{"model1"}, []string{"op1", "op2"}, opts) 66 assert.Error(t, err) 67 68 opts = testClientGenOpts() 69 opts.TemplateDir = "http://nowhere.com" 70 err = GenerateClient("test", []string{"model1"}, []string{"op1", "op2"}, opts) 71 assert.Error(t, err) 72 73 opts = testClientGenOpts() 74 opts.Spec = "dir/nowhere.yaml" 75 err = GenerateClient("test", []string{"model1"}, []string{"op1", "op2"}, opts) 76 assert.Error(t, err) 77 78 opts = testClientGenOpts() 79 opts.Spec = basicFixture 80 err = GenerateClient("test", []string{"model1"}, []string{}, opts) 81 assert.Error(t, err) 82 83 opts = testClientGenOpts() 84 // bad content in spec (HTML...) 85 opts.Spec = "https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v2.0/json/petstore.json" 86 err = GenerateClient("test", []string{}, []string{}, opts) 87 assert.Error(t, err) 88 89 opts = testClientGenOpts() 90 // no operations selected 91 opts.Spec = "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v2.0/yaml/petstore.yaml" 92 err = GenerateClient("test", []string{}, []string{"wrongOperationID"}, opts) 93 assert.Error(t, err) 94 95 opts = testClientGenOpts() 96 // generate remote spec 97 opts.Spec = "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v2.0/yaml/petstore.yaml" 98 cwd, _ := os.Getwd() 99 tft, _ := os.MkdirTemp(cwd, "generated") 100 defer func() { 101 _ = os.RemoveAll(tft) 102 }() 103 opts.Target = tft 104 opts.IsClient = true 105 DefaultSectionOpts(opts) 106 107 defer func() { 108 _ = os.RemoveAll(opts.Target) 109 }() 110 err = GenerateClient("test", []string{}, []string{}, opts) 111 assert.NoError(t, err) 112 113 // just checks this does not fail 114 origStdout := os.Stdout 115 defer func() { 116 os.Stdout = origStdout 117 }() 118 tgt, _ := os.MkdirTemp(cwd, "dumped") 119 defer func() { 120 _ = os.RemoveAll(tgt) 121 }() 122 os.Stdout, _ = os.Create(filepath.Join(tgt, "stdout")) 123 opts.DumpData = true 124 err = GenerateClient("test", []string{}, []string{}, opts) 125 assert.NoError(t, err) 126 _, err = os.Stat(filepath.Join(tgt, "stdout")) 127 assert.NoError(t, err) 128 } 129 130 func assertImports(t testing.TB, baseImport, code string) { 131 assertRegexpInCode(t, baseImport, code) 132 assertRegexpInCode(t, `"`+baseImport+`/abc_linux"`, code) 133 assertRegexpInCode(t, `"`+baseImport+`/abc_linux"`, code) 134 assertRegexpInCode(t, `"`+baseImport+`/abc_test"`, code) 135 assertRegexpInCode(t, `apiops\s+"`+baseImport+`/api"`, code) 136 assertRegexpInCode(t, `"`+baseImport+`/custom"`, code) 137 assertRegexpInCode(t, `"`+baseImport+`/hash_tag_donuts"`, code) 138 assertRegexpInCode(t, `"`+baseImport+`/nr123abc"`, code) 139 assertRegexpInCode(t, `"`+baseImport+`/nr_at_donuts"`, code) 140 assertRegexpInCode(t, `"`+baseImport+`/plus_donuts`, code) 141 assertRegexpInCode(t, `strfmtops "`+baseImport+`/strfmt`, code) 142 assertRegexpInCode(t, `"`+baseImport+`/forced`, code) 143 assertRegexpInCode(t, `"`+baseImport+`/nr12nasty`, code) 144 assertRegexpInCode(t, `"`+baseImport+`/override`, code) 145 assertRegexpInCode(t, `"`+baseImport+`/gtl`, code) 146 assertRegexpInCode(t, `"`+baseImport+`/operationsops`, code) 147 } 148 149 func TestClient(t *testing.T) { 150 t.Parallel() 151 defer discardOutput()() 152 153 base := os.Getenv("GOPATH") 154 if base == "" { 155 base = "." 156 } else { 157 base = filepath.Join(base, "src") 158 err := os.MkdirAll(base, 0755) 159 require.NoError(t, err) 160 } 161 targetdir, err := os.MkdirTemp(base, "swagger_nogo") 162 require.NoError(t, err, "Failed to create a test target directory: %v", err) 163 164 defer func() { 165 _ = os.RemoveAll(targetdir) 166 log.SetOutput(os.Stdout) 167 }() 168 169 tests := []struct { 170 name string 171 spec string 172 template string 173 wantError bool 174 prepare func(opts *GenOpts) 175 verify func(testing.TB, string) 176 }{ 177 { 178 name: "InvalidSpec", 179 wantError: true, 180 prepare: func(opts *GenOpts) { 181 opts.Spec = invalidSpecExample 182 opts.ValidateSpec = true 183 }, 184 }, 185 { 186 name: "BaseImportDisabled", 187 prepare: func(opts *GenOpts) { 188 opts.LanguageOpts.BaseImportFunc = nil 189 }, 190 wantError: false, 191 }, 192 { 193 name: "Non_existing_contributor_template", 194 template: "NonExistingContributorTemplate", 195 wantError: true, 196 }, 197 { 198 name: "Existing_contributor", 199 template: "stratoscale", 200 wantError: false, 201 }, 202 { 203 name: "packages mangling", 204 wantError: false, 205 spec: filepath.Join("..", "fixtures", "bugs", "2111", "fixture-2111.yaml"), 206 verify: func(t testing.TB, target string) { 207 require.True(t, fileExists(target, "client")) 208 209 // assert package generation based on mangled tags 210 target = filepath.Join(target, "client") 211 assert.True(t, fileExists(target, "abc_linux")) 212 assert.True(t, fileExists(target, "abc_test")) 213 assert.True(t, fileExists(target, "api")) 214 assert.True(t, fileExists(target, "custom")) 215 assert.True(t, fileExists(target, "hash_tag_donuts")) 216 assert.True(t, fileExists(target, "nr123abc")) 217 assert.True(t, fileExists(target, "nr_at_donuts")) 218 assert.True(t, fileExists(target, "operations")) 219 assert.True(t, fileExists(target, "plus_donuts")) 220 assert.True(t, fileExists(target, "strfmt")) 221 assert.True(t, fileExists(target, "forced")) 222 assert.True(t, fileExists(target, "gtl")) 223 assert.True(t, fileExists(target, "nr12nasty")) 224 assert.True(t, fileExists(target, "override")) 225 assert.True(t, fileExists(target, "operationsops")) 226 227 buf, err := os.ReadFile(filepath.Join(target, "foo_client.go")) 228 require.NoError(t, err) 229 230 // assert client import, with deconfliction 231 code := string(buf) 232 baseImport := `github.com/ffalor/go-swagger/generator/swagger_nogo\d+/packages_mangling/client` 233 assertImports(t, baseImport, code) 234 235 assertInCode(t, `cli.Strfmt = strfmtops.New(transport, formats)`, code) 236 assertInCode(t, `cli.API = apiops.New(transport, formats)`, code) 237 assertInCode(t, `cli.Operations = operations.New(transport, formats)`, code) 238 }, 239 }, 240 { 241 name: "packages flattening", 242 wantError: false, 243 spec: filepath.Join("..", "fixtures", "bugs", "2111", "fixture-2111.yaml"), 244 prepare: func(opts *GenOpts) { 245 opts.SkipTagPackages = true 246 }, 247 verify: func(t testing.TB, target string) { 248 require.True(t, fileExists(target, "client")) 249 250 // packages are not created here 251 target = filepath.Join(target, "client") 252 assert.False(t, fileExists(target, "abc_linux")) 253 assert.False(t, fileExists(target, "abc_test")) 254 assert.False(t, fileExists(target, "api")) 255 assert.False(t, fileExists(target, "custom")) 256 assert.False(t, fileExists(target, "hash_tag_donuts")) 257 assert.False(t, fileExists(target, "nr123abc")) 258 assert.False(t, fileExists(target, "nr_at_donuts")) 259 assert.False(t, fileExists(target, "plus_donuts")) 260 assert.False(t, fileExists(target, "strfmt")) 261 assert.False(t, fileExists(target, "forced")) 262 assert.False(t, fileExists(target, "gtl")) 263 assert.False(t, fileExists(target, "nr12nasty")) 264 assert.False(t, fileExists(target, "override")) 265 assert.False(t, fileExists(target, "operationsops")) 266 267 assert.True(t, fileExists(target, "operations")) 268 }, 269 }, 270 { 271 name: "name with trailing API", 272 spec: filepath.Join("..", "fixtures", "bugs", "2278", "fixture-2278.yaml"), 273 wantError: false, 274 }, 275 } 276 277 t.Run("generate client", func(t *testing.T) { 278 for idx, toPin := range tests { 279 tt := toPin 280 i := idx 281 t.Run(tt.name, func(t *testing.T) { 282 t.Parallel() 283 opts := testClientGenOpts() 284 opts.Spec = basicFixture 285 opts.Target = filepath.Join(targetdir, opts.LanguageOpts.ManglePackageName(tt.name, "client_test"+strconv.Itoa(i))) 286 err := os.MkdirAll(opts.Target, 0755) 287 require.NoError(t, err) 288 289 if tt.spec == "" { 290 opts.Spec = basicFixture 291 } else { 292 opts.Spec = tt.spec 293 } 294 opts.Template = tt.template 295 296 if tt.prepare != nil { 297 tt.prepare(opts) 298 } 299 300 err = GenerateClient("foo", nil, nil, opts) 301 if tt.wantError { 302 require.Errorf(t, err, "expected an error for client build fixture: %s", opts.Spec) 303 } else { 304 require.NoError(t, err, "unexpected error for client build fixture: %s", opts.Spec) 305 } 306 307 if tt.verify != nil { 308 tt.verify(t, opts.Target) 309 } 310 }) 311 } 312 }) 313 } 314 315 func TestGenClient_1518(t *testing.T) { 316 t.Parallel() 317 defer discardOutput()() 318 319 // test client response handling when unexpected success response kicks in 320 321 opts := testClientGenOpts() 322 opts.Spec = filepath.Join("..", "fixtures", "bugs", "1518", "fixture-1518.yaml") 323 324 cwd, _ := os.Getwd() 325 tft, _ := os.MkdirTemp(cwd, "generated") 326 opts.Target = tft 327 328 defer func() { 329 _ = os.RemoveAll(tft) 330 }() 331 332 err := GenerateClient("client", []string{}, []string{}, opts) 333 require.NoError(t, err) 334 335 fixtureConfig := map[string][]string{ 336 "client/operations/operations_client.go": { // generated file 337 // expected code lines 338 `success, ok := result.(*GetRecords1OK)`, 339 `if ok {`, 340 `return success, nil`, 341 `msg := fmt.Sprintf(`, 342 `panic(msg)`, 343 // expected code lines 344 `success, ok := result.(*GetRecords2OK)`, 345 `if ok {`, 346 `return success, nil`, 347 `unexpectedSuccess := result.(*GetRecords2Default)`, 348 `return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code())`, 349 // expected code lines 350 `switch value := result.(type) {`, 351 `case *GetRecords3OK:`, 352 `return value, nil, nil`, 353 `case *GetRecords3Created:`, 354 `return nil, value, nil`, 355 `msg := fmt.Sprintf(`, 356 `panic(msg)`, 357 // expected code lines 358 `switch value := result.(type) {`, 359 `case *GetRecords4OK:`, 360 `return value, nil, nil`, 361 `case *GetRecords4Created:`, 362 `return nil, value, nil`, 363 `unexpectedSuccess := result.(*GetRecords4Default)`, 364 `return nil, nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code())`, 365 }, 366 } 367 368 for fileToInspect, expectedCode := range fixtureConfig { 369 code, err := os.ReadFile(filepath.Join(opts.Target, filepath.FromSlash(fileToInspect))) 370 require.NoError(t, err) 371 372 for line, codeLine := range expectedCode { 373 if !assertInCode(t, strings.TrimSpace(codeLine), string(code)) { 374 t.Logf("Code expected did not match in codegenfile %s for expected line %d: %q", fileToInspect, line, expectedCode[line]) 375 } 376 } 377 } 378 } 379 380 func TestGenClient_2945(t *testing.T) { 381 t.Parallel() 382 defer discardOutput()() 383 384 opts := testClientGenOpts() 385 opts.Spec = filepath.Join("..", "fixtures", "bugs", "2945", "fixture-2945.yaml") 386 387 cwd, _ := os.Getwd() 388 tft, _ := os.MkdirTemp(cwd, "generated") 389 opts.Target = tft 390 391 defer func() { 392 _ = os.RemoveAll(tft) 393 }() 394 395 err := GenerateClient("client", []string{}, []string{}, opts) 396 require.NoError(t, err) 397 398 fixtureConfig := map[string][]string{ 399 "client/operations/get_version_responses.go": { // generated file 400 // expected code lines 401 `return nil, runtime.NewAPIError("[GET /version] getVersion", response, response.Code())`, 402 }, 403 } 404 405 for fileToInspect, expectedCode := range fixtureConfig { 406 code, err := os.ReadFile(filepath.Join(opts.Target, filepath.FromSlash(fileToInspect))) 407 require.NoError(t, err) 408 409 for line, codeLine := range expectedCode { 410 if !assertInCode(t, strings.TrimSpace(codeLine), string(code)) { 411 t.Logf("Code expected did not match in codegenfile %s for expected line %d: %q", fileToInspect, line, expectedCode[line]) 412 } 413 } 414 } 415 } 416 417 func TestGenClient_2471(t *testing.T) { 418 t.Parallel() 419 defer discardOutput()() 420 421 opts := testClientGenOpts() 422 opts.Spec = filepath.Join("..", "fixtures", "bugs", "2471", "fixture-2471.yaml") 423 424 cwd, _ := os.Getwd() 425 tft, _ := os.MkdirTemp(cwd, "generated") 426 opts.Target = tft 427 428 defer func() { 429 _ = os.RemoveAll(tft) 430 }() 431 432 err := GenerateClient("client", []string{}, []string{}, opts) 433 require.NoError(t, err) 434 435 fixtureConfig := map[string][]string{ 436 "client/operations/example_post_parameters.go": { // generated file 437 `func (o *ExamplePostParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error {`, 438 ` if err := r.SetTimeout(o.timeout); err != nil {`, 439 ` joinedFoo := o.bindParamFoo(reg)`, 440 ` if len(joinedFoo) > 0 {`, 441 ` if err := r.SetHeaderParam("Foo", joinedFoo[0]); err != nil {`, 442 ` joinedFooPath := o.bindParamFooPath(reg)`, 443 ` if len(joinedFooPath) > 0 {`, 444 ` if err := r.SetPathParam("FooPath", joinedFooPath[0]); err != nil {`, 445 ` joinedFooQuery := o.bindParamFooQuery(reg)`, 446 ` if err := r.SetQueryParam("FooQuery", joinedFooQuery...); err != nil {`, 447 `func (o *ExamplePostParams) bindParamFoo(formats strfmt.Registry) []string {`, 448 ` fooIR := o.Foo`, 449 ` var fooIC []string`, 450 ` for _, fooIIR := range fooIR {`, 451 ` fooIIV := fooIIR`, 452 ` fooIC = append(fooIC, fooIIV)`, 453 ` fooIS := swag.JoinByFormat(fooIC, "")`, 454 ` return fooIS`, 455 `func (o *ExamplePostParams) bindParamFooPath(formats strfmt.Registry) []string {`, 456 ` fooPathIR := o.FooPath`, 457 ` var fooPathIC []string`, 458 ` for _, fooPathIIR := range fooPathIR {`, 459 ` fooPathIIV := fooPathIIR`, 460 ` fooPathIC = append(fooPathIC, fooPathIIV)`, 461 ` fooPathIS := swag.JoinByFormat(fooPathIC, "")`, 462 ` return fooPathIS`, 463 `func (o *ExamplePostParams) bindParamFooQuery(formats strfmt.Registry) []string {`, 464 ` fooQueryIR := o.FooQuery`, 465 ` var fooQueryIC []string`, 466 ` for _, fooQueryIIR := range fooQueryIR {`, 467 ` fooQueryIIV := fooQueryIIR`, 468 ` fooQueryIC = append(fooQueryIC, fooQueryIIV)`, 469 ` fooQueryIS := swag.JoinByFormat(fooQueryIC, "")`, 470 ` return fooQueryIS`, 471 }, 472 } 473 474 for fileToInspect, expectedCode := range fixtureConfig { 475 code, err := os.ReadFile(filepath.Join(opts.Target, filepath.FromSlash(fileToInspect))) 476 require.NoError(t, err) 477 478 for line, codeLine := range expectedCode { 479 if !assertInCode(t, strings.TrimSpace(codeLine), string(code)) { 480 t.Logf("Code expected did not match in codegenfile %s for expected line %d: %q", fileToInspect, line, expectedCode[line]) 481 } 482 } 483 } 484 } 485 486 func TestGenClient_2096(t *testing.T) { 487 t.Parallel() 488 defer discardOutput()() 489 490 opts := testClientGenOpts() 491 opts.Spec = filepath.Join("..", "fixtures", "bugs", "2096", "fixture-2096.yaml") 492 493 cwd, _ := os.Getwd() 494 tft, _ := os.MkdirTemp(cwd, "generated") 495 opts.Target = tft 496 497 defer func() { 498 _ = os.RemoveAll(tft) 499 }() 500 501 err := GenerateClient("client", []string{}, []string{}, opts) 502 require.NoError(t, err) 503 504 fixtureConfig := map[string][]string{ 505 "client/operations/list_resources_parameters.go": { // generated file 506 `type ListResourcesParams struct {`, 507 ` Fields []string`, 508 `func (o *ListResourcesParams) SetDefaults() {`, 509 ` var (`, 510 ` fieldsDefault = []string{"first", "second", "third"}`, 511 ` val := ListResourcesParams{`, 512 ` Fields: fieldsDefault,`, 513 ` val.timeout = o.timeout`, 514 ` val.Context = o.Context`, 515 ` val.HTTPClient = o.HTTPClient`, 516 ` *o = val`, 517 ` joinedFields := o.bindParamFields(reg)`, 518 ` if err := r.SetQueryParam("fields", joinedFields...); err != nil {`, 519 }, 520 } 521 522 for fileToInspect, expectedCode := range fixtureConfig { 523 code, err := os.ReadFile(filepath.Join(opts.Target, filepath.FromSlash(fileToInspect))) 524 require.NoError(t, err) 525 526 for line, codeLine := range expectedCode { 527 if !assertInCode(t, strings.TrimSpace(codeLine), string(code)) { 528 t.Logf("Code expected did not match in codegenfile %s for expected line %d: %q", fileToInspect, line, expectedCode[line]) 529 } 530 } 531 } 532 } 533 534 func TestGenClient_909_3(t *testing.T) { 535 t.Parallel() 536 defer discardOutput()() 537 538 opts := testClientGenOpts() 539 opts.Spec = filepath.Join("..", "fixtures", "bugs", "909", "fixture-909-3.yaml") 540 541 cwd, _ := os.Getwd() 542 tft, _ := os.MkdirTemp(cwd, "generated") 543 opts.Target = tft 544 545 defer func() { 546 _ = os.RemoveAll(tft) 547 }() 548 549 err := GenerateClient("client", []string{}, []string{}, opts) 550 require.NoError(t, err) 551 552 fixtureConfig := map[string][]string{ 553 "client/operations/get_optional_parameters.go": { // generated file 554 `func (o *GetOptionalParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error {`, 555 ` if err := r.SetTimeout(o.timeout); err != nil {`, 556 ` if o.IsAnOption2 != nil {`, 557 ` joinedIsAnOption2 := o.bindParamIsAnOption2(reg)`, 558 ` if err := r.SetQueryParam("isAnOption2", joinedIsAnOption2...); err != nil {`, 559 ` if o.IsAnOption4 != nil {`, 560 ` joinedIsAnOption4 := o.bindParamIsAnOption4(reg)`, 561 ` if err := r.SetQueryParam("isAnOption4", joinedIsAnOption4...); err != nil {`, 562 ` if o.IsAnOptionalHeader != nil {`, 563 ` joinedIsAnOptionalHeader := o.bindParamIsAnOptionalHeader(reg)`, 564 ` if len(joinedIsAnOptionalHeader) > 0 {`, 565 ` if err := r.SetHeaderParam("isAnOptionalHeader", joinedIsAnOptionalHeader[0]); err != nil {`, 566 ` if o.NotAnOption1 != nil {`, 567 ` joinedNotAnOption1 := o.bindParamNotAnOption1(reg)`, 568 ` if err := r.SetQueryParam("notAnOption1", joinedNotAnOption1...); err != nil {`, 569 ` if o.NotAnOption3 != nil {`, 570 ` if err := r.SetBodyParam(o.NotAnOption3); err != nil {`, 571 `func (o *GetOptionalParams) bindParamIsAnOption2(formats strfmt.Registry) []string {`, 572 ` isAnOption2IR := o.IsAnOption2`, 573 ` var isAnOption2IC []string`, 574 ` for _, isAnOption2IIR := range isAnOption2IR { // explode [][]strfmt.UUID`, 575 ` var isAnOption2IIC []string`, 576 ` for _, isAnOption2IIIR := range isAnOption2IIR { // explode []strfmt.UUID`, 577 ` isAnOption2IIIV := isAnOption2IIIR.String() // strfmt.UUID as string`, 578 ` isAnOption2IIC = append(isAnOption2IIC, isAnOption2IIIV)`, 579 ` isAnOption2IIS := swag.JoinByFormat(isAnOption2IIC, "")`, 580 ` isAnOption2IIV := isAnOption2IIS[0]`, 581 ` isAnOption2IC = append(isAnOption2IC, isAnOption2IIV)`, 582 ` isAnOption2IS := swag.JoinByFormat(isAnOption2IC, "pipes")`, 583 ` return isAnOption2IS`, 584 `func (o *GetOptionalParams) bindParamIsAnOption4(formats strfmt.Registry) []string {`, 585 ` isAnOption4IR := o.IsAnOption4`, 586 ` var isAnOption4IC []string`, 587 ` for _, isAnOption4IIR := range isAnOption4IR { // explode [][][]strfmt.UUID`, 588 ` var isAnOption4IIC []string`, 589 ` for _, isAnOption4IIIR := range isAnOption4IIR { // explode [][]strfmt.UUID`, 590 ` var isAnOption4IIIC []string`, 591 ` for _, isAnOption4IIIIR := range isAnOption4IIIR { // explode []strfmt.UUID`, 592 ` isAnOption4IIIIV := isAnOption4IIIIR.String() // strfmt.UUID as string`, 593 ` isAnOption4IIIC = append(isAnOption4IIIC, isAnOption4IIIIV)`, 594 ` isAnOption4IIIS := swag.JoinByFormat(isAnOption4IIIC, "pipes")`, 595 ` isAnOption4IIIV := isAnOption4IIIS[0]`, 596 ` isAnOption4IIC = append(isAnOption4IIC, isAnOption4IIIV)`, 597 ` }`, 598 ` isAnOption4IIS := swag.JoinByFormat(isAnOption4IIC, "tsv")`, 599 ` isAnOption4IIV := isAnOption4IIS[0]`, 600 ` isAnOption4IC = append(isAnOption4IC, isAnOption4IIV)`, 601 ` isAnOption4IS := swag.JoinByFormat(isAnOption4IC, "csv")`, 602 ` return isAnOption4IS`, 603 `func (o *GetOptionalParams) bindParamIsAnOptionalHeader(formats strfmt.Registry) []string {`, 604 ` isAnOptionalHeaderIR := o.IsAnOptionalHeader`, 605 ` var isAnOptionalHeaderIC []string`, 606 ` for _, isAnOptionalHeaderIIR := range isAnOptionalHeaderIR { // explode [][]strfmt.UUID`, 607 ` var isAnOptionalHeaderIIC []string`, 608 ` for _, isAnOptionalHeaderIIIR := range isAnOptionalHeaderIIR { // explode []strfmt.UUID`, 609 ` isAnOptionalHeaderIIIV := isAnOptionalHeaderIIIR.String() // strfmt.UUID as string`, 610 ` isAnOptionalHeaderIIC = append(isAnOptionalHeaderIIC, isAnOptionalHeaderIIIV)`, 611 ` isAnOptionalHeaderIIS := swag.JoinByFormat(isAnOptionalHeaderIIC, "")`, 612 ` isAnOptionalHeaderIIV := isAnOptionalHeaderIIS[0]`, 613 ` isAnOptionalHeaderIC = append(isAnOptionalHeaderIC, isAnOptionalHeaderIIV)`, 614 ` isAnOptionalHeaderIS := swag.JoinByFormat(isAnOptionalHeaderIC, "pipes")`, 615 ` return isAnOptionalHeaderIS`, 616 `func (o *GetOptionalParams) bindParamNotAnOption1(formats strfmt.Registry) []string {`, 617 ` notAnOption1IR := o.NotAnOption1`, 618 ` var notAnOption1IC []string`, 619 ` for _, notAnOption1IIR := range notAnOption1IR { // explode [][]strfmt.DateTime`, 620 ` var notAnOption1IIC []string`, 621 ` for _, notAnOption1IIIR := range notAnOption1IIR { // explode []strfmt.DateTime`, 622 ` notAnOption1IIIV := notAnOption1IIIR.String() // strfmt.DateTime as string`, 623 ` notAnOption1IIC = append(notAnOption1IIC, notAnOption1IIIV)`, 624 ` notAnOption1IIS := swag.JoinByFormat(notAnOption1IIC, "pipes")`, 625 ` notAnOption1IIV := notAnOption1IIS[0]`, 626 ` notAnOption1IC = append(notAnOption1IC, notAnOption1IIV)`, 627 ` notAnOption1IS := swag.JoinByFormat(notAnOption1IC, "csv")`, 628 ` return notAnOption1IS`, 629 }, 630 } 631 632 for fileToInspect, expectedCode := range fixtureConfig { 633 code, err := os.ReadFile(filepath.Join(opts.Target, filepath.FromSlash(fileToInspect))) 634 require.NoError(t, err) 635 636 for line, codeLine := range expectedCode { 637 if !assertInCode(t, strings.TrimSpace(codeLine), string(code)) { 638 t.Logf("Code expected did not match in codegenfile %s for expected line %d: %q", fileToInspect, line, expectedCode[line]) 639 } 640 } 641 } 642 } 643 644 func TestGenClient_909_5(t *testing.T) { 645 t.Parallel() 646 defer discardOutput()() 647 648 opts := testClientGenOpts() 649 opts.Spec = filepath.Join("..", "fixtures", "bugs", "909", "fixture-909-5.yaml") 650 651 cwd, _ := os.Getwd() 652 tft, _ := os.MkdirTemp(cwd, "generated") 653 opts.Target = tft 654 655 defer func() { 656 _ = os.RemoveAll(tft) 657 }() 658 659 err := GenerateClient("client", []string{}, []string{}, opts) 660 require.NoError(t, err) 661 662 fixtureConfig := map[string][]string{ 663 "client/operations/get_optional_responses.go": { // generated file 664 `func NewGetOptionalOK() *GetOptionalOK {`, 665 ` var (`, 666 ` xIsAnOptionalHeader0Default = strfmt.DateTime{}`, 667 ` xIsAnOptionalHeader0PrimitiveDefault = float32(345.55)`, 668 ` xIsAnOptionalHeader0StringerDefault = strfmt.UUID("524fc6d5-66c6-46f6-90bc-34e0d0139e43")`, 669 ` xIsAnOptionalHeader1Default = make([]strfmt.DateTime, 0, 50)`, 670 ` xIsAnOptionalHeader2Default = make([][]int32, 0, 50)`, 671 ` xIsAnOptionalHeader2NoFormatDefault = make([][]int64, 0, 50)`, 672 ` xIsAnOptionalHeader3Default = make([][][]strfmt.UUID, 0, 50)`, 673 ` )`, 674 ` if err := xIsAnOptionalHeader0Default.UnmarshalText([]byte("2018-01-28T23:54:00.000Z")); err != nil {`, 675 ` msg := fmt.Sprintf("invalid default value for xIsAnOptionalHeader0: %v", err)`, 676 " if err := json.Unmarshal([]byte(`[\"2018-01-28T23:54:00.000Z\",\"2018-02-28T23:54:00.000Z\",\"2018-03-28T23:54:00.000Z\",\"2018-04-28T23:54:00.000Z\"]`), &xIsAnOptionalHeader1Default); err != nil {", 677 ` msg := fmt.Sprintf("invalid default value for xIsAnOptionalHeader1: %v", err)`, 678 " if err := json.Unmarshal([]byte(`[[21,22,23],[31,32,33]]`), &xIsAnOptionalHeader2Default); err != nil {", 679 ` msg := fmt.Sprintf("invalid default value for xIsAnOptionalHeader2: %v", err)`, 680 " if err := json.Unmarshal([]byte(`[[21,22,23],[31,32,33]]`), &xIsAnOptionalHeader2NoFormatDefault); err != nil {", 681 ` msg := fmt.Sprintf("invalid default value for xIsAnOptionalHeader2NoFormat: %v", err)`, 682 " if err := json.Unmarshal([]byte(`[[[\"524fc6d5-66c6-46f6-90bc-34e0d0139e43\",\"c8199a5f-f7ce-4fb1-b8af-082256125e89\"],[\"c8199a5f-f7ce-4fb1-b8af-082256125e89\",\"524fc6d5-66c6-46f6-90bc-34e0d0139e43\"]],[[\"c8199a5f-f7ce-4fb1-b8af-082256125e89\",\"524fc6d5-66c6-46f6-90bc-34e0d0139e43\"],[\"524fc6d5-66c6-46f6-90bc-34e0d0139e43\",\"c8199a5f-f7ce-4fb1-b8af-082256125e89\"]]]`), &xIsAnOptionalHeader3Default); err != nil {", 683 ` msg := fmt.Sprintf("invalid default value for xIsAnOptionalHeader3: %v", err)`, 684 ` return &GetOptionalOK{`, 685 ` XIsAnOptionalHeader0: xIsAnOptionalHeader0Default,`, 686 ` XIsAnOptionalHeader0Primitive: xIsAnOptionalHeader0PrimitiveDefault,`, 687 ` XIsAnOptionalHeader0Stringer: xIsAnOptionalHeader0StringerDefault,`, 688 ` XIsAnOptionalHeader1: xIsAnOptionalHeader1Default,`, 689 ` XIsAnOptionalHeader2: xIsAnOptionalHeader2Default,`, 690 ` XIsAnOptionalHeader2NoFormat: xIsAnOptionalHeader2NoFormatDefault,`, 691 ` XIsAnOptionalHeader3: xIsAnOptionalHeader3Default,`, 692 `func (o *GetOptionalOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {`, 693 ` hdrXIsAnOptionalHeader0 := response.GetHeader("x-isAnOptionalHeader0")`, 694 ` if hdrXIsAnOptionalHeader0 != "" {`, 695 ` valxIsAnOptionalHeader0, err := formats.Parse("date-time", hdrXIsAnOptionalHeader0)`, 696 ` if err != nil {`, 697 ` return errors.InvalidType("x-isAnOptionalHeader0", "header", "strfmt.DateTime", hdrXIsAnOptionalHeader0)`, 698 ` o.XIsAnOptionalHeader0 = *(valxIsAnOptionalHeader0.(*strfmt.DateTime))`, 699 ` hdrXIsAnOptionalHeader0DirtSimple := response.GetHeader("x-isAnOptionalHeader0DirtSimple")`, 700 ` if hdrXIsAnOptionalHeader0DirtSimple != "" {`, 701 ` o.XIsAnOptionalHeader0DirtSimple = hdrXIsAnOptionalHeader0DirtSimple`, 702 ` hdrXIsAnOptionalHeader0DirtSimpleArray := response.GetHeader("x-isAnOptionalHeader0DirtSimpleArray")`, 703 ` if hdrXIsAnOptionalHeader0DirtSimpleArray != "" {`, 704 ` valXIsAnOptionalHeader0DirtSimpleArray, err := o.bindHeaderXIsAnOptionalHeader0DirtSimpleArray(hdrXIsAnOptionalHeader0DirtSimpleArray, formats)`, 705 ` o.XIsAnOptionalHeader0DirtSimpleArray = valXIsAnOptionalHeader0DirtSimpleArray`, 706 ` hdrXIsAnOptionalHeader0DirtSimpleInteger := response.GetHeader("x-isAnOptionalHeader0DirtSimpleInteger")`, 707 ` if hdrXIsAnOptionalHeader0DirtSimpleInteger != "" {`, 708 ` valxIsAnOptionalHeader0DirtSimpleInteger, err := swag.ConvertInt64(hdrXIsAnOptionalHeader0DirtSimpleInteger)`, 709 ` return errors.InvalidType("x-isAnOptionalHeader0DirtSimpleInteger", "header", "int64", hdrXIsAnOptionalHeader0DirtSimpleInteger)`, 710 ` o.XIsAnOptionalHeader0DirtSimpleInteger = valxIsAnOptionalHeader0DirtSimpleInteger`, 711 ` hdrXIsAnOptionalHeader0Primitive := response.GetHeader("x-isAnOptionalHeader0Primitive")`, 712 ` if hdrXIsAnOptionalHeader0Primitive != "" {`, 713 ` valxIsAnOptionalHeader0Primitive, err := swag.ConvertFloat32(hdrXIsAnOptionalHeader0Primitive)`, 714 ` return errors.InvalidType("x-isAnOptionalHeader0Primitive", "header", "float32", hdrXIsAnOptionalHeader0Primitive)`, 715 ` o.XIsAnOptionalHeader0Primitive = valxIsAnOptionalHeader0Primitive`, 716 ` hdrXIsAnOptionalHeader0Stringer := response.GetHeader("x-isAnOptionalHeader0Stringer")`, 717 ` if hdrXIsAnOptionalHeader0Stringer != "" {`, 718 ` valxIsAnOptionalHeader0Stringer, err := formats.Parse("uuid", hdrXIsAnOptionalHeader0Stringer)`, 719 ` return errors.InvalidType("x-isAnOptionalHeader0Stringer", "header", "strfmt.UUID", hdrXIsAnOptionalHeader0Stringer)`, 720 ` o.XIsAnOptionalHeader0Stringer = *(valxIsAnOptionalHeader0Stringer.(*strfmt.UUID))`, 721 ` hdrXIsAnOptionalHeader1 := response.GetHeader("x-isAnOptionalHeader1")`, 722 ` if hdrXIsAnOptionalHeader1 != "" {`, 723 ` valXIsAnOptionalHeader1, err := o.bindHeaderXIsAnOptionalHeader1(hdrXIsAnOptionalHeader1, formats)`, 724 ` o.XIsAnOptionalHeader1 = valXIsAnOptionalHeader1`, 725 ` hdrXIsAnOptionalHeader2 := response.GetHeader("x-isAnOptionalHeader2")`, 726 ` if hdrXIsAnOptionalHeader2 != "" {`, 727 ` valXIsAnOptionalHeader2, err := o.bindHeaderXIsAnOptionalHeader2(hdrXIsAnOptionalHeader2, formats)`, 728 ` o.XIsAnOptionalHeader2 = valXIsAnOptionalHeader2`, 729 ` hdrXIsAnOptionalHeader2NoFormat := response.GetHeader("x-isAnOptionalHeader2NoFormat")`, 730 ` if hdrXIsAnOptionalHeader2NoFormat != "" {`, 731 ` valXIsAnOptionalHeader2NoFormat, err := o.bindHeaderXIsAnOptionalHeader2NoFormat(hdrXIsAnOptionalHeader2NoFormat, formats)`, 732 ` o.XIsAnOptionalHeader2NoFormat = valXIsAnOptionalHeader2NoFormat`, 733 ` hdrXIsAnOptionalHeader3 := response.GetHeader("x-isAnOptionalHeader3")`, 734 ` if hdrXIsAnOptionalHeader3 != "" {`, 735 ` valXIsAnOptionalHeader3, err := o.bindHeaderXIsAnOptionalHeader3(hdrXIsAnOptionalHeader3, formats)`, 736 ` o.XIsAnOptionalHeader3 = valXIsAnOptionalHeader3`, 737 ` if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF {`, 738 `func (o *GetOptionalOK) bindHeaderXIsAnOptionalHeader0DirtSimpleArray(hdr string, formats strfmt.Registry) ([]int64, error) {`, 739 ` xIsAnOptionalHeader0DirtSimpleArrayIV := hdr`, 740 ` var (`, 741 ` xIsAnOptionalHeader0DirtSimpleArrayIC []int64`, 742 ` xIsAnOptionalHeader0DirtSimpleArrayIR := swag.SplitByFormat(xIsAnOptionalHeader0DirtSimpleArrayIV, "")`, 743 ` for i, xIsAnOptionalHeader0DirtSimpleArrayIIV := range xIsAnOptionalHeader0DirtSimpleArrayIR {`, 744 ` val, err := swag.ConvertInt64(xIsAnOptionalHeader0DirtSimpleArrayIIV)`, 745 ` return nil, errors.InvalidType(fmt.Sprintf("%s.%v", "header", i), "headeritems.", "int64", xIsAnOptionalHeader0DirtSimpleArrayIIV)`, 746 ` xIsAnOptionalHeader0DirtSimpleArrayIIC := val`, 747 ` xIsAnOptionalHeader0DirtSimpleArrayIC = append(xIsAnOptionalHeader0DirtSimpleArrayIC, xIsAnOptionalHeader0DirtSimpleArrayIIC) // roll-up int64 into []int64`, 748 ` return xIsAnOptionalHeader0DirtSimpleArrayIC, nil`, 749 `func (o *GetOptionalOK) bindHeaderXIsAnOptionalHeader1(hdr string, formats strfmt.Registry) ([]strfmt.DateTime, error) {`, 750 ` xIsAnOptionalHeader1IV := hdr`, 751 ` xIsAnOptionalHeader1IC []strfmt.DateTime`, 752 ` xIsAnOptionalHeader1IR := swag.SplitByFormat(xIsAnOptionalHeader1IV, "tsv")`, 753 ` for i, xIsAnOptionalHeader1IIV := range xIsAnOptionalHeader1IR {`, 754 ` val, err := formats.Parse("date-time", xIsAnOptionalHeader1IIV)`, 755 ` return nil, errors.InvalidType(fmt.Sprintf("%s.%v", "header", i), "headeritems.", "strfmt.DateTime", xIsAnOptionalHeader1IIV)`, 756 ` xIsAnOptionalHeader1IIC := val.(strfmt.DateTime)`, 757 ` xIsAnOptionalHeader1IC = append(xIsAnOptionalHeader1IC, xIsAnOptionalHeader1IIC) // roll-up strfmt.DateTime into []strfmt.DateTime`, 758 ` return xIsAnOptionalHeader1IC, nil`, 759 `func (o *GetOptionalOK) bindHeaderXIsAnOptionalHeader2(hdr string, formats strfmt.Registry) ([][]int32, error) {`, 760 ` xIsAnOptionalHeader2IV := hdr`, 761 ` xIsAnOptionalHeader2IC [][]int32`, 762 ` xIsAnOptionalHeader2IR := swag.SplitByFormat(xIsAnOptionalHeader2IV, "")`, 763 ` for _, xIsAnOptionalHeader2IIV := range xIsAnOptionalHeader2IR {`, 764 ` xIsAnOptionalHeader2IIC []int32`, 765 ` xIsAnOptionalHeader2IIR := swag.SplitByFormat(xIsAnOptionalHeader2IIV, "pipes")`, 766 ` for ii, xIsAnOptionalHeader2IIIV := range xIsAnOptionalHeader2IIR {`, 767 ` val, err := swag.ConvertInt32(xIsAnOptionalHeader2IIIV)`, 768 ` return nil, errors.InvalidType(fmt.Sprintf("%s.%v", "header", ii), "headeritems.items.", "int32", xIsAnOptionalHeader2IIIV)`, 769 ` xIsAnOptionalHeader2IIIC := val`, 770 ` xIsAnOptionalHeader2IIC = append(xIsAnOptionalHeader2IIC, xIsAnOptionalHeader2IIIC) // roll-up int32 into []int32`, 771 ` xIsAnOptionalHeader2IC = append(xIsAnOptionalHeader2IC, xIsAnOptionalHeader2IIC) // roll-up []int32 into [][]int32`, 772 ` return xIsAnOptionalHeader2IC, nil`, 773 `func (o *GetOptionalOK) bindHeaderXIsAnOptionalHeader2NoFormat(hdr string, formats strfmt.Registry) ([][]int64, error) {`, 774 ` xIsAnOptionalHeader2NoFormatIV := hdr`, 775 ` xIsAnOptionalHeader2NoFormatIC [][]int64`, 776 ` xIsAnOptionalHeader2NoFormatIR := swag.SplitByFormat(xIsAnOptionalHeader2NoFormatIV, "pipes")`, 777 ` for _, xIsAnOptionalHeader2NoFormatIIV := range xIsAnOptionalHeader2NoFormatIR {`, 778 ` xIsAnOptionalHeader2NoFormatIIC []int64`, 779 ` xIsAnOptionalHeader2NoFormatIIR := swag.SplitByFormat(xIsAnOptionalHeader2NoFormatIIV, "tsv")`, 780 ` for ii, xIsAnOptionalHeader2NoFormatIIIV := range xIsAnOptionalHeader2NoFormatIIR {`, 781 ` val, err := swag.ConvertInt64(xIsAnOptionalHeader2NoFormatIIIV)`, 782 ` return nil, errors.InvalidType(fmt.Sprintf("%s.%v", "header", ii), "headeritems.items.", "int64", xIsAnOptionalHeader2NoFormatIIIV)`, 783 ` xIsAnOptionalHeader2NoFormatIIIC := val`, 784 ` xIsAnOptionalHeader2NoFormatIIC = append(xIsAnOptionalHeader2NoFormatIIC, xIsAnOptionalHeader2NoFormatIIIC) // roll-up int64 into []int64`, 785 ` xIsAnOptionalHeader2NoFormatIC = append(xIsAnOptionalHeader2NoFormatIC, xIsAnOptionalHeader2NoFormatIIC) // roll-up []int64 into [][]int64`, 786 ` return xIsAnOptionalHeader2NoFormatIC, nil`, 787 `func (o *GetOptionalOK) bindHeaderXIsAnOptionalHeader3(hdr string, formats strfmt.Registry) ([][][]strfmt.UUID, error) {`, 788 ` xIsAnOptionalHeader3IV := hdr`, 789 ` xIsAnOptionalHeader3IC [][][]strfmt.UUID`, 790 ` xIsAnOptionalHeader3IR := swag.SplitByFormat(xIsAnOptionalHeader3IV, "")`, 791 ` for _, xIsAnOptionalHeader3IIV := range xIsAnOptionalHeader3IR {`, 792 ` xIsAnOptionalHeader3IIC [][]strfmt.UUID`, 793 ` xIsAnOptionalHeader3IIR := swag.SplitByFormat(xIsAnOptionalHeader3IIV, "pipes")`, 794 ` for _, xIsAnOptionalHeader3IIIV := range xIsAnOptionalHeader3IIR {`, 795 ` xIsAnOptionalHeader3IIIC []strfmt.UUID`, 796 ` xIsAnOptionalHeader3IIIR := swag.SplitByFormat(xIsAnOptionalHeader3IIIV, "")`, 797 ` for iii, xIsAnOptionalHeader3IIIIV := range xIsAnOptionalHeader3IIIR {`, 798 ` val, err := formats.Parse("uuid", xIsAnOptionalHeader3IIIIV)`, 799 ` return nil, errors.InvalidType(fmt.Sprintf("%s.%v", "header", iii), "headeritems.items.", "strfmt.UUID", xIsAnOptionalHeader3IIIIV)`, 800 ` xIsAnOptionalHeader3IIIIC := val.(strfmt.UUID)`, 801 ` xIsAnOptionalHeader3IIIC = append(xIsAnOptionalHeader3IIIC, xIsAnOptionalHeader3IIIIC) // roll-up strfmt.UUID into []strfmt.UUID`, 802 ` xIsAnOptionalHeader3IIC = append(xIsAnOptionalHeader3IIC, xIsAnOptionalHeader3IIIC) // roll-up []strfmt.UUID into [][]strfmt.UUID`, 803 ` xIsAnOptionalHeader3IC = append(xIsAnOptionalHeader3IC, xIsAnOptionalHeader3IIC) // roll-up [][]strfmt.UUID into [][][]strfmt.UUID`, 804 ` return xIsAnOptionalHeader3IC, nil`, 805 }, 806 } 807 808 for fileToInspect, expectedCode := range fixtureConfig { 809 code, err := os.ReadFile(filepath.Join(opts.Target, filepath.FromSlash(fileToInspect))) 810 require.NoError(t, err) 811 812 for line, codeLine := range expectedCode { 813 if !assertInCode(t, strings.TrimSpace(codeLine), string(code)) { 814 t.Logf("Code expected did not match in codegenfile %s for expected line %d: %q", fileToInspect, line, expectedCode[line]) 815 } 816 } 817 } 818 } 819 820 func TestGenClient_909_6(t *testing.T) { 821 t.Parallel() 822 defer discardOutput()() 823 824 opts := testClientGenOpts() 825 opts.Spec = filepath.Join("..", "fixtures", "bugs", "909", "fixture-909-6.yaml") 826 827 cwd, _ := os.Getwd() 828 tft, _ := os.MkdirTemp(cwd, "generated") 829 opts.Target = tft 830 831 defer func() { 832 _ = os.RemoveAll(tft) 833 }() 834 835 err := GenerateClient("client", []string{}, []string{}, opts) 836 require.NoError(t, err) 837 838 fixtureConfig := map[string][]string{ 839 "client/operations/get_optional_responses.go": { // generated file 840 `func NewGetOptionalOK() *GetOptionalOK {`, 841 ` var (`, 842 ` xaBoolDefault = bool(true)`, 843 ` xaBsonObjectIDDefault = strfmt.ObjectId{}`, 844 ` xaByteDefault = strfmt.Base64([]byte(nil))`, 845 ` xaCreditCardDefault = strfmt.CreditCard("4111-1111-1111-1111")`, 846 ` xaDateDefault = strfmt.Date{}`, 847 ` xaDateTimeDefault = strfmt.DateTime{}`, 848 ` xaDoubleDefault = float64(99.99)`, 849 ` xaDurationDefault = strfmt.Duration(0)`, 850 ` xaFloatDefault = float32(99.99)`, 851 ` xaHexColorDefault = strfmt.HexColor("#FFFFFF")`, 852 ` xaHostnameDefault = strfmt.Hostname("www.example.com")`, 853 ` xaInt32Default = int32(-99)`, 854 ` xaInt64Default = int64(-99)`, 855 ` xaMacDefault = strfmt.MAC("01:02:03:04:05:06")`, 856 ` xaPasswordDefault = strfmt.Password("secret")`, 857 ` xaRGBColorDefault = strfmt.RGBColor("rgb(255,255,255)")`, 858 ` xaSsnDefault = strfmt.SSN("111-11-1111")`, 859 ` xaUUIDDefault = strfmt.UUID("a8098c1a-f86e-11da-bd1a-00112444be1e")`, 860 ` xaUUID3Default = strfmt.UUID3("bcd02e22-68f0-3046-a512-327cca9def8f")`, 861 ` xaUUID4Default = strfmt.UUID4("025b0d74-00a2-4048-bf57-227c5111bb34")`, 862 ` xaUUID5Default = strfmt.UUID5("886313e1-3b8a-5372-9b90-0c9aee199e5d")`, 863 ` xaUint32Default = uint32(99)`, 864 ` xaUint64Default = uint64(99)`, 865 ` xaURIDefault = strfmt.URI("http://foo.bar/?baz=qux#quux")`, 866 ` xAnEmailDefault = strfmt.Email("fredbi@github.com")`, 867 ` xAnISBNDefault = strfmt.ISBN("0321751043")`, 868 ` xAnISBN10Default = strfmt.ISBN10("0321751043")`, 869 ` xAnISBN13Default = strfmt.ISBN13("978 3401013190")`, 870 ` xAnIPV4Default = strfmt.IPv4("192.168.224.1")`, 871 ` xAnIPV6Default = strfmt.IPv6("::1")`, 872 ` if err := xaBsonObjectIDDefault.UnmarshalText([]byte("507f1f77bcf86cd799439011")); err != nil {`, 873 ` msg := fmt.Sprintf("invalid default value for xaBsonObjectID: %v", err)`, 874 ` if err := xaByteDefault.UnmarshalText([]byte("ZWxpemFiZXRocG9zZXk=")); err != nil {`, 875 ` msg := fmt.Sprintf("invalid default value for xaByte: %v", err)`, 876 ` if err := xaDateDefault.UnmarshalText([]byte("1970-01-01")); err != nil {`, 877 ` msg := fmt.Sprintf("invalid default value for xaDate: %v", err)`, 878 ` if err := xaDateTimeDefault.UnmarshalText([]byte("1970-01-01T11:01:05.283185Z")); err != nil {`, 879 ` msg := fmt.Sprintf("invalid default value for xaDateTime: %v", err)`, 880 ` if err := xaDurationDefault.UnmarshalText([]byte("1 ms")); err != nil {`, 881 ` msg := fmt.Sprintf("invalid default value for xaDuration: %v", err)`, 882 ` return &GetOptionalOK{`, 883 ` XaBool: xaBoolDefault,`, 884 ` XaBsonObjectID: xaBsonObjectIDDefault,`, 885 ` XaByte: xaByteDefault,`, 886 ` XaCreditCard: xaCreditCardDefault,`, 887 ` XaDate: xaDateDefault,`, 888 ` XaDateTime: xaDateTimeDefault,`, 889 ` XaDouble: xaDoubleDefault,`, 890 ` XaDuration: xaDurationDefault,`, 891 ` XaFloat: xaFloatDefault,`, 892 ` XaHexColor: xaHexColorDefault,`, 893 ` XaHostname: xaHostnameDefault,`, 894 ` XaInt32: xaInt32Default,`, 895 ` XaInt64: xaInt64Default,`, 896 ` XaMac: xaMacDefault,`, 897 ` XaPassword: xaPasswordDefault,`, 898 ` XaRGBColor: xaRGBColorDefault,`, 899 ` XaSsn: xaSsnDefault,`, 900 ` XaUUID: xaUUIDDefault,`, 901 ` XaUUID3: xaUUID3Default,`, 902 ` XaUUID4: xaUUID4Default,`, 903 ` XaUUID5: xaUUID5Default,`, 904 ` XaUint32: xaUint32Default,`, 905 ` XaUint64: xaUint64Default,`, 906 ` XaURI: xaURIDefault,`, 907 ` XAnEmail: xAnEmailDefault,`, 908 ` XAnISBN: xAnISBNDefault,`, 909 ` XAnISBN10: xAnISBN10Default,`, 910 ` XAnISBN13: xAnISBN13Default,`, 911 ` XAnIPV4: xAnIPV4Default,`, 912 ` XAnIPV6: xAnIPV6Default,`, 913 `func (o *GetOptionalOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {`, 914 ` hdrXaBool := response.GetHeader("X-aBool")`, 915 ` if hdrXaBool != "" {`, 916 ` valxABool, err := swag.ConvertBool(hdrXaBool)`, 917 ` if err != nil {`, 918 ` return errors.InvalidType("X-aBool", "header", "bool", hdrXaBool)`, 919 ` o.XaBool = valxABool`, 920 ` hdrXaBsonObjectID := response.GetHeader("X-aBsonObjectId")`, 921 ` if hdrXaBsonObjectID != "" {`, 922 ` valxABsonObjectId, err := formats.Parse("bsonobjectid", hdrXaBsonObjectID)`, 923 ` if err != nil {`, 924 ` return errors.InvalidType("X-aBsonObjectId", "header", "strfmt.ObjectId", hdrXaBsonObjectID)`, 925 ` o.XaBsonObjectID = *(valxABsonObjectId.(*strfmt.ObjectId))`, 926 ` hdrXaByte := response.GetHeader("X-aByte")`, 927 ` if hdrXaByte != "" {`, 928 ` valxAByte, err := formats.Parse("byte", hdrXaByte)`, 929 ` if err != nil {`, 930 ` return errors.InvalidType("X-aByte", "header", "strfmt.Base64", hdrXaByte)`, 931 ` o.XaByte = *(valxAByte.(*strfmt.Base64))`, 932 ` hdrXaCreditCard := response.GetHeader("X-aCreditCard")`, 933 ` if hdrXaCreditCard != "" {`, 934 ` valxACreditCard, err := formats.Parse("creditcard", hdrXaCreditCard)`, 935 ` if err != nil {`, 936 ` return errors.InvalidType("X-aCreditCard", "header", "strfmt.CreditCard", hdrXaCreditCard)`, 937 ` o.XaCreditCard = *(valxACreditCard.(*strfmt.CreditCard))`, 938 ` hdrXaDate := response.GetHeader("X-aDate")`, 939 ` if hdrXaDate != "" {`, 940 ` valxADate, err := formats.Parse("date", hdrXaDate)`, 941 ` if err != nil {`, 942 ` return errors.InvalidType("X-aDate", "header", "strfmt.Date", hdrXaDate)`, 943 ` o.XaDate = *(valxADate.(*strfmt.Date))`, 944 ` hdrXaDateTime := response.GetHeader("X-aDateTime")`, 945 ` if hdrXaDateTime != "" {`, 946 ` valxADateTime, err := formats.Parse("date-time", hdrXaDateTime)`, 947 ` if err != nil {`, 948 ` return errors.InvalidType("X-aDateTime", "header", "strfmt.DateTime", hdrXaDateTime)`, 949 ` o.XaDateTime = *(valxADateTime.(*strfmt.DateTime))`, 950 ` hdrXaDouble := response.GetHeader("X-aDouble")`, 951 ` if hdrXaDouble != "" {`, 952 ` valxADouble, err := swag.ConvertFloat64(hdrXaDouble)`, 953 ` if err != nil {`, 954 ` return errors.InvalidType("X-aDouble", "header", "float64", hdrXaDouble)`, 955 ` o.XaDouble = valxADouble`, 956 ` hdrXaDuration := response.GetHeader("X-aDuration")`, 957 ` if hdrXaDuration != "" {`, 958 ` valxADuration, err := formats.Parse("duration", hdrXaDuration)`, 959 ` if err != nil {`, 960 ` return errors.InvalidType("X-aDuration", "header", "strfmt.Duration", hdrXaDuration)`, 961 ` o.XaDuration = *(valxADuration.(*strfmt.Duration))`, 962 ` hdrXaFloat := response.GetHeader("X-aFloat")`, 963 ` if hdrXaFloat != "" {`, 964 ` valxAFloat, err := swag.ConvertFloat32(hdrXaFloat)`, 965 ` if err != nil {`, 966 ` return errors.InvalidType("X-aFloat", "header", "float32", hdrXaFloat)`, 967 ` o.XaFloat = valxAFloat`, 968 ` hdrXaHexColor := response.GetHeader("X-aHexColor")`, 969 ` if hdrXaHexColor != "" {`, 970 ` valxAHexColor, err := formats.Parse("hexcolor", hdrXaHexColor)`, 971 ` if err != nil {`, 972 ` return errors.InvalidType("X-aHexColor", "header", "strfmt.HexColor", hdrXaHexColor)`, 973 ` o.XaHexColor = *(valxAHexColor.(*strfmt.HexColor))`, 974 ` hdrXaHostname := response.GetHeader("X-aHostname")`, 975 ` if hdrXaHostname != "" {`, 976 ` valxAHostname, err := formats.Parse("hostname", hdrXaHostname)`, 977 ` if err != nil {`, 978 ` return errors.InvalidType("X-aHostname", "header", "strfmt.Hostname", hdrXaHostname)`, 979 ` o.XaHostname = *(valxAHostname.(*strfmt.Hostname))`, 980 ` hdrXaInt32 := response.GetHeader("X-aInt32")`, 981 ` if hdrXaInt32 != "" {`, 982 ` valxAInt32, err := swag.ConvertInt32(hdrXaInt32)`, 983 ` if err != nil {`, 984 ` return errors.InvalidType("X-aInt32", "header", "int32", hdrXaInt32)`, 985 ` o.XaInt32 = valxAInt32`, 986 ` hdrXaInt64 := response.GetHeader("X-aInt64")`, 987 ` if hdrXaInt64 != "" {`, 988 ` valxAInt64, err := swag.ConvertInt64(hdrXaInt64)`, 989 ` if err != nil {`, 990 ` return errors.InvalidType("X-aInt64", "header", "int64", hdrXaInt64)`, 991 ` o.XaInt64 = valxAInt64`, 992 ` hdrXaMac := response.GetHeader("X-aMac")`, 993 ` if hdrXaMac != "" {`, 994 ` valxAMac, err := formats.Parse("mac", hdrXaMac)`, 995 ` if err != nil {`, 996 ` return errors.InvalidType("X-aMac", "header", "strfmt.MAC", hdrXaMac)`, 997 ` o.XaMac = *(valxAMac.(*strfmt.MAC))`, 998 ` hdrXaPassword := response.GetHeader("X-aPassword")`, 999 ` if hdrXaPassword != "" {`, 1000 ` valxAPassword, err := formats.Parse("password", hdrXaPassword)`, 1001 ` if err != nil {`, 1002 ` return errors.InvalidType("X-aPassword", "header", "strfmt.Password", hdrXaPassword)`, 1003 ` o.XaPassword = *(valxAPassword.(*strfmt.Password))`, 1004 ` hdrXaRGBColor := response.GetHeader("X-aRGBColor")`, 1005 ` if hdrXaRGBColor != "" {`, 1006 ` valxARGBColor, err := formats.Parse("rgbcolor", hdrXaRGBColor)`, 1007 ` if err != nil {`, 1008 ` return errors.InvalidType("X-aRGBColor", "header", "strfmt.RGBColor", hdrXaRGBColor)`, 1009 ` o.XaRGBColor = *(valxARGBColor.(*strfmt.RGBColor))`, 1010 ` hdrXaSsn := response.GetHeader("X-aSsn")`, 1011 ` if hdrXaSsn != "" {`, 1012 ` valxASsn, err := formats.Parse("ssn", hdrXaSsn)`, 1013 ` if err != nil {`, 1014 ` return errors.InvalidType("X-aSsn", "header", "strfmt.SSN", hdrXaSsn)`, 1015 ` o.XaSsn = *(valxASsn.(*strfmt.SSN))`, 1016 ` hdrXaUUID := response.GetHeader("X-aUUID")`, 1017 ` if hdrXaUUID != "" {`, 1018 ` valxAUuid, err := formats.Parse("uuid", hdrXaUUID)`, 1019 ` if err != nil {`, 1020 ` return errors.InvalidType("X-aUUID", "header", "strfmt.UUID", hdrXaUUID)`, 1021 ` o.XaUUID = *(valxAUuid.(*strfmt.UUID))`, 1022 ` hdrXaUUID3 := response.GetHeader("X-aUUID3")`, 1023 ` if hdrXaUUID3 != "" {`, 1024 ` valxAUuid3, err := formats.Parse("uuid3", hdrXaUUID3)`, 1025 ` if err != nil {`, 1026 ` return errors.InvalidType("X-aUUID3", "header", "strfmt.UUID3", hdrXaUUID3)`, 1027 ` o.XaUUID3 = *(valxAUuid3.(*strfmt.UUID3))`, 1028 ` hdrXaUUID4 := response.GetHeader("X-aUUID4")`, 1029 ` if hdrXaUUID4 != "" {`, 1030 ` valxAUuid4, err := formats.Parse("uuid4", hdrXaUUID4)`, 1031 ` if err != nil {`, 1032 ` return errors.InvalidType("X-aUUID4", "header", "strfmt.UUID4", hdrXaUUID4)`, 1033 ` o.XaUUID4 = *(valxAUuid4.(*strfmt.UUID4))`, 1034 ` hdrXaUUID5 := response.GetHeader("X-aUUID5")`, 1035 ` if hdrXaUUID5 != "" {`, 1036 ` valxAUuid5, err := formats.Parse("uuid5", hdrXaUUID5)`, 1037 ` if err != nil {`, 1038 ` return errors.InvalidType("X-aUUID5", "header", "strfmt.UUID5", hdrXaUUID5)`, 1039 ` o.XaUUID5 = *(valxAUuid5.(*strfmt.UUID5))`, 1040 ` hdrXaUint32 := response.GetHeader("X-aUint32")`, 1041 ` if hdrXaUint32 != "" {`, 1042 ` valxAUint32, err := swag.ConvertUint32(hdrXaUint32)`, 1043 ` if err != nil {`, 1044 ` return errors.InvalidType("X-aUint32", "header", "uint32", hdrXaUint32)`, 1045 ` o.XaUint32 = valxAUint32`, 1046 ` hdrXaUint64 := response.GetHeader("X-aUint64")`, 1047 ` if hdrXaUint64 != "" {`, 1048 ` valxAUint64, err := swag.ConvertUint64(hdrXaUint64)`, 1049 ` if err != nil {`, 1050 ` return errors.InvalidType("X-aUint64", "header", "uint64", hdrXaUint64)`, 1051 ` o.XaUint64 = valxAUint64`, 1052 ` hdrXaURI := response.GetHeader("X-aUri")`, 1053 ` if hdrXaURI != "" {`, 1054 ` valxAUri, err := formats.Parse("uri", hdrXaURI)`, 1055 ` if err != nil {`, 1056 ` return errors.InvalidType("X-aUri", "header", "strfmt.URI", hdrXaURI)`, 1057 ` o.XaURI = *(valxAUri.(*strfmt.URI))`, 1058 ` hdrXAnEmail := response.GetHeader("X-anEmail")`, 1059 ` if hdrXAnEmail != "" {`, 1060 ` valxAnEmail, err := formats.Parse("email", hdrXAnEmail)`, 1061 ` if err != nil {`, 1062 ` return errors.InvalidType("X-anEmail", "header", "strfmt.Email", hdrXAnEmail)`, 1063 ` o.XAnEmail = *(valxAnEmail.(*strfmt.Email))`, 1064 ` hdrXAnISBN := response.GetHeader("X-anISBN")`, 1065 ` if hdrXAnISBN != "" {`, 1066 ` valxAnISBN, err := formats.Parse("isbn", hdrXAnISBN)`, 1067 ` if err != nil {`, 1068 ` return errors.InvalidType("X-anISBN", "header", "strfmt.ISBN", hdrXAnISBN)`, 1069 ` o.XAnISBN = *(valxAnISBN.(*strfmt.ISBN))`, 1070 ` hdrXAnISBN10 := response.GetHeader("X-anISBN10")`, 1071 ` if hdrXAnISBN10 != "" {`, 1072 ` valxAnISBN10, err := formats.Parse("isbn10", hdrXAnISBN10)`, 1073 ` if err != nil {`, 1074 ` return errors.InvalidType("X-anISBN10", "header", "strfmt.ISBN10", hdrXAnISBN10)`, 1075 ` o.XAnISBN10 = *(valxAnISBN10.(*strfmt.ISBN10))`, 1076 ` hdrXAnISBN13 := response.GetHeader("X-anISBN13")`, 1077 ` if hdrXAnISBN13 != "" {`, 1078 ` valxAnISBN13, err := formats.Parse("isbn13", hdrXAnISBN13)`, 1079 ` if err != nil {`, 1080 ` return errors.InvalidType("X-anISBN13", "header", "strfmt.ISBN13", hdrXAnISBN13)`, 1081 ` o.XAnISBN13 = *(valxAnISBN13.(*strfmt.ISBN13))`, 1082 ` hdrXAnIPV4 := response.GetHeader("X-anIpv4")`, 1083 ` if hdrXAnIPV4 != "" {`, 1084 ` valxAnIpv4, err := formats.Parse("ipv4", hdrXAnIPV4)`, 1085 ` if err != nil {`, 1086 ` return errors.InvalidType("X-anIpv4", "header", "strfmt.IPv4", hdrXAnIPV4)`, 1087 ` o.XAnIPV4 = *(valxAnIpv4.(*strfmt.IPv4))`, 1088 ` hdrXAnIPV6 := response.GetHeader("X-anIpv6")`, 1089 ` if hdrXAnIPV6 != "" {`, 1090 ` valxAnIpv6, err := formats.Parse("ipv6", hdrXAnIPV6)`, 1091 ` if err != nil {`, 1092 ` return errors.InvalidType("X-anIpv6", "header", "strfmt.IPv6", hdrXAnIPV6)`, 1093 ` o.XAnIPV6 = *(valxAnIpv6.(*strfmt.IPv6))`, 1094 }, 1095 } 1096 1097 for fileToInspect, expectedCode := range fixtureConfig { 1098 code, err := os.ReadFile(filepath.Join(opts.Target, filepath.FromSlash(fileToInspect))) 1099 require.NoError(t, err) 1100 1101 for line, codeLine := range expectedCode { 1102 if !assertInCode(t, strings.TrimSpace(codeLine), string(code)) { 1103 t.Logf("Code expected did not match in codegenfile %s for expected line %d: %q", fileToInspect, line, expectedCode[line]) 1104 } 1105 } 1106 } 1107 }