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(
|
meta.insert(
|
||||||
category.to_string(),
|
category.to_string(),
|
||||||
CategorySettings {
|
CategorySettings {
|
||||||
|
title: None,
|
||||||
render_in_lists: true,
|
render_in_lists: true,
|
||||||
show_title: true,
|
show_title: true,
|
||||||
post_template_slug: None,
|
post_template_slug: None,
|
||||||
@@ -318,6 +319,7 @@ mod tests {
|
|||||||
meta.insert(
|
meta.insert(
|
||||||
"article".to_string(),
|
"article".to_string(),
|
||||||
CategorySettings {
|
CategorySettings {
|
||||||
|
title: None,
|
||||||
render_in_lists: true,
|
render_in_lists: true,
|
||||||
show_title: true,
|
show_title: true,
|
||||||
post_template_slug: None,
|
post_template_slug: None,
|
||||||
@@ -330,6 +332,33 @@ mod tests {
|
|||||||
assert!(read["article"].render_in_lists);
|
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 ─────────────────────────────────────────────
|
// ── publishing.json ─────────────────────────────────────────────
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -407,6 +436,7 @@ mod tests {
|
|||||||
meta.insert(
|
meta.insert(
|
||||||
"article".to_string(),
|
"article".to_string(),
|
||||||
CategorySettings {
|
CategorySettings {
|
||||||
|
title: None,
|
||||||
render_in_lists: true,
|
render_in_lists: true,
|
||||||
show_title: true,
|
show_title: true,
|
||||||
post_template_slug: None,
|
post_template_slug: None,
|
||||||
|
|||||||
@@ -1530,6 +1530,7 @@ mod tests {
|
|||||||
(
|
(
|
||||||
"hidden".to_string(),
|
"hidden".to_string(),
|
||||||
crate::model::CategorySettings {
|
crate::model::CategorySettings {
|
||||||
|
title: None,
|
||||||
render_in_lists: false,
|
render_in_lists: false,
|
||||||
show_title: true,
|
show_title: true,
|
||||||
post_template_slug: None,
|
post_template_slug: None,
|
||||||
@@ -1539,6 +1540,7 @@ mod tests {
|
|||||||
(
|
(
|
||||||
"featured".to_string(),
|
"featured".to_string(),
|
||||||
crate::model::CategorySettings {
|
crate::model::CategorySettings {
|
||||||
|
title: None,
|
||||||
render_in_lists: true,
|
render_in_lists: true,
|
||||||
show_title: false,
|
show_title: false,
|
||||||
post_template_slug: None,
|
post_template_slug: None,
|
||||||
|
|||||||
@@ -97,6 +97,8 @@ impl ProjectMetadata {
|
|||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct CategorySettings {
|
pub struct CategorySettings {
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub title: Option<String>,
|
||||||
#[serde(default = "default_true")]
|
#[serde(default = "default_true")]
|
||||||
pub render_in_lists: bool,
|
pub render_in_lists: bool,
|
||||||
#[serde(default = "default_true")]
|
#[serde(default = "default_true")]
|
||||||
@@ -167,12 +169,14 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn category_settings_camel_case() {
|
fn category_settings_camel_case() {
|
||||||
let settings = CategorySettings {
|
let settings = CategorySettings {
|
||||||
|
title: Some("Article".into()),
|
||||||
render_in_lists: false,
|
render_in_lists: false,
|
||||||
show_title: true,
|
show_title: true,
|
||||||
post_template_slug: Some("article-tpl".into()),
|
post_template_slug: Some("article-tpl".into()),
|
||||||
list_template_slug: None,
|
list_template_slug: None,
|
||||||
};
|
};
|
||||||
let json = serde_json::to_string(&settings).unwrap();
|
let json = serde_json::to_string(&settings).unwrap();
|
||||||
|
assert!(json.contains("title"));
|
||||||
assert!(json.contains("renderInLists"));
|
assert!(json.contains("renderInLists"));
|
||||||
assert!(json.contains("showTitle"));
|
assert!(json.contains("showTitle"));
|
||||||
assert!(json.contains("postTemplateSlug"));
|
assert!(json.contains("postTemplateSlug"));
|
||||||
|
|||||||
@@ -619,6 +619,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
|
|||||||
(
|
(
|
||||||
"hidden".to_string(),
|
"hidden".to_string(),
|
||||||
CategorySettings {
|
CategorySettings {
|
||||||
|
title: None,
|
||||||
render_in_lists: false,
|
render_in_lists: false,
|
||||||
show_title: true,
|
show_title: true,
|
||||||
post_template_slug: None,
|
post_template_slug: None,
|
||||||
@@ -628,6 +629,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
|
|||||||
(
|
(
|
||||||
"featured".to_string(),
|
"featured".to_string(),
|
||||||
CategorySettings {
|
CategorySettings {
|
||||||
|
title: None,
|
||||||
render_in_lists: true,
|
render_in_lists: true,
|
||||||
show_title: false,
|
show_title: false,
|
||||||
post_template_slug: None,
|
post_template_slug: None,
|
||||||
|
|||||||
@@ -7110,7 +7110,9 @@ impl BdsApp {
|
|||||||
.map(|name| {
|
.map(|name| {
|
||||||
let meta = category_meta.get(&name);
|
let meta = category_meta.get(&name);
|
||||||
SettingsCategoryRow {
|
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),
|
render_in_lists: meta.map(|value| value.render_in_lists).unwrap_or(true),
|
||||||
show_title: meta.map(|value| value.show_title).unwrap_or(true),
|
show_title: meta.map(|value| value.show_title).unwrap_or(true),
|
||||||
post_template_slug: meta
|
post_template_slug: meta
|
||||||
@@ -7781,6 +7783,7 @@ impl BdsApp {
|
|||||||
category_meta.insert(
|
category_meta.insert(
|
||||||
row.name.clone(),
|
row.name.clone(),
|
||||||
bds_core::model::metadata::CategorySettings {
|
bds_core::model::metadata::CategorySettings {
|
||||||
|
title: Some(row.title.clone()).filter(|title| !title.trim().is_empty()),
|
||||||
render_in_lists: row.render_in_lists,
|
render_in_lists: row.render_in_lists,
|
||||||
show_title: row.show_title,
|
show_title: row.show_title,
|
||||||
post_template_slug: (!row.post_template_slug.is_empty())
|
post_template_slug: (!row.post_template_slug.is_empty())
|
||||||
@@ -7822,6 +7825,8 @@ impl BdsApp {
|
|||||||
(
|
(
|
||||||
row.name,
|
row.name,
|
||||||
bds_core::model::metadata::CategorySettings {
|
bds_core::model::metadata::CategorySettings {
|
||||||
|
title: Some(row.title.clone())
|
||||||
|
.filter(|title| !title.trim().is_empty()),
|
||||||
render_in_lists: row.render_in_lists,
|
render_in_lists: row.render_in_lists,
|
||||||
show_title: row.show_title,
|
show_title: row.show_title,
|
||||||
post_template_slug: None,
|
post_template_slug: None,
|
||||||
|
|||||||
Reference in New Issue
Block a user