Skip to content

Commit 78a1ec4

Browse files
authored
Merge pull request #106 from unifysell/feature/validate-query-param-integer-range
Missing validation for integer range on query params
2 parents 0ba6f3c + ef3a45a commit 78a1ec4

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

lib/open_api_spex/cast/integer.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ defmodule OpenApiSpex.Cast.Integer do
99
end
1010
end
1111

12-
def cast(%{value: value}) when is_number(value) do
13-
{:ok, round(value)}
12+
def cast(%{value: value} = ctx) when is_number(value) do
13+
cast(%{ctx | value: round(value)})
1414
end
1515

1616
def cast(%{value: value} = ctx) when is_binary(value) do

test/operation2_test.exs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,27 @@ defmodule OpenApiSpex.Operation2Test do
148148
assert error.name == :name
149149
end
150150

151+
test "validate invalid value for integer range" do
152+
parameter =
153+
Operation.parameter(
154+
:age,
155+
:query,
156+
%Schema{type: :integer, minimum: 1, maximum: 99},
157+
"Filter by user age",
158+
required: true
159+
)
160+
161+
operation = %{OperationFixtures.user_index() | parameters: [parameter]}
162+
163+
assert {:error, [error]} = do_index_cast(%{"age" => 100}, operation: operation)
164+
assert %Error{} = error
165+
assert error.reason == :maximum
166+
167+
assert {:error, [error]} = do_index_cast(%{"age" => 0}, operation: operation)
168+
assert %Error{} = error
169+
assert error.reason == :minimum
170+
end
171+
151172
defp do_index_cast(query_params, opts \\ []) do
152173
conn =
153174
:get

0 commit comments

Comments
 (0)