From 548247a8b753d9172a4592eefce4b27111aff19d Mon Sep 17 00:00:00 2001 From: Darren Black Date: Tue, 23 Aug 2022 00:41:25 +1000 Subject: [PATCH] fix: False default value for argument is nil in changeset (#364) --- lib/ash/changeset/changeset.ex | 6 +++++- test/changeset/changeset_test.exs | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/ash/changeset/changeset.ex b/lib/ash/changeset/changeset.ex index 148270f4..31892259 100644 --- a/lib/ash/changeset/changeset.ex +++ b/lib/ash/changeset/changeset.ex @@ -1400,7 +1400,11 @@ defmodule Ash.Changeset do @doc "Gets the value of an argument provided to the changeset" @spec get_argument(t, atom) :: term def get_argument(changeset, argument) when is_atom(argument) do - Map.get(changeset.arguments, argument) || Map.get(changeset.arguments, to_string(argument)) + if Map.has_key?(changeset.arguments, argument) do + Map.get(changeset.arguments, argument) + else + Map.get(changeset.arguments, to_string(argument)) + end end @doc "fetches the value of an argument provided to the changeset or `:error`" diff --git a/test/changeset/changeset_test.exs b/test/changeset/changeset_test.exs index 2bcdbd64..8d8b6fdf 100644 --- a/test/changeset/changeset_test.exs +++ b/test/changeset/changeset_test.exs @@ -25,6 +25,16 @@ defmodule Ash.Test.Changeset.ChangesetTest do allow_nil? false end + argument :false_optional_argument, :boolean do + allow_nil? false + default false + end + + argument :true_optional_argument, :boolean do + allow_nil? false + default true + end + validate confirm(:name, :confirm_name) end end @@ -855,6 +865,15 @@ defmodule Ash.Test.Changeset.ChangesetTest do |> Api.create!(action: :create_with_confirmation) end end + + test "optional arguments should use the default" do + changeset = + Category + |> Changeset.for_create(:create_with_confirmation) + + assert Changeset.get_argument(changeset, :true_optional_argument) == true + assert Changeset.get_argument(changeset, :false_optional_argument) == false + end end describe "for_" do