Skip to content

Commit 384d588

Browse files
authored
fix validation entry for unsafe_validate_unique/4 (fixes #3752) (#3753)
1 parent 652894c commit 384d588

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

lib/ecto/changeset.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1868,7 +1868,7 @@ defmodule Ecto.Changeset do
18681868
%Ecto.Changeset{} ->
18691869
raise ArgumentError, "unsafe_validate_unique/4 does not work with schemaless changesets"
18701870
end
1871-
changeset = %{changeset | validations: [{:unsafe_unique, fields} | validations]}
1871+
changeset = %{changeset | validations: [{hd(fields), {:unsafe_unique, fields: fields}} | validations]}
18721872

18731873
where_clause = for field <- fields do
18741874
{field, get_field(changeset, field)}
@@ -3073,7 +3073,7 @@ defimpl Inspect, for: Ecto.Changeset do
30733073
end
30743074

30753075
redacted_fields = case data do
3076-
%type{} ->
3076+
%type{} ->
30773077
if function_exported?(type, :__schema__, 1) do
30783078
type.__schema__(:redact_fields)
30793079
else

test/ecto/changeset_test.exs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,8 +1349,8 @@ defmodule Ecto.ChangesetTest do
13491349
end
13501350
end
13511351

1352-
test "validate_number/3 with bad value" do
1353-
assert_raise ArgumentError, "expected value to be of type Decimal, Integer or Float, got: \"Oops\"", fn ->
1352+
test "validate_number/3 with bad value" do
1353+
assert_raise ArgumentError, "expected value to be of type Decimal, Integer or Float, got: \"Oops\"", fn ->
13541354
validate_number(changeset(%{"virtual" => "Oops"}), :virtual, greater_than: 0)
13551355
end
13561356
end
@@ -1502,6 +1502,8 @@ defmodule Ecto.ChangesetTest do
15021502
assert changeset.errors ==
15031503
[title: {"has already been taken", validation: :unsafe_unique, fields: [:title]}]
15041504

1505+
assert changeset.validations == [title: {:unsafe_unique, fields: [:title]}]
1506+
15051507
Process.put(:test_repo_all_results, context.no_dup_result)
15061508
changeset = unsafe_validate_unique(context.base_changeset, :title, TestRepo)
15071509
assert changeset.valid?
@@ -1517,6 +1519,8 @@ defmodule Ecto.ChangesetTest do
15171519
{"has already been taken", validation: :unsafe_unique, fields: [:title, :body]}
15181520
]
15191521

1522+
assert changeset.validations == [title: {:unsafe_unique, fields: [:title, :body]}]
1523+
15201524
Process.put(:test_repo_all_results, context.no_dup_result)
15211525
changeset = unsafe_validate_unique(context.base_changeset, [:title, :body], TestRepo)
15221526
assert changeset.valid?

0 commit comments

Comments
 (0)