fix: fixed project loading from filesystem and added project metadata to metadata diff
This commit is contained in:
@@ -749,6 +749,70 @@ defmodule BDS.MaintenanceTest do
|
||||
end)
|
||||
end
|
||||
|
||||
test "metadata_diff includes project-level metadata drift", %{project: project, temp_dir: temp_dir} do
|
||||
assert {:ok, _metadata} =
|
||||
BDS.Metadata.update_project_metadata(project.id, %{
|
||||
name: "Database Blog",
|
||||
description: "Database description",
|
||||
public_url: "https://database.example",
|
||||
main_language: "en",
|
||||
default_author: "Database Author",
|
||||
max_posts_per_page: 25,
|
||||
blogmark_category: "article",
|
||||
pico_theme: "blue",
|
||||
semantic_similarity_enabled: false,
|
||||
blog_languages: ["de"]
|
||||
})
|
||||
|
||||
assert {:ok, _metadata} =
|
||||
BDS.Metadata.set_publishing_preferences(project.id, %{
|
||||
ssh_host: "db.example",
|
||||
ssh_user: "db-user",
|
||||
ssh_remote_path: "/srv/db",
|
||||
ssh_mode: "scp"
|
||||
})
|
||||
|
||||
meta_dir = Path.join(temp_dir, "meta")
|
||||
|
||||
File.write!(
|
||||
Path.join(meta_dir, "project.json"),
|
||||
Jason.encode!(%{
|
||||
"name" => "Filesystem Blog",
|
||||
"description" => "Filesystem description",
|
||||
"publicUrl" => "https://filesystem.example",
|
||||
"mainLanguage" => "fr",
|
||||
"defaultAuthor" => "Filesystem Author",
|
||||
"maxPostsPerPage" => 12,
|
||||
"blogmarkCategory" => "notes",
|
||||
"picoTheme" => "slate",
|
||||
"semanticSimilarityEnabled" => true,
|
||||
"blogLanguages" => ["it"]
|
||||
})
|
||||
)
|
||||
|
||||
File.write!(
|
||||
Path.join(meta_dir, "publishing.json"),
|
||||
Jason.encode!(%{
|
||||
"sshHost" => "files.example",
|
||||
"sshUser" => "files-user",
|
||||
"sshRemotePath" => "/srv/files",
|
||||
"sshMode" => "rsync"
|
||||
})
|
||||
)
|
||||
|
||||
assert {:ok, diff} = BDS.Maintenance.metadata_diff(project.id)
|
||||
|
||||
assert Enum.any?(diff.diff_reports, fn report ->
|
||||
report.entity_type == "project" and
|
||||
Enum.any?(report.differences, &(&1.name == "main_language" and &1.db_value == "en" and &1.file_value == "fr"))
|
||||
end)
|
||||
|
||||
assert Enum.any?(diff.diff_reports, fn report ->
|
||||
report.entity_type == "publishing" and
|
||||
Enum.any?(report.differences, &(&1.name == "ssh_mode" and &1.db_value == "scp" and &1.file_value == "rsync"))
|
||||
end)
|
||||
end
|
||||
|
||||
defp collect_progress_events(acc \\ []) do
|
||||
receive do
|
||||
{:rebuild_progress, value, message} -> collect_progress_events([{value, message} | acc])
|
||||
|
||||
@@ -221,6 +221,9 @@ defmodule BDS.MetadataTest do
|
||||
test "sync_project_metadata_from_filesystem materializes the canonical metadata files when missing",
|
||||
%{project: project, temp_dir: temp_dir} do
|
||||
meta_dir = Path.join(temp_dir, "meta")
|
||||
|
||||
File.rm_rf!(meta_dir)
|
||||
|
||||
refute File.exists?(Path.join(meta_dir, "project.json"))
|
||||
refute File.exists?(Path.join(meta_dir, "categories.json"))
|
||||
refute File.exists?(Path.join(meta_dir, "category-meta.json"))
|
||||
|
||||
@@ -3,6 +3,7 @@ defmodule BDS.ProjectsTest do
|
||||
|
||||
import Ecto.Query
|
||||
|
||||
alias BDS.Metadata
|
||||
alias BDS.Projects.Project
|
||||
alias BDS.Repo
|
||||
alias BDS.Templates.Template
|
||||
@@ -157,4 +158,60 @@ defmodule BDS.ProjectsTest do
|
||||
assert BDS.Projects.get_project(external_project.id) == nil
|
||||
assert File.read!(marker_path) == "preserve me"
|
||||
end
|
||||
|
||||
test "create_project loads project metadata from an existing filesystem-backed blog", %{temp_root: temp_root} do
|
||||
external_dir = Path.join(temp_root, "imported-blog")
|
||||
meta_dir = Path.join(external_dir, "meta")
|
||||
File.mkdir_p!(meta_dir)
|
||||
|
||||
File.write!(
|
||||
Path.join(meta_dir, "project.json"),
|
||||
Jason.encode!(%{
|
||||
"name" => "Imported Blog",
|
||||
"description" => "Filesystem metadata",
|
||||
"publicUrl" => "https://imported.example",
|
||||
"mainLanguage" => "de",
|
||||
"defaultAuthor" => "Importer",
|
||||
"maxPostsPerPage" => 17,
|
||||
"blogmarkCategory" => "notes",
|
||||
"picoTheme" => "slate",
|
||||
"semanticSimilarityEnabled" => true,
|
||||
"blogLanguages" => ["en", "fr"]
|
||||
})
|
||||
)
|
||||
|
||||
File.write!(
|
||||
Path.join(meta_dir, "publishing.json"),
|
||||
Jason.encode!(%{
|
||||
"sshHost" => "upload.example",
|
||||
"sshUser" => "deploy",
|
||||
"sshRemotePath" => "/srv/imported",
|
||||
"sshMode" => "rsync"
|
||||
})
|
||||
)
|
||||
|
||||
assert {:ok, project} =
|
||||
BDS.Projects.create_project(%{name: "Placeholder", data_path: external_dir})
|
||||
|
||||
assert BDS.Projects.get_project!(project.id).name == "Imported Blog"
|
||||
|
||||
assert {:ok, metadata} = Metadata.get_project_metadata(project.id)
|
||||
assert metadata.name == "Imported Blog"
|
||||
assert metadata.description == "Filesystem metadata"
|
||||
assert metadata.public_url == "https://imported.example"
|
||||
assert metadata.main_language == "de"
|
||||
assert metadata.default_author == "Importer"
|
||||
assert metadata.max_posts_per_page == 17
|
||||
assert metadata.blogmark_category == "notes"
|
||||
assert metadata.pico_theme == "slate"
|
||||
assert metadata.semantic_similarity_enabled == true
|
||||
assert metadata.blog_languages == ["en", "fr"]
|
||||
|
||||
assert metadata.publishing_preferences == %{
|
||||
"ssh_host" => "upload.example",
|
||||
"ssh_user" => "deploy",
|
||||
"ssh_remote_path" => "/srv/imported",
|
||||
"ssh_mode" => "rsync"
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user