From dbb4a38ea327656aa42ce51a2f7423ee8013554d Mon Sep 17 00:00:00 2001 From: Alan Heywood Date: Tue, 9 Jan 2024 09:08:17 +1000 Subject: [PATCH] fix: only put keywords to be interpolated in message in error vars (#821) * fix: only put keywords to be interpolated in message in error vars --------- Co-authored-by: Zach Daniel --- lib/ash/error/exception.ex | 6 +++++- lib/ash/type/keyword.ex | 2 +- lib/ash/type/map.ex | 2 +- test/calculations/calculation_test.exs | 1 - test/type/keyword_test.exs | 10 +++------- test/type/map_test.exs | 10 +++------- 6 files changed, 13 insertions(+), 18 deletions(-) diff --git a/lib/ash/error/exception.ex b/lib/ash/error/exception.ex index 1aca65b2..b73dbbb3 100644 --- a/lib/ash/error/exception.ex +++ b/lib/ash/error/exception.ex @@ -55,7 +55,11 @@ defmodule Ash.Error.Exception do } end) - super(opts) + super(opts) |> Map.update(:vars, [], &clean_vars/1) + end + + defp clean_vars(vars) do + vars |> Kernel.||([]) |> Keyword.drop([:field, :message, :path]) end defoverridable exception: 1, message: 1 diff --git a/lib/ash/type/keyword.ex b/lib/ash/type/keyword.ex index 476e4669..d840dbc2 100644 --- a/lib/ash/type/keyword.ex +++ b/lib/ash/type/keyword.ex @@ -175,7 +175,7 @@ defmodule Ash.Type.Keyword do {:ok, [{field, field_value} | result]} {:error, errors} -> - {:error, Enum.map(errors, fn error -> [field: field, message: error[:message]] end)} + {:error, Enum.map(errors, fn error -> Keyword.put(error, :field, field) end)} end :error -> diff --git a/lib/ash/type/map.ex b/lib/ash/type/map.ex index 0fd05cb0..3672981b 100644 --- a/lib/ash/type/map.ex +++ b/lib/ash/type/map.ex @@ -154,7 +154,7 @@ defmodule Ash.Type.Map do {:ok, Map.put(result, field, field_value)} {:error, errors} -> - {:error, Enum.map(errors, fn error -> [field: field, message: error[:message]] end)} + {:error, Enum.map(errors, fn error -> Keyword.put(error, :field, field) end)} end :error -> diff --git a/test/calculations/calculation_test.exs b/test/calculations/calculation_test.exs index e7290dda..65392081 100644 --- a/test/calculations/calculation_test.exs +++ b/test/calculations/calculation_test.exs @@ -978,7 +978,6 @@ defmodule Ash.Test.CalculationTest do |> Enum.map(& &1.active) end - @tag :focus test "aggregates using calculations pass actor to calculations", %{ user1: user, actor1: actor, diff --git a/test/type/keyword_test.exs b/test/type/keyword_test.exs index 293a5cd0..d226af7c 100644 --- a/test/type/keyword_test.exs +++ b/test/type/keyword_test.exs @@ -122,7 +122,7 @@ defmodule Type.KeywordTest do changeset: nil, query: nil, error_context: [], - vars: [field: :foo, message: "field must be present", path: [:metadata]], + vars: [], path: [:metadata] } ] = changeset.errors @@ -146,11 +146,7 @@ defmodule Type.KeywordTest do changeset: nil, query: nil, error_context: [], - vars: [ - field: :bar, - message: "must be more than or equal to %{min}", - path: [:metadata] - ], + vars: [min: 0], path: [:metadata] } ] = changeset.errors @@ -200,7 +196,7 @@ defmodule Type.KeywordTest do changeset: nil, query: nil, error_context: [], - vars: [field: :foo, message: "value must not be nil", path: [:metadata]], + vars: [], path: [:metadata] } ] = changeset.errors diff --git a/test/type/map_test.exs b/test/type/map_test.exs index b90642b5..cebb3e68 100644 --- a/test/type/map_test.exs +++ b/test/type/map_test.exs @@ -124,7 +124,7 @@ defmodule Type.MapTest do changeset: nil, query: nil, error_context: [], - vars: [field: :foo, message: "field must be present", path: [:metadata]], + vars: [], path: [:metadata] } ] = changeset.errors @@ -148,11 +148,7 @@ defmodule Type.MapTest do changeset: nil, query: nil, error_context: [], - vars: [ - field: :bar, - message: "must be more than or equal to %{min}", - path: [:metadata] - ], + vars: [min: 0], path: [:metadata] } ] = changeset.errors @@ -202,7 +198,7 @@ defmodule Type.MapTest do changeset: nil, query: nil, error_context: [], - vars: [field: :foo, message: "value must not be nil", path: [:metadata]], + vars: [], path: [:metadata] } ] = changeset.errors