Skip to main content

cedros_data/
defaults.rs

1use serde_json::json;
2
3use crate::models::DefaultPageTemplate;
4
5pub const DEFAULT_SITE_NAME: &str = "Default Site";
6pub(crate) const SITE_SCHEMA_NAME: &str = "site_data";
7
8pub fn default_page_templates() -> Vec<DefaultPageTemplate> {
9    vec![
10        DefaultPageTemplate::new("home", "Home", "/", "core"),
11        DefaultPageTemplate::new("about", "About", "/about", "core"),
12        DefaultPageTemplate::new("contact", "Contact", "/contact", "core"),
13        DefaultPageTemplate::new("docs", "Docs", "/docs", "content"),
14        DefaultPageTemplate::new("blog", "Blog", "/blog", "content"),
15        DefaultPageTemplate::new(
16            "privacy-policy",
17            "Privacy Policy",
18            "/privacy-policy",
19            "legal",
20        ),
21        DefaultPageTemplate::new(
22            "terms-of-service",
23            "Terms of Service",
24            "/terms-of-service",
25            "legal",
26        ),
27        DefaultPageTemplate::new("not-found", "Not Found", "/404", "core"),
28    ]
29}
30
31pub fn default_page_payload(template: &DefaultPageTemplate) -> serde_json::Value {
32    json!({
33        "key": template.key,
34        "title": template.title,
35        "route": template.route,
36        "section": template.section,
37        "status": "draft",
38        "meta": {},
39        "blocks": []
40    })
41}
42
43pub fn default_navigation_payload(templates: &[DefaultPageTemplate]) -> serde_json::Value {
44    let items = templates
45        .iter()
46        .filter(|template| template.key != "not-found")
47        .map(|template| {
48            json!({
49                "key": template.key,
50                "label": template.title,
51                "route": template.route
52            })
53        })
54        .collect::<Vec<serde_json::Value>>();
55
56    json!({
57        "key": "main",
58        "items": items
59    })
60}
61
62pub fn default_site_settings_payload() -> serde_json::Value {
63    json!({
64        "siteTitle": "New Site",
65        "siteDescription": "",
66        "locale": "en-US",
67        "timezone": "UTC"
68    })
69}
70
71pub fn default_tipping_payload() -> serde_json::Value {
72    json!({
73        "enabled": false,
74        "recipient": "",
75        "currencies": [],
76        "presets": {},
77        "label": "Leave a tip",
78        "description": "",
79        "allowPerPostRecipient": false
80    })
81}
82
83pub fn default_monetization_payload() -> serde_json::Value {
84    json!({
85        "enabled": false,
86        "defaultAccessMode": "free",
87        "defaultPreviewParagraphs": 3,
88        "acceptedPaymentMethods": [],
89        "defaultPrice": { "amount": 0, "currency": "USD" },
90        "subscriptionProductId": "",
91        "creditsPerArticle": 0,
92        "freeReadsPerMonth": 0
93    })
94}
95
96#[cfg(test)]
97mod tests {
98    use super::default_page_templates;
99
100    #[test]
101    fn defaults_include_legal_pages() {
102        let keys = default_page_templates()
103            .into_iter()
104            .map(|page| page.key)
105            .collect::<Vec<String>>();
106        assert!(keys.contains(&"privacy-policy".to_string()));
107        assert!(keys.contains(&"terms-of-service".to_string()));
108    }
109
110    #[test]
111    fn defaults_exclude_commerce_pages() {
112        let keys = default_page_templates()
113            .into_iter()
114            .map(|page| page.key)
115            .collect::<Vec<String>>();
116        assert!(!keys.contains(&"catalog".to_string()));
117        assert!(!keys.contains(&"cart".to_string()));
118        assert!(!keys.contains(&"checkout".to_string()));
119        assert!(!keys.contains(&"account".to_string()));
120    }
121}