Skip to content

[elixir] Fixes BadMapError for header parameters#1537

Merged
wing328 merged 2 commits intoOpenAPITools:masterfrom
cyon:elixir/header-params
Nov 27, 2018
Merged

[elixir] Fixes BadMapError for header parameters#1537
wing328 merged 2 commits intoOpenAPITools:masterfrom
cyon:elixir/header-params

Conversation

@mrmstn
Copy link
Copy Markdown
Contributor

@mrmstn mrmstn commented Nov 23, 2018

PR checklist

  • Read the contribution guidelines.
  • Ran the shell script under ./bin/ to update Petstore sample so that CIs can verify the change. (For instance, only need to run ./bin/{LANG}-petstore.sh and ./bin/security/{LANG}-petstore.sh if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in .\bin\windows\.
  • Filed the PR against the correct branch: master, 3.4.x, 4.0.x. Default: master.
  • Copied the technical committee to review the pull request if your PR is targeting a particular programming language.

Description of the PR

There's a issue with the current request_builder.ex since Tesla expects header parameters to be a map as they are unique. The request_builder.ex has in the current version no "special treatment" for the header parameters which will result in BadMapError since it tires to merge the map from tesla with the key-value list from the request_builder.

The full error message looks something like the following

iex(1)> SwaggerPetstore.Api.Invoice.get_invoice(SwaggerPetstore.Connection.new(), "123")
** (BadMapError) expected a map, got: [invoiceItemId: "123"]
    (stdlib) :maps.merge([invoiceItemId: "123"], %{"User-Agent" => "Elixir"})
    (tesla) lib/tesla/middleware/core.ex:107: anonymous fn/2 in Tesla.Middleware.Headers.merge/2
    (elixir) lib/map.ex:752: Map.update!/3
    (tesla) lib/tesla/middleware/core.ex:101: Tesla.Middleware.Headers.call/3
    (swagger_petstore) lib/swagger_petstore/api/invoice.ex:33: SwaggerPetstore.Api.Invoice.get_invoice/3

I made a small yml to reproduce the issue:

---
swagger: "2.0"
info:
  version: "1.0.0"
  title: "Swagger Petstore"
host: "petstore.swagger.io"
basePath: "/v2"
tags:
  - name: "invoice"
schemes:
  - "http"
paths:
  /invoice:
    get:
      tags:
        - "invoice"
      operationId: "getInvoice"
      parameters:
        - name: invoiceItemId
          in: header
          required: true
          type: string
      responses:
        204:
          description: successful operation

then I ran the follwing command in my iex (mix deps.get and iex -S mix)
SwaggerPetstore.Api.Invoice.get_invoice(SwaggerPetstore.Connection.new(), "123")

Could you give me the honor and check my conclusion and code @wing328 ?

@wing328 wing328 added this to the 3.3.4 milestone Nov 27, 2018
@wing328 wing328 merged commit 4eae430 into OpenAPITools:master Nov 27, 2018
@wing328
Copy link
Copy Markdown
Member

wing328 commented Dec 4, 2018

@mrmstn thanks for the PR, which has been included in the v3.3.4 release: https://twitter.com/oas_generator/status/1068772409795207168

A-Joshi pushed a commit to ihsmarkitoss/openapi-generator that referenced this pull request Feb 27, 2019
* Adds :headers as expected param mapping

* Gen Petstore
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants