@@ -228,6 +228,49 @@ defmodule PolymorphicEmbedTest do
228228 insert_result
229229 end
230230
231+ test "infer type from parent field and cast an empty embed" do
232+ generator = :polymorphic
233+ reminder_module = get_module ( Reminder , generator )
234+
235+ reminder_attrs = % {
236+ date: DateTime . utc_now ( ) ,
237+ text: "This is a reminder #{ generator } " ,
238+ type: "not_provided" ,
239+ channel4: % { }
240+ }
241+
242+ insert_result =
243+ struct ( reminder_module )
244+ |> reminder_module . changeset ( reminder_attrs )
245+ |> Repo . insert ( )
246+
247+ assert { :ok , % { id: id , channel4: % PolymorphicEmbed.Channel.NotProvided { } } } =
248+ insert_result
249+
250+ assert % { channel4: % PolymorphicEmbed.Channel.NotProvided { } } = Repo . get! ( reminder_module , id )
251+ end
252+
253+ test "cannot cast an empty embed when no type can be inferred" do
254+ generator = :polymorphic
255+ reminder_module = get_module ( Reminder , generator )
256+
257+ reminder_attrs = % {
258+ date: DateTime . utc_now ( ) ,
259+ text: "This is a reminder #{ generator } " ,
260+ channel2: % { }
261+ }
262+
263+ insert_result =
264+ struct ( reminder_module )
265+ |> reminder_module . changeset ( reminder_attrs )
266+ |> Repo . insert ( )
267+
268+ assert { :error , changeset } = insert_result
269+
270+ assert changeset . errors == [ channel2: { "is invalid" , [ ] } ]
271+ refute changeset . valid?
272+ end
273+
231274 test "validations before casting polymorphic embed still work" do
232275 for generator <- @ generators do
233276 reminder_module = get_module ( Reminder , generator )
0 commit comments