0 && @item_status != :running}
+ class="dag-card__body"
+ >
LazyHTML.to_tree()
end
diff --git a/apps/gust_web/test/gust_web/live/dag_live_dashboard_test.exs b/apps/gust_web/test/gust_web/live/dag_live_dashboard_test.exs
index edd5c95..67a5d6b 100644
--- a/apps/gust_web/test/gust_web/live/dag_live_dashboard_test.exs
+++ b/apps/gust_web/test/gust_web/live/dag_live_dashboard_test.exs
@@ -404,6 +404,60 @@ defmodule GustWeb.DagLiveDashboardTest do
refute has_element?(dashboard_live, "#task-error-stacktrace")
end
+ test "does not display a persisted task error while the task is running", %{
+ conn: conn,
+ dag: dag,
+ run: run,
+ task: task
+ } do
+ error = %{
+ type: "RuntimeError",
+ value: "running-task",
+ message: "stale error"
+ }
+
+ {:ok, task} = Flows.update_task_error(task, error)
+ {:ok, _task} = Flows.update_task_status(task, :running)
+
+ {:ok, dashboard_live, _html} =
+ live(conn, ~g"/dags/#{dag.name}/dashboard?run_id=#{run.id}&task_name=#{task.name}")
+
+ refute has_element?(dashboard_live, "#task-error")
+
+ assert has_element?(
+ dashboard_live,
+ "#task-status-progress[role='progressbar']"
+ )
+
+ assert has_element?(dashboard_live, "#task-status-progress .task-status-progress__bar")
+ end
+
+ test "hides a displayed task error when the task starts running", %{
+ conn: conn,
+ dag: dag,
+ run: run,
+ task: task
+ } do
+ error = %{
+ type: "RuntimeError",
+ value: "starting-task",
+ message: "previous attempt failed"
+ }
+
+ {:ok, task} = Flows.update_task_error(task, error)
+
+ {:ok, dashboard_live, _html} =
+ live(conn, ~g"/dags/#{dag.name}/dashboard?run_id=#{run.id}&task_name=#{task.name}")
+
+ assert has_element?(dashboard_live, "#task-error")
+
+ {:ok, _task} = Flows.update_task_status(task, :running)
+ Gust.PubSub.broadcast_run_status(run.id, :running, task.id)
+
+ refute has_element?(dashboard_live, "#task-error")
+ assert has_element?(dashboard_live, "#task-status-progress")
+ end
+
test "display task error stacktrace", %{
conn: conn,
dag: dag,
@@ -464,6 +518,12 @@ defmodule GustWeb.DagLiveDashboardTest do
live(conn, ~g"/dags/#{dag.name}/dashboard?run_id=#{run.id}")
assert mermaid_source(dashboard_live) =~ "class #{task.name} status-running"
+
+ assert has_element?(
+ dashboard_live,
+ "##{task.name}-at-run-#{run.id}.task-grid-cell--running"
+ )
+
refute mermaid_source(dashboard_live) =~ "selected-task"
{:ok, _task} = Flows.update_task_status(task, :succeeded)
@@ -471,6 +531,11 @@ defmodule GustWeb.DagLiveDashboardTest do
assert mermaid_source(dashboard_live) =~ "class #{task.name} status-succeeded"
refute mermaid_source(dashboard_live) =~ "class #{task.name} status-running"
+
+ refute has_element?(
+ dashboard_live,
+ "##{task.name}-at-run-#{run.id}.task-grid-cell--running"
+ )
end
test "marks the selected task on the mermaid graph", %{
@@ -522,11 +587,21 @@ defmodule GustWeb.DagLiveDashboardTest do
{:ok, _task} = Gust.Flows.update_task_status(task, :running)
{:ok, dashboard_live, _html} = live(conn, ~g"/dags/#{dag.name}/dashboard")
+ assert has_element?(
+ dashboard_live,
+ "#run-status-cell-#{run.id}.task-grid-cell--running"
+ )
+
Flows.update_run_status(run, :succeeded)
Gust.PubSub.broadcast_run_status(run.id, :succeeded)
assert has_element?(dashboard_live, "#run-status-cell-#{run.id}.status-succeeded")
+
+ refute has_element?(
+ dashboard_live,
+ "#run-status-cell-#{run.id}.task-grid-cell--running"
+ )
end
test "selected run details are reloaded when its status changes", %{
diff --git a/apps/gust_web/test/gust_web/live/run_live_test.exs b/apps/gust_web/test/gust_web/live/run_live_test.exs
index 48f420d..be97a4f 100644
--- a/apps/gust_web/test/gust_web/live/run_live_test.exs
+++ b/apps/gust_web/test/gust_web/live/run_live_test.exs
@@ -214,19 +214,24 @@ defmodule GustWeb.RunLiveTest do
refute has_element?(index_live, "#runs-#{newer_match.id}")
end
- test "list runs paged", %{conn: conn, dag: dag, run: _first_run} do
+ test "list runs paged", %{conn: conn, dag: dag, run: first_run} do
page_size = 3
+ now = DateTime.utc_now() |> DateTime.truncate(:second)
+
+ run_fixture(%{dag_id: dag.id, inserted_at: DateTime.add(now, 60)})
- run_fixture(%{dag_id: dag.id})
- prev_page_run = run_fixture(%{dag_id: dag.id})
+ prev_page_run =
+ run_fixture(%{dag_id: dag.id, inserted_at: DateTime.add(now, 120)})
- current_page_run = run_fixture(%{dag_id: dag.id})
+ current_page_run =
+ run_fixture(%{dag_id: dag.id, inserted_at: DateTime.add(now, 180)})
{:ok, index_live, _html} =
live(conn, ~g"/dags/#{dag.name}/runs?page_size=#{page_size}&page=2")
- assert index_live |> has_element?("#runs-#{current_page_run.id}")
+ assert index_live |> has_element?("#runs-#{first_run.id}")
refute index_live |> has_element?("#runs-#{prev_page_run.id}")
+ refute index_live |> has_element?("#runs-#{current_page_run.id}")
assert index_live |> has_element?("#runs-table-container + #runs-pagination")
assert index_live |> has_element?("#run-page-2.btn-active[aria-current='page']")