Preserve category archive titles.
This commit is contained in:
@@ -174,6 +174,7 @@ pub fn add_category(data_dir: &Path, category: &str) -> EngineResult<()> {
|
||||
meta.insert(
|
||||
category.to_string(),
|
||||
CategorySettings {
|
||||
title: None,
|
||||
render_in_lists: true,
|
||||
show_title: true,
|
||||
post_template_slug: None,
|
||||
@@ -318,6 +319,7 @@ mod tests {
|
||||
meta.insert(
|
||||
"article".to_string(),
|
||||
CategorySettings {
|
||||
title: None,
|
||||
render_in_lists: true,
|
||||
show_title: true,
|
||||
post_template_slug: None,
|
||||
@@ -330,6 +332,33 @@ mod tests {
|
||||
assert!(read["article"].render_in_lists);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn category_meta_json_preserves_bds2_title() {
|
||||
let dir = setup();
|
||||
let mut meta = HashMap::new();
|
||||
meta.insert(
|
||||
"news".to_string(),
|
||||
CategorySettings {
|
||||
title: Some("News Archive".to_string()),
|
||||
render_in_lists: false,
|
||||
show_title: true,
|
||||
post_template_slug: Some("article".to_string()),
|
||||
list_template_slug: Some("listing".to_string()),
|
||||
},
|
||||
);
|
||||
|
||||
write_category_meta_json(dir.path(), &meta).unwrap();
|
||||
|
||||
let content = std::fs::read_to_string(dir.path().join("meta/category-meta.json")).unwrap();
|
||||
let json: serde_json::Value = serde_json::from_str(&content).unwrap();
|
||||
assert_eq!(json["news"]["title"], "News Archive");
|
||||
assert_eq!(json["news"]["renderInLists"], false);
|
||||
assert_eq!(json["news"]["showTitle"], true);
|
||||
|
||||
let read = read_category_meta_json(dir.path()).unwrap();
|
||||
assert_eq!(read["news"].title.as_deref(), Some("News Archive"));
|
||||
}
|
||||
|
||||
// ── publishing.json ─────────────────────────────────────────────
|
||||
|
||||
#[test]
|
||||
@@ -407,6 +436,7 @@ mod tests {
|
||||
meta.insert(
|
||||
"article".to_string(),
|
||||
CategorySettings {
|
||||
title: None,
|
||||
render_in_lists: true,
|
||||
show_title: true,
|
||||
post_template_slug: None,
|
||||
|
||||
@@ -1530,6 +1530,7 @@ mod tests {
|
||||
(
|
||||
"hidden".to_string(),
|
||||
crate::model::CategorySettings {
|
||||
title: None,
|
||||
render_in_lists: false,
|
||||
show_title: true,
|
||||
post_template_slug: None,
|
||||
@@ -1539,6 +1540,7 @@ mod tests {
|
||||
(
|
||||
"featured".to_string(),
|
||||
crate::model::CategorySettings {
|
||||
title: None,
|
||||
render_in_lists: true,
|
||||
show_title: false,
|
||||
post_template_slug: None,
|
||||
|
||||
@@ -97,6 +97,8 @@ impl ProjectMetadata {
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct CategorySettings {
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub title: Option<String>,
|
||||
#[serde(default = "default_true")]
|
||||
pub render_in_lists: bool,
|
||||
#[serde(default = "default_true")]
|
||||
@@ -167,12 +169,14 @@ mod tests {
|
||||
#[test]
|
||||
fn category_settings_camel_case() {
|
||||
let settings = CategorySettings {
|
||||
title: Some("Article".into()),
|
||||
render_in_lists: false,
|
||||
show_title: true,
|
||||
post_template_slug: Some("article-tpl".into()),
|
||||
list_template_slug: None,
|
||||
};
|
||||
let json = serde_json::to_string(&settings).unwrap();
|
||||
assert!(json.contains("title"));
|
||||
assert!(json.contains("renderInLists"));
|
||||
assert!(json.contains("showTitle"));
|
||||
assert!(json.contains("postTemplateSlug"));
|
||||
|
||||
@@ -619,6 +619,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
|
||||
(
|
||||
"hidden".to_string(),
|
||||
CategorySettings {
|
||||
title: None,
|
||||
render_in_lists: false,
|
||||
show_title: true,
|
||||
post_template_slug: None,
|
||||
@@ -628,6 +629,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
|
||||
(
|
||||
"featured".to_string(),
|
||||
CategorySettings {
|
||||
title: None,
|
||||
render_in_lists: true,
|
||||
show_title: false,
|
||||
post_template_slug: None,
|
||||
|
||||
@@ -7110,7 +7110,9 @@ impl BdsApp {
|
||||
.map(|name| {
|
||||
let meta = category_meta.get(&name);
|
||||
SettingsCategoryRow {
|
||||
title: name.clone(),
|
||||
title: meta
|
||||
.and_then(|value| value.title.clone())
|
||||
.unwrap_or_else(|| name.clone()),
|
||||
render_in_lists: meta.map(|value| value.render_in_lists).unwrap_or(true),
|
||||
show_title: meta.map(|value| value.show_title).unwrap_or(true),
|
||||
post_template_slug: meta
|
||||
@@ -7781,6 +7783,7 @@ impl BdsApp {
|
||||
category_meta.insert(
|
||||
row.name.clone(),
|
||||
bds_core::model::metadata::CategorySettings {
|
||||
title: Some(row.title.clone()).filter(|title| !title.trim().is_empty()),
|
||||
render_in_lists: row.render_in_lists,
|
||||
show_title: row.show_title,
|
||||
post_template_slug: (!row.post_template_slug.is_empty())
|
||||
@@ -7822,6 +7825,8 @@ impl BdsApp {
|
||||
(
|
||||
row.name,
|
||||
bds_core::model::metadata::CategorySettings {
|
||||
title: Some(row.title.clone())
|
||||
.filter(|title| !title.trim().is_empty()),
|
||||
render_in_lists: row.render_in_lists,
|
||||
show_title: row.show_title,
|
||||
post_template_slug: None,
|
||||
|
||||
Reference in New Issue
Block a user