diff --git a/lib/paper_trail/serializer.ex b/lib/paper_trail/serializer.ex index dc65daaa..33e52c51 100644 --- a/lib/paper_trail/serializer.ex +++ b/lib/paper_trail/serializer.ex @@ -148,6 +148,9 @@ defmodule PaperTrail.Serializer do end end + @spec serialize_model_changes(nil) :: nil + defp serialize_model_changes(nil), do: nil + @spec serialize_model_changes(Ecto.Changeset.t()) :: map() defp serialize_model_changes(%Ecto.Changeset{data: %schema{}} = changeset) do field_values = serialize_model_field_changes(changeset) diff --git a/test/paper_trail/base_test.exs b/test/paper_trail/base_test.exs index de01e8b4..01e5ca10 100644 --- a/test/paper_trail/base_test.exs +++ b/test/paper_trail/base_test.exs @@ -573,6 +573,31 @@ defmodule PaperTrailTest do assert old_person == person_before_deletion end + test "works with nil embed" do + {:ok, target_company_insertion} = + create_company_with_version(%{ + name: "Another Company Corp.", + is_active: true, + address: "Sesame street 100/3, 101010" + }) + + {:ok, insert_person_result} = + Person.changeset(%Person{}, %{ + first_name: "Izel", + last_name: "Nakri", + gender: true, + company_id: target_company_insertion[:model].id, + singular: %{} + }) + |> PaperTrail.insert(origin: "admin") + + assert {:ok, insert_person_result} = + Person.changeset(insert_person_result[:model], %{ + singular: nil + }) + |> PaperTrail.update(origin: "admin") + end + defp create_user do User.changeset(%User{}, %{token: "fake-token", username: "izelnakri"}) |> @repo.insert! end diff --git a/test/support/simple_models.exs b/test/support/simple_models.exs index 59cb75ed..87f0106d 100644 --- a/test/support/simple_models.exs +++ b/test/support/simple_models.exs @@ -97,7 +97,7 @@ defmodule SimplePerson do belongs_to(:company, SimpleCompany, foreign_key: :company_id) - embeds_one(:singular, SimpleEmbed) + embeds_one(:singular, SimpleEmbed, on_replace: :update) embeds_many(:plural, SimpleEmbed) timestamps()