Skip to content

Commit bc1f95d

Browse files
committed
Fix warning in LiveViewTest when keyed comprehension is empty (#3982)
Closes #3978. Cu-Authored-By: Victor Rodrigues <vitumail@gmail.com>
1 parent d231aff commit bc1f95d

File tree

2 files changed

+41
-15
lines changed

2 files changed

+41
-15
lines changed

lib/phoenix_live_view/test/diff.ex

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,19 +77,23 @@ defmodule Phoenix.LiveViewTest.Diff do
7777
target_keyed = target[@keyed]
7878

7979
merged_keyed =
80-
0..(source_keyed[@keyed_count] - 1)
81-
|> Map.new(fn key ->
82-
value =
83-
case source_keyed[key] do
84-
nil -> target_keyed[key]
85-
value when is_number(value) -> target_keyed[value]
86-
value when is_map(value) -> deep_merge_diff(target_keyed[key], value)
87-
[old_key, value] -> deep_merge_diff(target_keyed[old_key], value)
80+
case source_keyed[@keyed_count] do
81+
0 ->
82+
%{@keyed_count => 0}
83+
84+
count ->
85+
for pos <- 0..(count - 1), into: %{@keyed_count => count} do
86+
value =
87+
case source_keyed[pos] do
88+
nil -> target_keyed[pos]
89+
value when is_number(value) -> target_keyed[value]
90+
value when is_map(value) -> deep_merge_diff(target_keyed[pos], value)
91+
[old_pos, value] -> deep_merge_diff(target_keyed[old_pos], value)
92+
end
93+
94+
{pos, value}
8895
end
89-
90-
{key, value}
91-
end)
92-
|> Map.put(@keyed_count, source_keyed[@keyed_count])
96+
end
9397

9498
Map.put(target, @keyed, merged_keyed)
9599
end

test/phoenix_live_view/test/diff_test.exs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,52 @@ defmodule Phoenix.LiveViewTest.DiffTest do
2020
0 => %{0 => "A"},
2121
1 => %{0 => "B"},
2222
2 => %{0 => "C", 1 => %{0 => "var1", :s => ["", ""]}},
23-
:kc => 3
23+
kc: 3
2424
}
2525
}
2626

2727
diff = %{
2828
k: %{
2929
0 => 1,
3030
1 => [2, %{1 => %{0 => "var2"}}],
31-
:kc => 2
31+
kc: 2
3232
}
3333
}
3434

3535
result = %{
3636
k: %{
3737
0 => %{0 => "B"},
3838
1 => %{0 => "C", 1 => %{0 => "var2", :s => ["", ""]}},
39-
:kc => 2
39+
kc: 2
4040
},
4141
streams: []
4242
}
4343

4444
assert Diff.merge_diff(base, diff) == result
4545
end
4646

47+
test "no warning when keyed count is 0" do
48+
base = %{
49+
k: %{
50+
0 => %{0 => "A"},
51+
1 => %{0 => "B"},
52+
2 => %{0 => "C", 1 => %{0 => "var1", :s => ["", ""]}},
53+
:kc => 3
54+
}
55+
}
56+
57+
diff = %{
58+
k: %{kc: 0}
59+
}
60+
61+
result = %{
62+
k: %{kc: 0},
63+
streams: []
64+
}
65+
66+
assert Diff.merge_diff(base, diff) == result
67+
end
68+
4769
test "ignores structs when resolving templates" do
4870
assert Diff.merge_diff(%{0 => %{}}, %{
4971
0 => %{:s => 1, 0 => %__MODULE__{foo: :bar}},

0 commit comments

Comments
 (0)