fix: fix CSM-010

This commit is contained in:
2026-05-09 14:31:44 +02:00
parent 14dfbd8829
commit f1445120fc
5 changed files with 185 additions and 69 deletions

View File

@@ -0,0 +1,88 @@
defmodule BDS.CSM010RescueControlFlowTest do
use ExUnit.Case, async: false
alias BDS.Desktop.ShellData
alias BDS.Repo
setup do
:ok = Ecto.Adapters.SQL.Sandbox.checkout(BDS.Repo)
:ok
end
describe "Repo.ready?/0" do
test "returns true when the database is available" do
assert Repo.ready?()
end
end
describe "project_snapshot/0" do
test "returns {:ok, snapshot} when DB is ready" do
assert {:ok, snapshot} = ShellData.project_snapshot()
assert is_map(snapshot)
assert Map.has_key?(snapshot, :active_project_id)
assert Map.has_key?(snapshot, :projects)
end
test "returns {:error, :not_ready} when DB is unavailable" do
Ecto.Adapters.SQL.Sandbox.checkin(BDS.Repo)
assert {:error, :not_ready} = with_stopped_repo(&ShellData.project_snapshot/0)
end
end
describe "dashboard/1" do
test "returns {:ok, snapshot} when DB is ready" do
assert {:ok, dashboard} = ShellData.dashboard("default")
assert is_map(dashboard)
assert Map.has_key?(dashboard, :post_stats)
end
test "returns {:error, :not_ready} when DB is unavailable" do
Ecto.Adapters.SQL.Sandbox.checkin(BDS.Repo)
assert {:error, :not_ready} = with_stopped_repo(fn -> ShellData.dashboard("default") end)
end
end
describe "sidebar_view/3" do
test "returns {:ok, view} when DB is ready" do
assert {:ok, view} = ShellData.sidebar_view("default", "posts")
assert is_map(view)
end
test "returns {:error, :not_ready} when DB is unavailable" do
Ecto.Adapters.SQL.Sandbox.checkin(BDS.Repo)
assert {:error, :not_ready} =
with_stopped_repo(fn -> ShellData.sidebar_view("default", "posts") end)
end
end
describe "git_badge_count/2" do
test "returns {:ok, count} when DB is ready" do
assert {:ok, count} = ShellData.git_badge_count("default")
assert is_integer(count)
end
test "returns {:ok, 0} for nil project_id" do
assert {:ok, 0} = ShellData.git_badge_count(nil)
end
test "returns {:error, :not_ready} when DB is unavailable" do
Ecto.Adapters.SQL.Sandbox.checkin(BDS.Repo)
assert {:error, :not_ready} =
with_stopped_repo(fn -> ShellData.git_badge_count("some-project") end)
end
end
defp with_stopped_repo(fun) do
Supervisor.terminate_child(BDS.Supervisor, BDS.Repo)
try do
fun.()
after
Supervisor.restart_child(BDS.Supervisor, BDS.Repo)
end
end
end