Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Duplicate description on empty additionalProperties #966

Open
Devon-White opened this issue Sep 13, 2024 · 0 comments
Open

Duplicate description on empty additionalProperties #966

Devon-White opened this issue Sep 13, 2024 · 0 comments
Labels
bug Something isn't working

Comments

@Devon-White
Copy link

Devon-White commented Sep 13, 2024

Describe the Bug

When a property is defined as an object with additionalProperties and no properties are defined, the description is duplicated at both the top-level object and the additionalProperties level.

This does not occur in the following scenarios:

  1. When a description is provided at both the top level and additionalProperties.
    • Example workaround:

      workaround:
        allOf:
          - $ref: '#/components/schemas/WorkAroundModel'
        description: Workaround

      And the ref:

      WorkAroundModel:
        type: object
        additionalProperties: {}
        description: Workaround

This workaround forces the object to render without a additionalProperties (property name*), though it’s not ideal. We cannot omit additionalProperties due to the need for valid examples in TypeSpec.

  1. When additionalProperties contains valid properties, the duplication does not occur.

Expected Behavior

The description should not be duplicated. The additionalProperties section should either stay empty or have a preset description explaining that the property name is user-defined.

Current Behavior

The top-level object description is duplicated at the additionalProperties level when additionalProperties is empty.

Possible Solutions

  1. Create a separate ref:

    • As outlined above, you can use a ref to handle the empty additionalProperties object and providing it a description.
  2. Skip additionalProperties:

    • Omitting additionalProperties altogether would resolve the issue, but since we are using TypeSpec, we need the type to align for the examples. Additionally, this wouldn't be 100% accurate to the API.
  3. Fix in the generator:

    • Ideally, a fix for the doc generator should account for this.

Steps to Reproduce

Test schema:

openapi: 3.0.0
info:
  title: Bug Test
  description: Testing Bug
  version: 0.0.0
tags:
  - name: Test
paths:
  /with-bug:
    post:
      operationId: TestBug_create
      summary: With Bug
      description: |-
        This is to test an `additionalProperties` bug.
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReturnType'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WithBug'
components:
  schemas:
    ReturnType:
      type: object
      required: [test1, test2]
      properties:
        test1:
          type: string
          enum: [Yes]
        test2:
          type: string
          enum: [Test]
    WithBug:
      type: object
      required: [with_bug, workaround, workaround_with_bug, additional_props_without_bug]
      properties:
        with_bug:
          type: object
          additionalProperties: {}
          description: Bug with additionalProperties
        workaround:
          allOf:
            - $ref: '#/components/schemas/WorkAroundModel'
          description: Workaround
        workaround_with_bug:
          $ref: '#/components/schemas/WorkAroundModel'
        additional_props_without_bug:
          type: object
          additionalProperties:
            type: object
            properties:
              test3:
                type: string
                enum: [Additional Prop Test]
          description: Test with additional props
    WorkAroundModel:
      type: object
      additionalProperties: {}
      description: Workaround
  1. Generate documentation from this schema.
  2. Observe the duplicated descriptions.

Screenshots

image

Additional Context

Does not seem to render the duplicate description in a SWAGGER editor/viewer.

image

Environment

  • Version: 3.0.2 & 4.0.1
@Devon-White Devon-White added the bug Something isn't working label Sep 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant