D2-1: add RemoveCategory tests covering state/files/DB cleanup and no-op for non-existent
This commit is contained in:
@@ -138,7 +138,7 @@ All reconciled to follow code. Specs must be self-consistent and match code.
|
|||||||
|
|
||||||
| ID | Claim | Spec | Path |
|
| ID | Claim | Spec | Path |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| D2-1 | RemoveCategory rule | metadata.allium:100 | Write test: remove category, verify list+settings+JSON updated |
|
| ~~D2-1~~ | ~~RemoveCategory rule~~ | ~~metadata.allium:100~~ | **Resolved:** 2 tests added in metadata_test.exs — remove_category removes category+settings from state/files/DB (6 assertions); remove_category is a no-op for non-existent category |
|
||||||
| D2-2 | CreateAndPublishTemplate rule | template.allium:105 | Write test: create+publish in one step |
|
| D2-2 | CreateAndPublishTemplate rule | template.allium:105 | Write test: create+publish in one step |
|
||||||
| D2-3 | CreateAndPublishScript rule | script.allium:160 | Write test: create+publish in one step |
|
| D2-3 | CreateAndPublishScript rule | script.allium:160 | Write test: create+publish in one step |
|
||||||
| D2-4 | UniqueScriptSlug dedup | script.allium:115 | Write test: two scripts same title → dedup slug |
|
| D2-4 | UniqueScriptSlug dedup | script.allium:115 | Write test: two scripts same title → dedup slug |
|
||||||
|
|||||||
@@ -242,6 +242,71 @@ defmodule BDS.MetadataTest do
|
|||||||
assert File.exists?(BDS.Embeddings.index_path(project.id))
|
assert File.exists?(BDS.Embeddings.index_path(project.id))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "remove_category removes the category and its settings from state, files, and DB", %{
|
||||||
|
project: project,
|
||||||
|
temp_dir: temp_dir
|
||||||
|
} do
|
||||||
|
# Add a category + settings first
|
||||||
|
assert {:ok, metadata} = BDS.Metadata.add_category(project.id, "news")
|
||||||
|
assert "news" in metadata.categories
|
||||||
|
|
||||||
|
assert {:ok, _metadata} =
|
||||||
|
BDS.Metadata.update_category_settings(project.id, "news", %{
|
||||||
|
render_in_lists: false,
|
||||||
|
show_title: true,
|
||||||
|
post_template_slug: "article"
|
||||||
|
})
|
||||||
|
|
||||||
|
# Remove the category
|
||||||
|
assert {:ok, updated} = BDS.Metadata.remove_category(project.id, "news")
|
||||||
|
|
||||||
|
# 1. Category removed from in-memory list
|
||||||
|
refute "news" in updated.categories
|
||||||
|
assert "article" in updated.categories
|
||||||
|
assert "aside" in updated.categories
|
||||||
|
assert "page" in updated.categories
|
||||||
|
assert "picture" in updated.categories
|
||||||
|
|
||||||
|
# 2. Category settings removed from in-memory map
|
||||||
|
refute Map.has_key?(updated.category_settings, "news")
|
||||||
|
|
||||||
|
# 3. Verify via get_project_metadata
|
||||||
|
assert {:ok, loaded} = BDS.Metadata.get_project_metadata(project.id)
|
||||||
|
refute "news" in loaded.categories
|
||||||
|
refute Map.has_key?(loaded.category_settings, "news")
|
||||||
|
|
||||||
|
# 4. meta/categories.json rewritten without the removed category
|
||||||
|
categories_path = Path.join([temp_dir, "meta", "categories.json"])
|
||||||
|
assert ["article", "aside", "page", "picture"] =
|
||||||
|
Jason.decode!(File.read!(categories_path))
|
||||||
|
|
||||||
|
# 5. meta/category-meta.json rewritten without the removed category's settings
|
||||||
|
category_meta_path = Path.join([temp_dir, "meta", "category-meta.json"])
|
||||||
|
category_meta = Jason.decode!(File.read!(category_meta_path))
|
||||||
|
refute Map.has_key?(category_meta, "news")
|
||||||
|
|
||||||
|
# 6. DB settings updated
|
||||||
|
cat_setting =
|
||||||
|
BDS.Repo.get(BDS.Settings.Setting, "project:#{project.id}:categories")
|
||||||
|
assert cat_setting != nil
|
||||||
|
refute "news" in (cat_setting.value |> Jason.decode!() |> Map.get("categories", []))
|
||||||
|
|
||||||
|
meta_setting =
|
||||||
|
BDS.Repo.get(BDS.Settings.Setting, "project:#{project.id}:category_meta")
|
||||||
|
assert meta_setting != nil
|
||||||
|
meta_categories = meta_setting.value |> Jason.decode!() |> Map.get("categories", %{})
|
||||||
|
refute Map.has_key?(meta_categories, "news")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "remove_category is a no-op for non-existent category", %{
|
||||||
|
project: project
|
||||||
|
} do
|
||||||
|
{:ok, metadata_before} = BDS.Metadata.get_project_metadata(project.id)
|
||||||
|
|
||||||
|
assert {:ok, metadata} = BDS.Metadata.remove_category(project.id, "nonexistent")
|
||||||
|
assert metadata.categories == metadata_before.categories
|
||||||
|
end
|
||||||
|
|
||||||
test "sync_project_metadata_from_filesystem materializes the canonical metadata files when missing",
|
test "sync_project_metadata_from_filesystem materializes the canonical metadata files when missing",
|
||||||
%{project: project, temp_dir: temp_dir} do
|
%{project: project, temp_dir: temp_dir} do
|
||||||
meta_dir = Path.join(temp_dir, "meta")
|
meta_dir = Path.join(temp_dir, "meta")
|
||||||
|
|||||||
Reference in New Issue
Block a user