diff --git a/test/phoenix_live_view/integrations/stream_test.exs b/test/phoenix_live_view/integrations/stream_test.exs index 7edc189655..ae4b4c4efd 100644 --- a/test/phoenix_live_view/integrations/stream_test.exs +++ b/test/phoenix_live_view/integrations/stream_test.exs @@ -126,6 +126,23 @@ defmodule Phoenix.LiveView.StreamTest do assert lv |> element("#users div:last-child") |> render =~ "last_user" end + test "properly orders elements on reset", %{conn: conn} do + {:ok, lv, _} = live(conn, "/stream") + + assert lv |> render() |> users_in_dom("users") == [ + {"users-1", "chris"}, + {"users-2", "callan"} + ] + + lv |> render_hook("reset-users-reorder", %{}) + + assert lv |> render() |> users_in_dom("users") == [ + {"users-3", "peter"}, + {"users-1", "chris"}, + {"users-4", "mona"} + ] + end + test "stream reset on patch", %{conn: conn} do {:ok, lv, _html} = live(conn, "/healthy/fruits") diff --git a/test/support/live_views/streams.ex b/test/support/live_views/streams.ex index 64612548b2..e1175e8f0b 100644 --- a/test/support/live_views/streams.ex +++ b/test/support/live_views/streams.ex @@ -89,6 +89,10 @@ defmodule Phoenix.LiveViewTest.StreamLive do {:noreply, stream(socket, :users, [], reset: true)} end + def handle_event("reset-users-reorder", %{}, socket) do + {:noreply, stream(socket, :users, [user(3, "peter"), user(1, "chris"), user(4, "mona")], reset: true)} + end + def handle_event("stream-users", _, socket) do {:noreply, stream(socket, :users, @users)} end