Skip to content

Commit b628b26

Browse files
committed
fix: use string names for parameters everywhere in open api spec
1 parent 33e3ddb commit b628b26

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

lib/ash_json_api/json_schema/open_api.ex

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1345,8 +1345,11 @@ if Code.ensure_loaded?(OpenApiSpex) do
13451345
fields_parameter(resource)
13461346
],
13471347
& &1
1348-
) ++
1349-
read_argument_parameters(route, resource)
1348+
)
1349+
|> Enum.concat(read_argument_parameters(route, resource))
1350+
|> Enum.map(fn param ->
1351+
Map.update!(param, :name, &to_string/1)
1352+
end)
13501353
end
13511354

13521355
defp query_parameters(%{type: type}, _resource)
@@ -1363,6 +1366,9 @@ if Code.ensure_loaded?(OpenApiSpex) do
13631366
|> Enum.filter(& &1)
13641367
|> Enum.concat(read_argument_parameters(route, resource))
13651368
|> Enum.reverse()
1369+
|> Enum.map(fn param ->
1370+
Map.update!(param, :name, &to_string/1)
1371+
end)
13661372
|> Enum.uniq_by(& &1.name)
13671373
|> Enum.reverse()
13681374
end
@@ -1390,7 +1396,7 @@ if Code.ensure_loaded?(OpenApiSpex) do
13901396
schema = resource_write_attribute_type(argument_or_attribute, resource, action.type)
13911397

13921398
%Parameter{
1393-
name: argument_or_attribute.name,
1399+
name: to_string(argument_or_attribute.name),
13941400
in: :query,
13951401
description:
13961402
argument_or_attribute.description || to_string(argument_or_attribute.name),
@@ -1412,6 +1418,9 @@ if Code.ensure_loaded?(OpenApiSpex) do
14121418
|> Enum.filter(& &1)
14131419
|> Enum.concat(query_params)
14141420
|> Enum.reverse()
1421+
|> Enum.map(fn param ->
1422+
Map.update!(param, :name, &to_string/1)
1423+
end)
14151424
|> Enum.uniq_by(& &1.name)
14161425
|> Enum.reverse()
14171426
end

test/acceptance/open_api_test.exs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ defmodule Test.Acceptance.OpenApiTest do
436436

437437
assert generic_action_schema.parameters == [
438438
%Parameter{
439-
name: :job_id,
439+
name: "job_id",
440440
in: :query,
441441
description: "job_id",
442442
required: false,
@@ -476,7 +476,7 @@ defmodule Test.Acceptance.OpenApiTest do
476476
describe "Index route" do
477477
test "filter parameter", %{open_api_spec: %OpenApi{} = api_spec} do
478478
%Operation{} = operation = api_spec.paths["/posts"].get
479-
%Parameter{} = filter = operation.parameters |> Enum.find(&(&1.name == :filter))
479+
%Parameter{} = filter = operation.parameters |> Enum.find(&(&1.name == "filter"))
480480
assert api_spec.components.schemas["author-filter-name"].properties[:contains]
481481
assert filter.in == :query
482482
assert filter.required == false
@@ -531,7 +531,7 @@ defmodule Test.Acceptance.OpenApiTest do
531531

532532
test "sort parameter", %{open_api_spec: %OpenApi{} = api_spec} do
533533
%Operation{} = operation = api_spec.paths["/posts"].get
534-
%Parameter{} = sort = operation.parameters |> Enum.find(&(&1.name == :sort))
534+
%Parameter{} = sort = operation.parameters |> Enum.find(&(&1.name == "sort"))
535535
assert sort.in == :query
536536
assert sort.required == false
537537
assert sort.style == :form
@@ -548,7 +548,7 @@ defmodule Test.Acceptance.OpenApiTest do
548548

549549
test "page parameter", %{open_api_spec: %OpenApi{} = api_spec} do
550550
%Operation{} = operation = api_spec.paths["/posts"].get
551-
%Parameter{} = page = operation.parameters |> Enum.find(&(&1.name == :page))
551+
%Parameter{} = page = operation.parameters |> Enum.find(&(&1.name == "page"))
552552
assert page.in == :query
553553
assert page.required == false
554554
assert page.style == :deepObject
@@ -567,7 +567,7 @@ defmodule Test.Acceptance.OpenApiTest do
567567
%Operation{} = operation = api_spec.paths["/posts"].get
568568

569569
%Parameter{} =
570-
include = operation.parameters |> Enum.find(&(&1.name == :include))
570+
include = operation.parameters |> Enum.find(&(&1.name == "include"))
571571

572572
assert include.in == :query
573573
assert include.required == false
@@ -580,7 +580,7 @@ defmodule Test.Acceptance.OpenApiTest do
580580

581581
test "fields parameter", %{open_api_spec: %OpenApi{} = api_spec} do
582582
%Operation{} = operation = api_spec.paths["/posts"].get
583-
%Parameter{} = fields = operation.parameters |> Enum.find(&(&1.name == :fields))
583+
%Parameter{} = fields = operation.parameters |> Enum.find(&(&1.name == "fields"))
584584
assert fields.in == :query
585585
assert fields.required == false
586586
assert fields.style == :deepObject
@@ -801,7 +801,7 @@ defmodule Test.Acceptance.OpenApiTest do
801801
%Operation{} = operation = api_spec.paths["/posts/{id}"].get
802802

803803
%Parameter{} =
804-
include = operation.parameters |> Enum.find(&(&1.name == :include))
804+
include = operation.parameters |> Enum.find(&(&1.name == "include"))
805805

806806
assert include.in == :query
807807
assert include.required == false
@@ -812,7 +812,7 @@ defmodule Test.Acceptance.OpenApiTest do
812812

813813
test "fields parameter", %{open_api_spec: %OpenApi{} = api_spec} do
814814
%Operation{} = operation = api_spec.paths["/posts/{id}"].get
815-
%Parameter{} = fields = operation.parameters |> Enum.find(&(&1.name == :fields))
815+
%Parameter{} = fields = operation.parameters |> Enum.find(&(&1.name == "fields"))
816816
assert fields.in == :query
817817
assert fields.required == false
818818
assert fields.style == :deepObject
@@ -854,7 +854,7 @@ defmodule Test.Acceptance.OpenApiTest do
854854
%Operation{} = operation = api_spec.paths["/posts"].post
855855

856856
%Parameter{} =
857-
include = operation.parameters |> Enum.find(&(&1.name == :include))
857+
include = operation.parameters |> Enum.find(&(&1.name == "include"))
858858

859859
assert include.in == :query
860860
assert include.required == false
@@ -866,7 +866,7 @@ defmodule Test.Acceptance.OpenApiTest do
866866

867867
test "fields parameter", %{open_api_spec: %OpenApi{} = api_spec} do
868868
%Operation{} = operation = api_spec.paths["/posts"].post
869-
%Parameter{} = fields = operation.parameters |> Enum.find(&(&1.name == :fields))
869+
%Parameter{} = fields = operation.parameters |> Enum.find(&(&1.name == "fields"))
870870
assert fields.in == :query
871871
assert fields.required == false
872872
assert fields.style == :deepObject

0 commit comments

Comments
 (0)