swagger-api / swagger-codegen

swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.
http://swagger.io
Apache License 2.0
16.93k stars 6.03k forks source link

[PHP] enum values generated without comma #12411

Open that-guy-iain opened 3 months ago

that-guy-iain commented 3 months ago
Description

Enums returns invalid code

public function getFailureReasonAllowableValues()
    {
        return [
            self::FAILURE_REASON_EXPIRED_CARD
            self::FAILURE_REASON_INVALID_DETAILS
            self::FAILURE_REASON_FRAUD
            self::FAILURE_REASON_AUTHENTICATION_REQUIRED
            self::FAILURE_REASON_INVALID_CARD
            self::FAILURE_REASON_GENERAL_DECLINE
            self::FAILURE_REASON_CONTACT_PROVIDER
            self::FAILURE_REASON_LACK_OF_FUNDS
        ];
    }
Swagger-codegen version

Swagger-codegen-v3 docker:latest

Swagger declaration file content or url
description: Payment response
content:
  application/json:
    schema:
      type: object
      properties:
        paid:
          type: boolean
        failure_reason:
          type: string
          nullable: true
          enum: [expired_card, invalid_details, fraud, authentication_required, invalid_card, general_decline, contact_provider, lack_of_funds]
Command line used for generation
docker run --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli-v3:latest generate     -i /local/openapi.yaml     -l php     -o /local/out/php --invoker-package=BillaBear --git-user-id=billabear --git-repo-id=php-sdk
Related issues/PRs

This appears to be related https://github.com/swagger-api/swagger-codegen/issues/12404

loneregister commented 2 months ago

12404 is a circular reference, and while generating client code from swagger.io, I still end up with invalid enums.

loneregister commented 2 months ago

Example definition as documented:

paths:
  /products:
    get:
      parameters:
      - in: query
        name: color
        required: true
        schema:
          $ref: '#/components/schemas/Color'
      responses:
        '200':
          description: OK
components:
  schemas:
    Color:
      type: string
      enum:
        - black
        - white
        - red
        - green
        - blue

Specific example of real use:

SponsoredProductsLocale:
      type: string
      enum:
        - en_AE
        - de_DE
        - ar_EG
        - es_ES
        - fr_FR
        - en_GB
        - it_IT
        - nl_NL
        - pl_PL
        - en_SA
        - sv_SE
        - tr_TR
        - en_AU
        - en_IN
        - ja_JP
        - en_SG
        - pt_BR
        - en_CA
        - es_MX
        - en_US

In PHP - as generated by editor.swagger.io produces an invalid enum type of:

public static function getAllowableEnumValues()
    {
        return [
            self::EN_AE
            self::DE_DE
            self::AR_EG
            self::ES_ES
            self::FR_FR
            self::EN_GB
            self::IT_IT
            self::NL_NL
            self::PL_PL
            self::EN_SA
            self::SV_SE
            self::TR_TR
            self::EN_AU
            self::EN_IN
            self::JA_JP
            self::EN_SG
            self::PT_BR
            self::EN_CA
            self::ES_MX
            self::EN_US
        ];
    }

The proper output in PHP must be:

public static function getAllowableEnumValues()
    {
        return [
            self::EN_AE,
            self::DE_DE,
            self::AR_EG,
            self::ES_ES,
            self::FR_FR,
            self::EN_GB,
            self::IT_IT,
            self::NL_NL,
            self::PL_PL,
            self::EN_SA,
            self::SV_SE,
            self::TR_TR,
            self::EN_AU,
            self::EN_IN,
            self::JA_JP,
            self::EN_SG,
            self::PT_BR,
            self::EN_CA,
            self::ES_MX,
            self::EN_US,
        ];
    }