mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-12 22:46:17 +08:00
Speed up tests (#996)
* Close sessions created during tests * Change live_patch to live_redirect where applicable
This commit is contained in:
parent
ca27bb157f
commit
fb0c96fa99
7 changed files with 64 additions and 26 deletions
|
@ -217,7 +217,7 @@ defmodule LivebookWeb.FileSelectComponent do
|
||||||
</button>
|
</button>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= live_patch to: Routes.settings_path(@socket, :page),
|
<%= live_redirect to: Routes.settings_path(@socket, :page),
|
||||||
class: "menu-item text-gray-500 border-t border-gray-200",
|
class: "menu-item text-gray-500 border-t border-gray-200",
|
||||||
role: "menuitem" do %>
|
role: "menuitem" do %>
|
||||||
<.remix_icon icon="settings-3-line" />
|
<.remix_icon icon="settings-3-line" />
|
||||||
|
|
|
@ -15,7 +15,7 @@ defmodule LivebookWeb.PageHelpers do
|
||||||
def title(assigns) do
|
def title(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<%= live_patch to: Routes.home_path(@socket, :page),
|
<%= live_redirect to: Routes.home_path(@socket, :page),
|
||||||
class: "hidden md:block absolute top-[50%] left-[-12px] transform -translate-y-1/2 -translate-x-full" do %>
|
class: "hidden md:block absolute top-[50%] left-[-12px] transform -translate-y-1/2 -translate-x-full" do %>
|
||||||
<.remix_icon icon="arrow-left-line" class="text-2xl align-middle" />
|
<.remix_icon icon="arrow-left-line" class="text-2xl align-middle" />
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -168,7 +168,7 @@ defmodule LivebookWeb.SessionLive do
|
||||||
<.remix_icon icon="dashboard-2-line" />
|
<.remix_icon icon="dashboard-2-line" />
|
||||||
<span class="font-medium">See on Dashboard</span>
|
<span class="font-medium">See on Dashboard</span>
|
||||||
</a>
|
</a>
|
||||||
<%= live_patch to: Routes.home_path(@socket, :close_session, @session.id),
|
<%= live_redirect to: Routes.home_path(@socket, :close_session, @session.id),
|
||||||
class: "menu-item text-red-600",
|
class: "menu-item text-red-600",
|
||||||
role: "menuitem" do %>
|
role: "menuitem" do %>
|
||||||
<.remix_icon icon="close-circle-line" />
|
<.remix_icon icon="close-circle-line" />
|
||||||
|
|
|
@ -23,7 +23,7 @@ defmodule LivebookWeb.SidebarHelpers do
|
||||||
def logo_item(assigns) do
|
def logo_item(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<span>
|
<span>
|
||||||
<%= live_patch to: Routes.home_path(@socket, :page), aria_label: "go to homepage" do %>
|
<%= live_redirect to: Routes.home_path(@socket, :page), aria_label: "go to homepage" do %>
|
||||||
<img src="/images/logo.png" height="40" width="40" alt="" />
|
<img src="/images/logo.png" height="40" width="40" alt="" />
|
||||||
<% end %>
|
<% end %>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -632,8 +632,8 @@ defmodule Livebook.SessionTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp start_session(opts \\ []) do
|
defp start_session(opts \\ []) do
|
||||||
session_id = Utils.random_id()
|
opts = Keyword.merge([id: Utils.random_id()], opts)
|
||||||
{:ok, pid} = Session.start_link(Keyword.merge([id: session_id], opts))
|
pid = start_supervised!({Session, opts}, id: opts[:id])
|
||||||
Session.get_by_pid(pid)
|
Session.get_by_pid(pid)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -120,6 +120,8 @@ defmodule LivebookWeb.HomeLiveTest do
|
||||||
|
|
||||||
assert render(view) =~ session1.id
|
assert render(view) =~ session1.id
|
||||||
assert render(view) =~ session2.id
|
assert render(view) =~ session2.id
|
||||||
|
|
||||||
|
Session.close([session1.pid, session2.pid])
|
||||||
end
|
end
|
||||||
|
|
||||||
test "updates UI whenever a session is added or deleted", %{conn: conn} do
|
test "updates UI whenever a session is added or deleted", %{conn: conn} do
|
||||||
|
@ -151,6 +153,8 @@ defmodule LivebookWeb.HomeLiveTest do
|
||||||
Routes.session_path(conn, :download_source, session.id, "livemd",
|
Routes.session_path(conn, :download_source, session.id, "livemd",
|
||||||
include_outputs: false
|
include_outputs: false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Session.close(session.pid)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "allows forking existing session", %{conn: conn} do
|
test "allows forking existing session", %{conn: conn} do
|
||||||
|
@ -168,6 +172,8 @@ defmodule LivebookWeb.HomeLiveTest do
|
||||||
|
|
||||||
{:ok, view, _} = live(conn, to)
|
{:ok, view, _} = live(conn, to)
|
||||||
assert render(view) =~ "My notebook - fork"
|
assert render(view) =~ "My notebook - fork"
|
||||||
|
|
||||||
|
Session.close(session.pid)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "allows closing session after confirmation", %{conn: conn} do
|
test "allows closing session after confirmation", %{conn: conn} do
|
||||||
|
@ -186,6 +192,8 @@ defmodule LivebookWeb.HomeLiveTest do
|
||||||
|> render_click()
|
|> render_click()
|
||||||
|
|
||||||
refute render(view) =~ session.id
|
refute render(view) =~ session.id
|
||||||
|
|
||||||
|
Session.close(session.pid)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "close all selected sessions using bulk action", %{conn: conn} do
|
test "close all selected sessions using bulk action", %{conn: conn} do
|
||||||
|
@ -215,6 +223,8 @@ defmodule LivebookWeb.HomeLiveTest do
|
||||||
refute render(view) =~ session1.id
|
refute render(view) =~ session1.id
|
||||||
refute render(view) =~ session2.id
|
refute render(view) =~ session2.id
|
||||||
refute render(view) =~ session3.id
|
refute render(view) =~ session3.id
|
||||||
|
|
||||||
|
Session.close([session1.pid, session2.pid, session3.pid])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,11 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
{:ok, session} = Sessions.create_session(notebook: Livebook.Notebook.new())
|
{:ok, session} = Sessions.create_session(notebook: Livebook.Notebook.new())
|
||||||
|
|
||||||
|
on_exit(fn ->
|
||||||
|
Session.close(session.pid)
|
||||||
|
end)
|
||||||
|
|
||||||
%{session: session}
|
%{session: session}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -477,15 +482,16 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
|
|
||||||
{:ok, view, _} = live(conn, "/sessions/#{session.id}")
|
{:ok, view, _} = live(conn, "/sessions/#{session.id}")
|
||||||
|
|
||||||
assert {:error, {:live_redirect, %{to: to}}} =
|
assert {:error, {:live_redirect, %{to: "/sessions/" <> session_id}}} =
|
||||||
|
result =
|
||||||
view
|
view
|
||||||
|> element("button", "Fork")
|
|> element("button", "Fork")
|
||||||
|> render_click()
|
|> render_click()
|
||||||
|
|
||||||
assert to =~ "/sessions/"
|
{:ok, view, _} = follow_redirect(result, conn)
|
||||||
|
|
||||||
{:ok, view, _} = live(conn, to)
|
|
||||||
assert render(view) =~ "My notebook - fork"
|
assert render(view) =~ "My notebook - fork"
|
||||||
|
|
||||||
|
close_session_by_id(session_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "connected users" do
|
describe "connected users" do
|
||||||
|
@ -630,6 +636,8 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
{:ok, session} = Sessions.fetch_session(session_id)
|
{:ok, session} = Sessions.fetch_session(session_id)
|
||||||
data = Session.get_data(session.pid)
|
data = Session.get_data(session.pid)
|
||||||
assert data.file == notebook_file
|
assert data.file == notebook_file
|
||||||
|
|
||||||
|
Session.close(session.pid)
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag :tmp_dir
|
@tag :tmp_dir
|
||||||
|
@ -650,10 +658,12 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
assert render(view) =~ "Sibling notebook - fork"
|
assert render(view) =~ "Sibling notebook - fork"
|
||||||
|
|
||||||
"/sessions/" <> session_id = new_session_path
|
"/sessions/" <> session_id = new_session_path
|
||||||
{:ok, session} = Sessions.fetch_session(session_id)
|
{:ok, new_session} = Sessions.fetch_session(session_id)
|
||||||
data = Session.get_data(session.pid)
|
data = Session.get_data(new_session.pid)
|
||||||
assert data.file == nil
|
assert data.file == nil
|
||||||
assert data.origin == {:file, notebook_file}
|
assert data.origin == {:file, notebook_file}
|
||||||
|
|
||||||
|
Session.close([session.pid, new_session.pid])
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag :tmp_dir
|
@tag :tmp_dir
|
||||||
|
@ -673,6 +683,9 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
|
|
||||||
assert {:error, {:live_redirect, %{to: ^session_path}}} =
|
assert {:error, {:live_redirect, %{to: ^session_path}}} =
|
||||||
live(conn, "/sessions/#{session.id}/notebook.livemd")
|
live(conn, "/sessions/#{session.id}/notebook.livemd")
|
||||||
|
|
||||||
|
"/sessions/" <> session_id = session_path
|
||||||
|
close_session_by_id(session_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag :tmp_dir
|
@tag :tmp_dir
|
||||||
|
@ -687,12 +700,13 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
|
|
||||||
:ok = FileSystem.File.write(child_file, "# Child notebook")
|
:ok = FileSystem.File.write(child_file, "# Child notebook")
|
||||||
|
|
||||||
{:ok, view, _} =
|
assert {:error, {:live_redirect, %{to: "/sessions/" <> session_id}}} =
|
||||||
conn
|
result = live(conn, "/sessions/#{session.id}/dir/child.livemd")
|
||||||
|> live("/sessions/#{session.id}/dir/child.livemd")
|
|
||||||
|> follow_redirect(conn)
|
|
||||||
|
|
||||||
|
{:ok, view, _} = follow_redirect(result, conn)
|
||||||
assert render(view) =~ "Child notebook"
|
assert render(view) =~ "Child notebook"
|
||||||
|
|
||||||
|
close_session_by_id(session_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag :tmp_dir
|
@tag :tmp_dir
|
||||||
|
@ -707,12 +721,13 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
|
|
||||||
:ok = FileSystem.File.write(parent_file, "# Parent notebook")
|
:ok = FileSystem.File.write(parent_file, "# Parent notebook")
|
||||||
|
|
||||||
{:ok, view, _} =
|
assert {:error, {:live_redirect, %{to: "/sessions/" <> session_id}}} =
|
||||||
conn
|
result = live(conn, "/sessions/#{session.id}/__parent__/parent.livemd")
|
||||||
|> live("/sessions/#{session.id}/__parent__/parent.livemd")
|
|
||||||
|> follow_redirect(conn)
|
|
||||||
|
|
||||||
|
{:ok, view, _} = follow_redirect(result, conn)
|
||||||
assert render(view) =~ "Parent notebook"
|
assert render(view) =~ "Parent notebook"
|
||||||
|
|
||||||
|
close_session_by_id(session_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "resolves remote URLs", %{conn: conn} do
|
test "resolves remote URLs", %{conn: conn} do
|
||||||
|
@ -727,12 +742,14 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
index_url = url(bypass.port) <> "/index.livemd"
|
index_url = url(bypass.port) <> "/index.livemd"
|
||||||
{:ok, session} = Sessions.create_session(origin: {:url, index_url})
|
{:ok, session} = Sessions.create_session(origin: {:url, index_url})
|
||||||
|
|
||||||
{:ok, view, _} =
|
assert {:error, {:live_redirect, %{to: "/sessions/" <> session_id}}} =
|
||||||
conn
|
result = live(conn, "/sessions/#{session.id}/notebook.livemd")
|
||||||
|> live("/sessions/#{session.id}/notebook.livemd")
|
|
||||||
|> follow_redirect(conn)
|
|
||||||
|
|
||||||
|
{:ok, view, _} = follow_redirect(result, conn)
|
||||||
assert render(view) =~ "My notebook"
|
assert render(view) =~ "My notebook"
|
||||||
|
|
||||||
|
Session.close(session.pid)
|
||||||
|
close_session_by_id(session_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "renders an error message if relative remote notebook cannot be loaded", %{conn: conn} do
|
test "renders an error message if relative remote notebook cannot be loaded", %{conn: conn} do
|
||||||
|
@ -753,6 +770,8 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
|
|
||||||
{:ok, view, _} = follow_redirect(result, conn)
|
{:ok, view, _} = follow_redirect(result, conn)
|
||||||
assert render(view) =~ "Cannot navigate, failed to download notebook from the given URL"
|
assert render(view) =~ "Cannot navigate, failed to download notebook from the given URL"
|
||||||
|
|
||||||
|
Session.close(session.pid)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "if the remote notebook is already imported, redirects to the session",
|
test "if the remote notebook is already imported, redirects to the session",
|
||||||
|
@ -768,6 +787,8 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
|
|
||||||
assert {:error, {:live_redirect, %{to: ^notebook_session_path}}} =
|
assert {:error, {:live_redirect, %{to: ^notebook_session_path}}} =
|
||||||
live(conn, "/sessions/#{index_session.id}/notebook.livemd")
|
live(conn, "/sessions/#{index_session.id}/notebook.livemd")
|
||||||
|
|
||||||
|
Session.close([index_session.pid, notebook_session.pid])
|
||||||
end
|
end
|
||||||
|
|
||||||
test "renders an error message if there are already multiple session imported from the relative URL",
|
test "renders an error message if there are already multiple session imported from the relative URL",
|
||||||
|
@ -777,8 +798,8 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
notebook_url = "http://example.com/#{test_path}/notebook.livemd"
|
notebook_url = "http://example.com/#{test_path}/notebook.livemd"
|
||||||
|
|
||||||
{:ok, index_session} = Sessions.create_session(origin: {:url, index_url})
|
{:ok, index_session} = Sessions.create_session(origin: {:url, index_url})
|
||||||
{:ok, _notebook_session1} = Sessions.create_session(origin: {:url, notebook_url})
|
{:ok, notebook_session1} = Sessions.create_session(origin: {:url, notebook_url})
|
||||||
{:ok, _notebook_session2} = Sessions.create_session(origin: {:url, notebook_url})
|
{:ok, notebook_session2} = Sessions.create_session(origin: {:url, notebook_url})
|
||||||
|
|
||||||
index_session_path = "/sessions/#{index_session.id}"
|
index_session_path = "/sessions/#{index_session.id}"
|
||||||
|
|
||||||
|
@ -789,6 +810,8 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
|
|
||||||
assert render(view) =~
|
assert render(view) =~
|
||||||
"Cannot navigate, because multiple sessions were found for #{notebook_url}"
|
"Cannot navigate, because multiple sessions were found for #{notebook_url}"
|
||||||
|
|
||||||
|
Session.close([index_session.pid, notebook_session1.pid, notebook_session2.pid])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -847,4 +870,9 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp url(port), do: "http://localhost:#{port}"
|
defp url(port), do: "http://localhost:#{port}"
|
||||||
|
|
||||||
|
defp close_session_by_id(session_id) do
|
||||||
|
{:ok, session} = Sessions.fetch_session(session_id)
|
||||||
|
Session.close(session.pid)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue