livebook/test/livebook_web/live/apps_live_test.exs
2023-02-28 15:08:49 +01:00

72 lines
2.1 KiB
Elixir

defmodule LivebookWeb.AppsLiveTest do
use LivebookWeb.ConnCase, async: true
import Phoenix.LiveViewTest
alias Livebook.{Session, Sessions}
test "updates UI when app is deployed and terminated", %{conn: conn} do
{:ok, view, _} = live(conn, ~p"/apps")
session = start_session()
Sessions.subscribe()
slug = Livebook.Utils.random_short_id()
app_settings = %{Livebook.Notebook.AppSettings.new() | slug: slug}
Session.set_app_settings(session.pid, app_settings)
Session.set_notebook_name(session.pid, "My app #{slug}")
refute render(view) =~ slug
Session.deploy_app(session.pid)
assert_receive {:session_created, %{app_info: %{slug: ^slug}}}
assert render(view) =~ "My app #{slug}"
assert_receive {:session_updated, %{app_info: %{slug: ^slug, registered: true}} = app_session}
assert render(view) =~ ~p"/apps/#{slug}"
Session.app_unregistered(app_session.pid)
assert_receive {:session_closed, %{app_info: %{slug: ^slug}}}
refute render(view) =~ slug
end
test "terminating an app", %{conn: conn} do
{:ok, view, _} = live(conn, ~p"/apps")
session = start_session()
Sessions.subscribe()
slug = Livebook.Utils.random_short_id()
app_settings = %{Livebook.Notebook.AppSettings.new() | slug: slug}
Session.set_app_settings(session.pid, app_settings)
Session.deploy_app(session.pid)
assert_receive {:session_created, %{app_info: %{slug: ^slug}}}
assert_receive {:session_updated, %{app_info: %{slug: ^slug, registered: true}}}
view
|> element(~s/[data-app-slug="#{slug}"] button[aria-label="stop app"]/)
|> render_click()
assert_receive {:session_updated, %{app_info: %{slug: ^slug, registered: false}}}
view
|> element(~s/[data-app-slug="#{slug}"] button[aria-label="terminate app"]/)
|> render_click()
assert_receive {:session_closed, %{app_info: %{slug: ^slug}}}
refute render(view) =~ slug
end
defp start_session() do
{:ok, session} = Livebook.Sessions.create_session()
on_exit(fn -> Session.close(session.pid) end)
session
end
end