diff --git a/lib/open_api_spex/cast/integer.ex b/lib/open_api_spex/cast/integer.ex index 2b88adbf..461bfd3f 100644 --- a/lib/open_api_spex/cast/integer.ex +++ b/lib/open_api_spex/cast/integer.ex @@ -9,8 +9,8 @@ defmodule OpenApiSpex.Cast.Integer do end end - def cast(%{value: value}) when is_number(value) do - {:ok, round(value)} + def cast(%{value: value} = ctx) when is_number(value) do + cast(%{ctx | value: round(value)}) end def cast(%{value: value} = ctx) when is_binary(value) do diff --git a/test/operation2_test.exs b/test/operation2_test.exs index b8c8ace0..668521c0 100644 --- a/test/operation2_test.exs +++ b/test/operation2_test.exs @@ -148,6 +148,27 @@ defmodule OpenApiSpex.Operation2Test do assert error.name == :name end + test "validate invalid value for integer range" do + parameter = + Operation.parameter( + :age, + :query, + %Schema{type: :integer, minimum: 1, maximum: 99}, + "Filter by user age", + required: true + ) + + operation = %{OperationFixtures.user_index() | parameters: [parameter]} + + assert {:error, [error]} = do_index_cast(%{"age" => 100}, operation: operation) + assert %Error{} = error + assert error.reason == :maximum + + assert {:error, [error]} = do_index_cast(%{"age" => 0}, operation: operation) + assert %Error{} = error + assert error.reason == :minimum + end + defp do_index_cast(query_params, opts \\ []) do conn = :get