Files
bDS2/test/bds/real_blog_rebuild_diagnostic_test.exs
2026-05-01 17:49:50 +02:00

95 lines
3.0 KiB
Elixir

defmodule BDS.RealBlogRebuildDiagnosticTest do
use ExUnit.Case, async: false
@real_blog_path System.get_env("BDS_REAL_BLOG_PATH")
@moduletag timeout: :infinity
if is_binary(@real_blog_path) and @real_blog_path != "" do
setup do
:ok = Ecto.Adapters.SQL.Sandbox.checkout(BDS.Repo, ownership_timeout: 600_000)
Ecto.Adapters.SQL.Sandbox.mode(BDS.Repo, {:shared, self()})
now = BDS.Persistence.now_ms()
unique = Integer.to_string(System.unique_integer([:positive]))
project =
%BDS.Projects.Project{}
|> BDS.Projects.Project.changeset(%{
id: "real-blog-#{unique}",
name: "Real Blog Diagnostic",
slug: "real-blog-diagnostic-#{unique}",
data_path: Path.expand(@real_blog_path),
created_at: now,
updated_at: now,
is_active: false
})
|> BDS.Repo.insert!()
%{project: project}
end
test "rebuilds posts from the external real blog path", %{project: project} do
assert {:ok, _posts} = BDS.Maintenance.rebuild_from_filesystem(project.id, "post")
end
test "rebuilds media from the external real blog path", %{project: project} do
assert {:ok, _media} = BDS.Maintenance.rebuild_from_filesystem(project.id, "media")
end
test "shell rebuild task rebuilds posts from the external real blog path", %{project: project} do
:ok = BDS.Tasks.clear_finished()
assert {:ok, _active} = BDS.Projects.set_active_project(project.id)
assert {:ok, result} = BDS.Desktop.ShellCommands.execute("rebuild_database")
assert result.kind == "task_queued"
task =
wait_for_named_task(
"Rebuild Posts From Files",
&(&1.status in [:completed, :failed]),
600_000
)
assert task.status == :completed
end
test "rebuilds posts from the external real blog path twice in the same project", %{
project: project
} do
assert {:ok, _posts} = BDS.Maintenance.rebuild_from_filesystem(project.id, "post")
assert {:ok, _posts} = BDS.Maintenance.rebuild_from_filesystem(project.id, "post")
end
defp wait_for_named_task(_name, _matcher, timeout) when timeout <= 0 do
flunk("named task did not reach expected state")
end
defp wait_for_named_task(name, matcher, timeout) do
task = Enum.find(BDS.Tasks.list_tasks(), &(&1.name == name))
if task && matcher.(task) do
task
else
Process.sleep(100)
wait_for_named_task(name, matcher, timeout - 100)
end
end
else
@tag skip: "BDS_REAL_BLOG_PATH not set"
test "rebuilds posts from the external real blog path" do
end
@tag skip: "BDS_REAL_BLOG_PATH not set"
test "rebuilds media from the external real blog path" do
end
@tag skip: "BDS_REAL_BLOG_PATH not set"
test "shell rebuild task rebuilds posts from the external real blog path" do
end
@tag skip: "BDS_REAL_BLOG_PATH not set"
test "rebuilds posts from the external real blog path twice in the same project" do
end
end
end