1 use crate::template::{find, parse, Context};
3 use std::io::{Error, ErrorKind::Other, Result};
6 const FILENAME: &str = "index.txt";
10 template_directory: &Path,
14 if let Some(template) = find(template_directory, FILENAME) {
16 parse(&template).ok_or_else(|| Error::new(Other, "Unable to parse TXT template"))?;
17 let rendered_template = parsed_template.render(context)?;
18 let location = target.join(FILENAME);
19 write(location, rendered_template)?;
26 use std::collections::HashMap;
27 use std::fs::create_dir_all;
31 use crate::template::Value;
33 use test_utilities::*;
36 fn test_generates_txt_with_default_layout() {
37 let test_dir = setup_test_dir();
38 let static_dir = test_dir.join("static");
39 let template_dir = test_dir.join("templates");
40 let output_dir = test_dir.join("output");
42 create_dir_all(&static_dir).expect("Could not create static directory");
43 create_dir_all(&template_dir).expect("Could not create template directory");
44 create_dir_all(&output_dir).expect("Could not create output directory");
46 let context = HashMap::from([
47 ("has_posts".to_string(), Value::Bool(true)),
50 Value::Collection(vec![
53 Value::String("Contextualization".to_string()),
57 Value::String("Contexternalization".to_string()),
63 generate(&static_dir, &template_dir, &output_dir, &context).expect("Generate failed");
65 assert_file_contains(&output_dir.join("index.txt"), "Contextualization");
66 assert_file_contains(&output_dir.join("index.txt"), "Contexternalization");
70 fn test_uses_custom_layout_if_available() {
71 let test_dir = setup_test_dir();
72 let static_dir = test_dir.join("static");
73 let template_dir = test_dir.join("templates");
74 let output_dir = test_dir.join("output");
76 create_dir_all(&static_dir).expect("Could not create static directory");
77 create_dir_all(&template_dir).expect("Could not create template directory");
78 create_dir_all(&output_dir).expect("Could not create output directory");
80 &template_dir.join("index.txt"),
87 let context = HashMap::from([(
89 Value::Collection(vec![
92 Value::String("Recontextualization".to_string()),
96 Value::String("Recontexternalization".to_string()),
101 generate(&static_dir, &template_dir, &output_dir, &context).expect("Generate failed");
103 assert_file_contents(
104 &output_dir.join("index.txt"),
108 Recontexternalization
114 fn test_fails_if_txt_is_malformed() {
115 let test_dir = setup_test_dir();
116 let static_dir = test_dir.join("static");
117 let template_dir = test_dir.join("templates");
118 let output_dir = test_dir.join("output");
120 create_dir_all(&static_dir).expect("Could not create static directory");
121 create_dir_all(&template_dir).expect("Could not create template directory");
122 create_dir_all(&output_dir).expect("Could not create output directory");
124 &template_dir.join("index.txt"),
131 let context = HashMap::new();
133 let result = generate(&static_dir, &template_dir, &output_dir, &context);
135 assert!(result.is_err());
139 fn test_fails_if_output_is_not_writable() {
140 let test_dir = setup_test_dir();
141 let static_dir = test_dir.join("static");
142 let template_dir = test_dir.join("templates");
143 let output_dir = test_dir.join("output");
145 create_dir_all(&template_dir).expect("Could not create template directory");
147 &template_dir.join("index.txt"),
154 let context = HashMap::from([(
156 Value::Collection(vec![
159 Value::String("Recontextualization".to_string()),
163 Value::String("Recontexternalization".to_string()),
168 let result = generate(&static_dir, &template_dir, &output_dir, &context);
170 assert!(result.is_err());