github.com/go-swagger/go-swagger@v0.31.0/generator/enum_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 "strings" 21 "testing" 22 23 "github.com/go-openapi/loads" 24 "github.com/stretchr/testify/assert" 25 "github.com/stretchr/testify/require" 26 ) 27 28 func TestEnum_StringThing(t *testing.T) { 29 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 30 require.NoError(t, err) 31 32 definitions := specDoc.Spec().Definitions 33 k := "StringThing" 34 schema := definitions[k] 35 opts := opts() 36 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 37 require.NoError(t, err) 38 39 buf := bytes.NewBuffer(nil) 40 err = templates.MustGet("model").Execute(buf, genModel) 41 require.NoError(t, err) 42 43 ff, err := opts.LanguageOpts.FormatContent("string_thing.go", buf.Bytes()) 44 require.NoErrorf(t, err, buf.String()) 45 46 res := string(ff) 47 assertInCode(t, "var stringThingEnum []interface{}", res) 48 assertInCode(t, k+") validateStringThingEnum(path, location string, value StringThing)", res) 49 assertInCode(t, "m.validateStringThingEnum(\"\", \"body\", m)", res) 50 } 51 52 func TestEnum_ComposedThing(t *testing.T) { 53 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 54 require.NoError(t, err) 55 56 definitions := specDoc.Spec().Definitions 57 k := "ComposedThing" 58 schema := definitions[k] 59 opts := opts() 60 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 61 require.NoError(t, err) 62 63 buf := bytes.NewBuffer(nil) 64 err = templates.MustGet("model").Execute(buf, genModel) 65 require.NoError(t, err) 66 67 ff, err := opts.LanguageOpts.FormatContent("composed_thing.go", buf.Bytes()) 68 require.NoErrorf(t, err, buf.String()) 69 70 res := string(ff) 71 assertInCode(t, "m.StringThing.Validate(formats)", res) 72 assertInCode(t, "var composedThingTypeNamePropEnum []interface{}", res) 73 assertInCode(t, "m.validateNameEnum(\"name\", \"body\", *m.Name)", res) 74 assertInCode(t, k+") validateNameEnum(path, location string, value string)", res) 75 } 76 77 func TestEnum_IntThing(t *testing.T) { 78 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 79 require.NoError(t, err) 80 81 definitions := specDoc.Spec().Definitions 82 k := "IntThing" 83 schema := definitions[k] 84 opts := opts() 85 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 86 require.NoError(t, err) 87 88 buf := bytes.NewBuffer(nil) 89 err = templates.MustGet("model").Execute(buf, genModel) 90 require.NoError(t, err) 91 92 ff, err := opts.LanguageOpts.FormatContent("int_thing.go", buf.Bytes()) 93 require.NoErrorf(t, err, buf.String()) 94 95 res := string(ff) 96 assertInCode(t, "var intThingEnum []interface{}", res) 97 assertInCode(t, k+") validateIntThingEnum(path, location string, value IntThing)", res) 98 assertInCode(t, "m.validateIntThingEnum(\"\", \"body\", m)", res) 99 } 100 101 func TestEnum_FloatThing(t *testing.T) { 102 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 103 require.NoError(t, err) 104 105 definitions := specDoc.Spec().Definitions 106 k := "FloatThing" 107 schema := definitions[k] 108 opts := opts() 109 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 110 require.NoError(t, err) 111 112 buf := bytes.NewBuffer(nil) 113 err = templates.MustGet("model").Execute(buf, genModel) 114 require.NoError(t, err) 115 116 ff, err := opts.LanguageOpts.FormatContent("float_thing.go", buf.Bytes()) 117 require.NoErrorf(t, err, buf.String()) 118 119 res := string(ff) 120 assertInCode(t, "var floatThingEnum []interface{}", res) 121 assertInCode(t, k+") validateFloatThingEnum(path, location string, value FloatThing)", res) 122 assertInCode(t, "m.validateFloatThingEnum(\"\", \"body\", m)", res) 123 } 124 125 func TestEnum_SliceThing(t *testing.T) { 126 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 127 require.NoError(t, err) 128 129 definitions := specDoc.Spec().Definitions 130 k := "SliceThing" 131 schema := definitions[k] 132 opts := opts() 133 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 134 require.NoError(t, err) 135 136 buf := bytes.NewBuffer(nil) 137 err = templates.MustGet("model").Execute(buf, genModel) 138 require.NoError(t, err) 139 140 ff, err := opts.LanguageOpts.FormatContent("slice_thing.go", buf.Bytes()) 141 require.NoErrorf(t, err, buf.String()) 142 143 res := string(ff) 144 assertInCode(t, "var sliceThingEnum []interface{}", res) 145 assertInCode(t, k+") validateSliceThingEnum(path, location string, value []string)", res) 146 assertInCode(t, "m.validateSliceThingEnum(\"\", \"body\", m)", res) 147 } 148 149 func TestEnum_SliceAndItemsThing(t *testing.T) { 150 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 151 require.NoError(t, err) 152 153 definitions := specDoc.Spec().Definitions 154 k := "SliceAndItemsThing" 155 schema := definitions[k] 156 opts := opts() 157 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 158 require.NoError(t, err) 159 160 buf := bytes.NewBuffer(nil) 161 err = templates.MustGet("model").Execute(buf, genModel) 162 require.NoError(t, err) 163 164 ff, err := opts.LanguageOpts.FormatContent("slice_and_items_thing.go", buf.Bytes()) 165 require.NoErrorf(t, err, buf.String()) 166 167 res := string(ff) 168 assertInCode(t, "var sliceAndItemsThingEnum []interface{}", res) 169 assertInCode(t, k+") validateSliceAndItemsThingEnum(path, location string, value []string)", res) 170 assertInCode(t, "m.validateSliceAndItemsThingEnum(\"\", \"body\", m)", res) 171 assertInCode(t, "var sliceAndItemsThingItemsEnum []interface{}", res) 172 assertInCode(t, k+") validateSliceAndItemsThingItemsEnum(path, location string, value string)", res) 173 assertInCode(t, "m.validateSliceAndItemsThingItemsEnum(strconv.Itoa(i), \"body\", m[i])", res) 174 } 175 176 func TestEnum_SliceAndAdditionalItemsThing(t *testing.T) { 177 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 178 require.NoError(t, err) 179 180 definitions := specDoc.Spec().Definitions 181 k := "SliceAndAdditionalItemsThing" 182 schema := definitions[k] 183 opts := opts() 184 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 185 require.NoError(t, err) 186 187 buf := bytes.NewBuffer(nil) 188 err = templates.MustGet("model").Execute(buf, genModel) 189 require.NoError(t, err) 190 191 ff, err := opts.LanguageOpts.FormatContent("slice_and_additional_items_thing.go", buf.Bytes()) 192 require.NoErrorf(t, err, buf.String()) 193 194 res := string(ff) 195 assertInCode(t, "var sliceAndAdditionalItemsThingEnum []interface{}", res) 196 assertInCode(t, k+") validateSliceAndAdditionalItemsThingEnum(path, location string, value *SliceAndAdditionalItemsThing)", res) 197 assertInCode(t, "var sliceAndAdditionalItemsThingTypeP0PropEnum []interface{}", res) 198 assertInCode(t, k+") validateP0Enum(path, location string, value string)", res) 199 assertInCode(t, "m.validateP0Enum(\"0\", \"body\", *m.P0)", res) 200 assertInCode(t, "var sliceAndAdditionalItemsThingItemsEnum []interface{}", res) 201 assertInCode(t, k+") validateSliceAndAdditionalItemsThingItemsEnum(path, location string, value float32)", res) 202 assertInCode(t, "m.validateSliceAndAdditionalItemsThingItemsEnum(strconv.Itoa(i+1), \"body\", m.SliceAndAdditionalItemsThingItems[i])", res) 203 } 204 205 func TestEnum_MapThing(t *testing.T) { 206 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 207 require.NoError(t, err) 208 209 definitions := specDoc.Spec().Definitions 210 k := "MapThing" 211 schema := definitions[k] 212 opts := opts() 213 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 214 require.NoError(t, err) 215 216 buf := bytes.NewBuffer(nil) 217 err = templates.MustGet("model").Execute(buf, genModel) 218 require.NoError(t, err) 219 220 ff, err := opts.LanguageOpts.FormatContent("map_thing.go", buf.Bytes()) 221 require.NoErrorf(t, err, buf.String()) 222 223 res := string(ff) 224 assertInCode(t, "var mapThingEnum []interface{}", res) 225 assertInCode(t, k+") validateMapThingEnum(path, location string, value MapThing)", res) 226 assertInCode(t, "m.validateMapThingEnum(\"\", \"body\", m)", res) 227 assertInCode(t, "var mapThingValueEnum []interface{}", res) 228 assertInCode(t, k+") validateMapThingValueEnum(path, location string, value string)", res) 229 assertInCode(t, "m.validateMapThingValueEnum(k, \"body\", m[k])", res) 230 } 231 232 func TestEnum_ObjectThing(t *testing.T) { 233 defer discardOutput()() 234 235 // verify that additionalItems render the same from an expanded and a flattened spec 236 // known issue: there are some slight differences in generated code and variables for enum, 237 // depending on how the spec has been preprocessed 238 specs := []string{ 239 "../fixtures/codegen/todolist.enums.yml", 240 "../fixtures/codegen/todolist.enums.flattened.json", // this one is the first one, after "swagger flatten" 241 } 242 k := "ObjectThing" 243 for _, toPin := range specs { 244 fixture := toPin 245 246 t.Run(fmt.Sprintf("%s from spec %s", k, fixture), func(t *testing.T) { 247 specDoc, err := loads.Spec(fixture) 248 require.NoError(t, err) 249 250 definitions := specDoc.Spec().Definitions 251 schema := definitions[k] 252 opts := opts() 253 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 254 require.NoError(t, err) 255 256 buf := bytes.NewBuffer(nil) 257 err = templates.MustGet("model").Execute(buf, genModel) 258 require.NoError(t, err) 259 260 ff, err := opts.LanguageOpts.FormatContent("object_thing.go", buf.Bytes()) 261 require.NoErrorf(t, err, buf.String()) 262 263 res := string(ff) 264 // all these remain unaffected 265 assertInCode(t, "var objectThingTypeNamePropEnum []interface{}", res) 266 assertInCode(t, "var objectThingTypeFlowerPropEnum []interface{}", res) 267 assertInCode(t, "var objectThingTypeFlourPropEnum []interface{}", res) 268 assertInCode(t, "var objectThingTypeWolvesPropEnum []interface{}", res) 269 assertInCode(t, "var objectThingWolvesValueEnum []interface{}", res) 270 assertInCode(t, "var objectThingCatsItemsEnum []interface{}", res) 271 assertInCode(t, k+") validateNameEnum(path, location string, value string)", res) 272 assertInCode(t, k+") validateFlowerEnum(path, location string, value int32)", res) 273 assertInCode(t, k+") validateFlourEnum(path, location string, value float32)", res) 274 assertInCode(t, k+") validateWolvesEnum(path, location string, value map[string]string)", res) 275 assertInCode(t, k+") validateWolvesValueEnum(path, location string, value string)", res) 276 assertInCode(t, k+") validateCatsItemsEnum(path, location string, value string)", res) 277 assertInCode(t, k+") validateCats(", res) 278 assertInCode(t, "m.validateNameEnum(\"name\", \"body\", *m.Name)", res) 279 assertInCode(t, "m.validateFlowerEnum(\"flower\", \"body\", m.Flower)", res) 280 assertInCode(t, "m.validateFlourEnum(\"flour\", \"body\", m.Flour)", res) 281 assertInCode(t, "m.validateWolvesEnum(\"wolves\", \"body\", m.Wolves)", res) 282 assertInCode(t, "m.validateWolvesValueEnum(\"wolves\"+\".\"+k, \"body\", m.Wolves[k])", res) 283 assertInCode(t, "m.validateCatsItemsEnum(\"cats\"+\".\"+strconv.Itoa(i), \"body\", m.Cats[i])", res) 284 285 // small naming differences may be found between the expand and the flatten version of spec 286 namingDifference := "Tuple0" 287 pathDifference := "P" 288 if strings.Contains(fixture, "flattened") { 289 // when expanded, all defs are in the same template for AdditionalItems 290 schema := definitions["objectThingLions"] 291 genModel, err = makeGenDefinition("ObjectThingLions", "models", schema, specDoc, opts) 292 require.NoError(t, err) 293 294 buf = bytes.NewBuffer(nil) 295 err := templates.MustGet("model").Execute(buf, genModel) 296 require.NoError(t, err) 297 298 ff, err := opts.LanguageOpts.FormatContent("object_thing_lions.go", buf.Bytes()) 299 require.NoErrorf(t, err, buf.String()) 300 301 res = string(ff) 302 namingDifference = "" 303 pathDifference = "" 304 } 305 // now common check resumes 306 assertInCode(t, "var objectThingLions"+namingDifference+"TypeP0PropEnum []interface{}", res) 307 assertInCode(t, "var objectThingLions"+namingDifference+"TypeP1PropEnum []interface{}", res) 308 assertInCode(t, "var objectThingLions"+namingDifference+"ItemsEnum []interface{}", res) 309 assertInCode(t, "m.validateP1Enum(\""+pathDifference+"1\", \"body\", *m.P1)", res) 310 assertInCode(t, "m.validateP0Enum(\""+pathDifference+"0\", \"body\", *m.P0)", res) 311 assertInCode(t, k+"Lions"+namingDifference+") validateObjectThingLions"+namingDifference+"ItemsEnum(path, location string, value float64)", res) 312 313 if namingDifference != "" { 314 assertInCode(t, "m.validateObjectThingLions"+namingDifference+"ItemsEnum(strconv.Itoa(i), \"body\", m.ObjectThingLions"+namingDifference+"Items[i])", res) 315 assertInCode(t, "var objectThingTypeLionsPropEnum []interface{}", res) 316 assertInCode(t, k+") validateLionsEnum(path, location string, value float64)", res) 317 } else { 318 assertInCode(t, "m.validateObjectThingLions"+namingDifference+"ItemsEnum(strconv.Itoa(i+2), \"body\", m.ObjectThingLions"+namingDifference+"Items[i])", res) 319 assertInCode(t, "var objectThingLionsItemsEnum []interface{}", res) 320 assertInCode(t, k+"Lions) validateObjectThingLionsItemsEnum(path, location string, value float64)", res) 321 } 322 }) 323 } 324 } 325 326 func TestEnum_ComputeInstance(t *testing.T) { 327 // ensure that the enum validation for the anonymous object under the delegate property 328 // is rendered. 329 330 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 331 require.NoError(t, err) 332 333 definitions := specDoc.Spec().Definitions 334 k := "ComputeInstance" 335 schema := definitions[k] 336 opts := opts() 337 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 338 require.NoError(t, err) 339 340 buf := bytes.NewBuffer(nil) 341 err = templates.MustGet("model").Execute(buf, genModel) 342 require.NoError(t, err) 343 344 ff, err := opts.LanguageOpts.FormatContent("object_thing.go", buf.Bytes()) 345 require.NoErrorf(t, err, buf.String()) 346 347 res := string(ff) 348 assertInCode(t, "Region *string `json:\"region\"`", res) 349 assertInCode(t, "var computeInstanceTypeRegionPropEnum []interface{}", res) 350 assertInCode(t, "m.validateRegionEnum(\"region\", \"body\", *m.Region)", res) 351 } 352 353 func TestEnum_Cluster(t *testing.T) { 354 defer discardOutput()() 355 356 // ensure that the enum validation for the anonymous object under the delegate property 357 // is rendered. 358 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 359 require.NoError(t, err) 360 361 definitions := specDoc.Spec().Definitions 362 k := "Cluster" 363 schema := definitions[k] 364 opts := opts() 365 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 366 require.NoError(t, err) 367 368 buf := bytes.NewBuffer(nil) 369 err = templates.MustGet("model").Execute(buf, genModel) 370 require.NoError(t, err) 371 372 ff, err := opts.LanguageOpts.FormatContent("object_thing.go", buf.Bytes()) 373 require.NoErrorf(t, err, buf.String()) 374 375 res := string(ff) 376 assertInCode(t, "Data *ClusterData `json:\"data\"`", res) 377 assertInCode(t, `ClusterDataStatusScheduled string = "scheduled"`, res) 378 assertInCode(t, `ClusterDataStatusBuilding string = "building"`, res) 379 assertInCode(t, `ClusterDataStatusUp string = "up"`, res) 380 assertInCode(t, `ClusterDataStatusDeleting string = "deleting"`, res) 381 assertInCode(t, `ClusterDataStatusExited string = "exited"`, res) 382 assertInCode(t, `ClusterDataStatusError string = "error"`, res) 383 } 384 385 func TestEnum_NewPrototype(t *testing.T) { 386 // ensure that the enum validation for the anonymous object under the delegate property 387 // is rendered. 388 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 389 require.NoError(t, err) 390 391 definitions := specDoc.Spec().Definitions 392 k := "NewPrototype" 393 schema := definitions[k] 394 opts := opts() 395 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 396 require.NoError(t, err) 397 398 buf := bytes.NewBuffer(nil) 399 err = templates.MustGet("model").Execute(buf, genModel) 400 require.NoError(t, err) 401 402 ff, err := opts.LanguageOpts.FormatContent("object_thing.go", buf.Bytes()) 403 require.NoErrorf(t, err, buf.String()) 404 405 res := string(ff) 406 assertInCode(t, "ActivatingUser *NewPrototypeActivatingUser `json:\"activating_user,omitempty\"`", res) 407 assertInCode(t, "Delegate *NewPrototypeDelegate `json:\"delegate\"`", res) 408 assertInCode(t, "Role *string `json:\"role\"`", res) 409 assertInCode(t, "var newPrototypeTypeRolePropEnum []interface{}", res) 410 assertInCode(t, "var newPrototypeDelegateTypeKindPropEnum []interface{}", res) 411 assertInCode(t, "m.validateDelegate(formats)", res) 412 assertInCode(t, "m.validateRole(formats)", res) 413 assertInCode(t, "m.validateActivatingUser(formats)", res) 414 assertInCode(t, "m.Delegate.Validate(formats)", res) 415 assertInCode(t, "m.ActivatingUser.Validate(formats)", res) 416 } 417 418 func TestEnum_Issue265(t *testing.T) { 419 specDoc, err := loads.Spec("../fixtures/codegen/sodabooth.json") 420 require.NoError(t, err) 421 422 definitions := specDoc.Spec().Definitions 423 k := "SodaBrand" 424 schema := definitions[k] 425 opts := opts() 426 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 427 require.NoError(t, err) 428 429 buf := bytes.NewBuffer(nil) 430 err = templates.MustGet("model").Execute(buf, genModel) 431 require.NoError(t, err) 432 433 ff, err := opts.LanguageOpts.FormatContent("soda_brand.go", buf.Bytes()) 434 require.NoErrorf(t, err, buf.String()) 435 436 res := string(ff) 437 assert.Equal(t, 1, strings.Count(res, "m.validateSodaBrandEnum")) 438 } 439 440 func TestGenerateModel_Issue303(t *testing.T) { 441 specDoc, e := loads.Spec("../fixtures/enhancements/303/swagger.yml") 442 require.NoError(t, e) 443 444 opts := opts() 445 tt := templateTest{t, templates.MustGet("model").Lookup("schema")} 446 definitions := specDoc.Spec().Definitions 447 for name, schema := range definitions { 448 genModel, err := makeGenDefinition(name, "models", schema, specDoc, opts) 449 require.NoError(t, err) 450 451 assert.Equal(t, name, genModel.Name) 452 assert.Equal(t, name, genModel.GoType) 453 assert.True(t, genModel.IsEnumCI) 454 455 extension := genModel.Extensions["x-go-enum-ci"] 456 require.NotNil(t, extension) 457 458 xGoEnumCI, ok := extension.(bool) 459 assert.True(t, ok) 460 assert.True(t, xGoEnumCI) 461 462 buf := bytes.NewBuffer(nil) 463 require.NoError(t, tt.template.Execute(buf, genModel)) 464 465 ff, err := opts.LanguageOpts.FormatContent("case_insensitive_enum_definition.go", buf.Bytes()) 466 require.NoErrorf(t, err, buf.String()) 467 468 res := string(ff) 469 assertInCode(t, `if err := validate.EnumCase(path, location, value, vegetableEnum, false); err != nil {`, res) 470 } 471 } 472 473 func TestEnum_Issue325(t *testing.T) { 474 specDoc, err := loads.Spec("../fixtures/codegen/sodabooths.json") 475 require.NoError(t, err) 476 477 definitions := specDoc.Spec().Definitions 478 k := "SodaBrand" 479 schema := definitions[k] 480 opts := opts() 481 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 482 require.NoError(t, err) 483 484 buf := bytes.NewBuffer(nil) 485 err = templates.MustGet("model").Execute(buf, genModel) 486 require.NoError(t, err) 487 488 ff, err := opts.LanguageOpts.FormatContent("soda_brand.go", buf.Bytes()) 489 require.NoErrorf(t, err, buf.String()) 490 491 res := string(ff) 492 assertInCode(t, "var sodaBrandEnum []interface{}", res) 493 assertInCode(t, "err := validate.EnumCase(path, location, value, sodaBrandEnum, true)", res) 494 assert.Equal(t, 1, strings.Count(res, "m.validateSodaBrandEnum")) 495 496 k = "Soda" 497 schema = definitions[k] 498 genModel, err = makeGenDefinition(k, "models", schema, specDoc, opts) 499 require.NoError(t, err) 500 501 buf = bytes.NewBuffer(nil) 502 err = templates.MustGet("model").Execute(buf, genModel) 503 require.NoError(t, err) 504 505 ff, err = opts.LanguageOpts.FormatContent("soda.go", buf.Bytes()) 506 require.NoErrorf(t, err, buf.String()) 507 508 res = string(ff) 509 assertInCode(t, "var sodaTypeBrandPropEnum []interface{}", res) 510 assertInCode(t, "err := validate.EnumCase(path, location, value, sodaTypeBrandPropEnum, true)", res) 511 assert.Equal(t, 1, strings.Count(res, "m.validateBrandEnum")) 512 } 513 514 func TestEnum_Issue352(t *testing.T) { 515 specDoc, err := loads.Spec("../fixtures/codegen/todolist.enums.yml") 516 require.NoError(t, err) 517 518 definitions := specDoc.Spec().Definitions 519 k := "slp_action_enum" 520 schema := definitions[k] 521 opts := opts() 522 genModel, err := makeGenDefinition(k, "models", schema, specDoc, opts) 523 require.NoError(t, err) 524 525 buf := bytes.NewBuffer(nil) 526 err = templates.MustGet("model").Execute(buf, genModel) 527 require.NoError(t, err) 528 529 ff, err := opts.LanguageOpts.FormatContent("slp_action_enum.go", buf.Bytes()) 530 require.NoErrorf(t, err, buf.String()) 531 532 res := string(ff) 533 assertInCode(t, ", value SlpActionEnum", res) 534 }