65 lines
2.2 KiB
Elixir
65 lines
2.2 KiB
Elixir
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
|