File tree Expand file tree Collapse file tree 4 files changed +39
-4
lines changed
Expand file tree Collapse file tree 4 files changed +39
-4
lines changed Original file line number Diff line number Diff line change @@ -221,8 +221,13 @@ defmodule PolymorphicEmbed do
221221 _ -> false
222222 end )
223223
224- Ecto.Changeset . put_change ( changeset , field , embeds )
225- |> Map . put ( :valid? , ! any_invalid? )
224+ changeset = Ecto.Changeset . put_change ( changeset , field , embeds )
225+
226+ if any_invalid? do
227+ Map . put ( changeset , :valid? , false )
228+ else
229+ changeset
230+ end
226231 end
227232 end
228233
Original file line number Diff line number Diff line change @@ -73,6 +73,36 @@ defmodule PolymorphicEmbedTest do
7373 end
7474 end
7575
76+ test "validations before casting polymorphic embed still work" do
77+ for polymorphic? <- [ false , true ] do
78+ reminder_module = get_module ( Reminder , polymorphic? )
79+
80+ sms_reminder_attrs = % {
81+ text: "This is an SMS reminder #{ polymorphic? } " ,
82+ contexts: [
83+ % {
84+ __type__: "location" ,
85+ address: "Foo St."
86+ } ,
87+ % {
88+ __type__: "location" ,
89+ address: "Bar St."
90+ }
91+ ]
92+ }
93+
94+ insert_result =
95+ struct ( reminder_module )
96+ |> reminder_module . changeset ( sms_reminder_attrs )
97+ |> Repo . insert ( )
98+
99+ assert { :error , changeset } = insert_result
100+
101+ assert changeset . errors == [ date: { "can't be blank" , [ validation: :required ] } ]
102+ refute changeset . valid?
103+ end
104+ end
105+
76106 test "invalid values" do
77107 for polymorphic? <- [ false , true ] do
78108 reminder_module = get_module ( Reminder , polymorphic? )
Original file line number Diff line number Diff line change @@ -17,9 +17,9 @@ defmodule PolymorphicEmbed.Regular.Reminder do
1717 def changeset ( struct , values ) do
1818 struct
1919 |> cast ( values , [ :date , :text ] )
20+ |> validate_required ( :date )
2021 |> cast_embed ( :channel )
2122 |> cast_embed ( :contexts )
22- |> validate_required ( :date )
2323 end
2424
2525 def custom_changeset ( struct , values ) do
Original file line number Diff line number Diff line change @@ -35,9 +35,9 @@ defmodule PolymorphicEmbed.Reminder do
3535 def changeset ( struct , values ) do
3636 struct
3737 |> cast ( values , [ :date , :text ] )
38+ |> validate_required ( :date )
3839 |> cast_polymorphic_embed ( :channel )
3940 |> cast_polymorphic_embed ( :contexts )
40- |> validate_required ( :date )
4141 end
4242
4343 def custom_changeset ( struct , values ) do
You can’t perform that action at this time.
0 commit comments