refactor: move pure post-editor logic to BDS.UI.PostEditor for TUI reuse (issue #26, phase 3)
This commit is contained in:
@@ -55,43 +55,43 @@ defmodule BDS.GalleryPipelineTest do
|
||||
test "counts [[gallery]] macro as gallery content" do
|
||||
form = %{"content" => "Some text\n\n[[gallery]]\n\nMore text"}
|
||||
|
||||
assert BDS.Desktop.ShellLive.PostEditor.PostMetadata.gallery_count(form) == 1
|
||||
assert BDS.UI.PostEditor.Metadata.gallery_count(form) == 1
|
||||
end
|
||||
|
||||
test "counts inline images as before" do
|
||||
form = %{"content" => ""}
|
||||
|
||||
assert BDS.Desktop.ShellLive.PostEditor.PostMetadata.gallery_count(form) == 1
|
||||
assert BDS.UI.PostEditor.Metadata.gallery_count(form) == 1
|
||||
end
|
||||
|
||||
test "counts both [[gallery]] and inline images" do
|
||||
form = %{"content" => "\n[[gallery]]"}
|
||||
|
||||
assert BDS.Desktop.ShellLive.PostEditor.PostMetadata.gallery_count(form) == 1
|
||||
assert BDS.UI.PostEditor.Metadata.gallery_count(form) == 1
|
||||
end
|
||||
|
||||
test "returns 0 when no gallery marks present" do
|
||||
form = %{"content" => "Just plain text"}
|
||||
|
||||
assert BDS.Desktop.ShellLive.PostEditor.PostMetadata.gallery_count(form) == 0
|
||||
assert BDS.UI.PostEditor.Metadata.gallery_count(form) == 0
|
||||
end
|
||||
|
||||
test "handles empty content" do
|
||||
form = %{}
|
||||
|
||||
assert BDS.Desktop.ShellLive.PostEditor.PostMetadata.gallery_count(form) == 0
|
||||
assert BDS.UI.PostEditor.Metadata.gallery_count(form) == 0
|
||||
end
|
||||
|
||||
test "counts multiple [[gallery]] occurrences" do
|
||||
form = %{"content" => "[[gallery]] some text [[gallery]]"}
|
||||
|
||||
assert BDS.Desktop.ShellLive.PostEditor.PostMetadata.gallery_count(form) == 2
|
||||
assert BDS.UI.PostEditor.Metadata.gallery_count(form) == 2
|
||||
end
|
||||
|
||||
test "is case insensitive for [[gallery]]" do
|
||||
form = %{"content" => "[[Gallery]]"}
|
||||
|
||||
assert BDS.Desktop.ShellLive.PostEditor.PostMetadata.gallery_count(form) == 1
|
||||
assert BDS.UI.PostEditor.Metadata.gallery_count(form) == 1
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -220,7 +220,7 @@ defmodule BDS.PostTranslationsTest do
|
||||
"template_slug" => ""
|
||||
}
|
||||
|
||||
alias BDS.Desktop.ShellLive.PostEditor.Persistence
|
||||
alias BDS.UI.PostEditor.Persistence
|
||||
|
||||
assert {:ok, _post} = Persistence.persist(post, draft, "en", metadata, :auto_save)
|
||||
assert ai_tasks() == []
|
||||
|
||||
64
test/bds/ui/post_editor_test.exs
Normal file
64
test/bds/ui/post_editor_test.exs
Normal file
@@ -0,0 +1,64 @@
|
||||
defmodule BDS.UI.PostEditorTest do
|
||||
use ExUnit.Case, async: false
|
||||
|
||||
alias BDS.UI.PostEditor.{Draft, Metadata, Persistence}
|
||||
|
||||
setup do
|
||||
:ok = Ecto.Adapters.SQL.Sandbox.checkout(BDS.Repo)
|
||||
|
||||
temp_dir = Path.join(System.tmp_dir!(), "bds-ui-pe-#{System.unique_integer([:positive])}")
|
||||
File.mkdir_p!(temp_dir)
|
||||
on_exit(fn -> File.rm_rf(temp_dir) end)
|
||||
|
||||
{:ok, project} = BDS.Projects.create_project(%{name: "UI PostEditor", data_path: temp_dir})
|
||||
|
||||
{:ok, post} =
|
||||
BDS.Posts.create_post(%{
|
||||
project_id: project.id,
|
||||
title: "First Post",
|
||||
content: "hello world",
|
||||
tags: ["elixir"],
|
||||
language: "en"
|
||||
})
|
||||
|
||||
%{project: project, post: post}
|
||||
end
|
||||
|
||||
test "persisted_form builds the canonical draft", %{post: post} do
|
||||
metadata = Metadata.project_metadata(post.project_id)
|
||||
form = Draft.persisted_form(post, metadata, "en")
|
||||
|
||||
assert form["title"] == "First Post"
|
||||
assert form["content"] == "hello world"
|
||||
assert form["tags"] == "elixir"
|
||||
assert form["language"] == "en"
|
||||
end
|
||||
|
||||
test "persist saves an edited draft and publish publishes it", %{post: post} do
|
||||
metadata = Metadata.project_metadata(post.project_id)
|
||||
form = Draft.persisted_form(post, metadata, "en")
|
||||
|
||||
draft = %{form | "title" => "Renamed Post", "content" => "updated body"}
|
||||
|
||||
assert {:ok, saved} = Persistence.persist(post, draft, "en", metadata, :save)
|
||||
assert saved.title == "Renamed Post"
|
||||
assert saved.status == :draft
|
||||
|
||||
form = Draft.persisted_form(saved, metadata, "en")
|
||||
assert {:ok, published} = Persistence.persist(saved, form, "en", metadata, :publish)
|
||||
assert published.status == :published
|
||||
assert published.file_path != ""
|
||||
end
|
||||
|
||||
test "discard on an unpublished draft is a no-op success", %{post: post} do
|
||||
metadata = Metadata.project_metadata(post.project_id)
|
||||
assert {:ok, _post} = Persistence.discard(post, "en", metadata)
|
||||
end
|
||||
|
||||
test "normalize_params keeps the active language on same-language edits" do
|
||||
params = %{"title" => "T", "language" => "DE "}
|
||||
|
||||
assert Draft.normalize_params(params, "de", "de")["language"] == "de"
|
||||
assert Draft.normalize_params(params, "de", "fr")["language"] == "fr"
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user