Skip to content

Commit e76f0f8

Browse files
committed
fix: identifier validation should honor :as aliases
1 parent 1593154 commit e76f0f8

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

lib/spark/builder/entity.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,10 @@ defmodule Spark.Builder.Entity do
262262
if Keyword.has_key?(schema, :*) do
263263
:ok
264264
else
265-
schema_keys = Keyword.keys(schema)
265+
schema_keys =
266+
Enum.map(schema, fn {key, opts} ->
267+
opts[:as] || key
268+
end)
266269

267270
auto_keys =
268271
case auto do

test/spark/builder/entity_test.exs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,27 @@ defmodule Spark.Builder.EntityTest do
280280
|> Entity.build()
281281
end
282282

283+
test "allows identifier referencing :as alias" do
284+
{:ok, _entity} =
285+
Entity.new(:attr, TestTarget,
286+
schema: [source_field: [type: :atom, as: :source]],
287+
identifier: :source
288+
)
289+
|> Entity.build()
290+
end
291+
292+
test "rejects identifier referencing original key when :as alias exists" do
293+
result =
294+
Entity.new(:attr, TestTarget,
295+
schema: [source_field: [type: :atom, as: :source]],
296+
identifier: :source_field
297+
)
298+
|> Entity.build()
299+
300+
assert {:error, message} = result
301+
assert message =~ "identifier references undefined"
302+
end
303+
283304
test "validates args with optional format" do
284305
{:ok, _entity} =
285306
Entity.new(:attr, TestTarget,

0 commit comments

Comments
 (0)