From e2b3f09fc357359d2a60ba4066223333e8352218 Mon Sep 17 00:00:00 2001 From: cstaud Date: Wed, 24 Apr 2019 10:28:08 +0200 Subject: [PATCH 1/2] test for validating invalid value for integer range --- test/operation2_test.exs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/operation2_test.exs b/test/operation2_test.exs index b8c8ace0..1bbf5bde 100644 --- a/test/operation2_test.exs +++ b/test/operation2_test.exs @@ -148,6 +148,22 @@ 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 + end + defp do_index_cast(query_params, opts \\ []) do conn = :get From ef3a45ad7b0cba5cbd9a88064a9ed09817b6ed56 Mon Sep 17 00:00:00 2001 From: cstaud Date: Wed, 24 Apr 2019 12:43:14 +0200 Subject: [PATCH 2/2] fix integer validations for query params --- lib/open_api_spex/cast/integer.ex | 4 ++-- test/operation2_test.exs | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) 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 1bbf5bde..668521c0 100644 --- a/test/operation2_test.exs +++ b/test/operation2_test.exs @@ -162,6 +162,11 @@ defmodule OpenApiSpex.Operation2Test do 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