D2-9: add max_posts_per_page 1..500 constraint tests

This commit is contained in:
2026-05-30 19:17:09 +02:00
parent b1438d5222
commit 8c71ece887
2 changed files with 36 additions and 1 deletions

View File

@@ -146,7 +146,7 @@ All reconciled to follow code. Specs must be self-consistent and match code.
| ~~D2-6~~ | ~~SidecarRoundtrip invariant~~ | ~~media.allium:198~~ | **Resolved:** 2 tests added — full roundtrip (write sidecar, parse via `Sidecar.parse_document/1`, assert all fields match DB) + nil conditional fields absent from parsed sidecar |
| ~~D2-7~~ | ~~ConditionalPostFields: nil fields absent from frontmatter~~ | frontmatter.allium:398 | **Resolved:** test added — post with nil excerpt/author/language → those fields absent from published file, 3 refute assertions |
| ~~D2-8~~ | ~~ConditionalMediaFields: nil fields absent from sidecar~~ | frontmatter.allium:417 | **Resolved:** added width/height assertions to nil-fields-absent test |
| D2-9 | max_posts_per_page 1..500 constraint | metadata.allium:75-77 | Write test: values outside range rejected |
| D2-9 | ~~max_posts_per_page 1..500 constraint~~ | metadata.allium:75-77 | **Resolved:** 5 tests added (0→1, -5→1, 1000→500, nil→50, non-numeric→50) |
| D2-10 | SandboxedExecution: restricted capabilities blocked | script.allium:84-88 | Write test: filesystem/process/package loading blocked |
| D2-11 | TransformToastBudget enforcement | script.allium:251-258 | Write test: per-script and total toast limits enforced |
| D2-12 | ProgressThrottled: 250ms throttle | task.allium:110-113 | Write test: rapid progress reports throttled |

View File

@@ -307,6 +307,41 @@ defmodule BDS.MetadataTest do
assert metadata.categories == metadata_before.categories
end
test "max_posts_per_page 0 is clamped to 1", %{project: project} do
assert {:ok, metadata} =
BDS.Metadata.update_project_metadata(project.id, %{max_posts_per_page: 0})
assert metadata.max_posts_per_page == 1
end
test "max_posts_per_page negative is clamped to 1", %{project: project} do
assert {:ok, metadata} =
BDS.Metadata.update_project_metadata(project.id, %{max_posts_per_page: -5})
assert metadata.max_posts_per_page == 1
end
test "max_posts_per_page above 500 is clamped to 500", %{project: project} do
assert {:ok, metadata} =
BDS.Metadata.update_project_metadata(project.id, %{max_posts_per_page: 1000})
assert metadata.max_posts_per_page == 500
end
test "max_posts_per_page nil defaults to 50", %{project: project} do
assert {:ok, metadata} =
BDS.Metadata.update_project_metadata(project.id, %{max_posts_per_page: nil})
assert metadata.max_posts_per_page == 50
end
test "max_posts_per_page non-numeric string defaults to 50", %{project: project} do
assert {:ok, metadata} =
BDS.Metadata.update_project_metadata(project.id, %{max_posts_per_page: "abc"})
assert metadata.max_posts_per_page == 50
end
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")