2018-12-28 11:15:17 +00:00
|
|
|
extern crate site;
|
2018-12-28 16:30:47 +00:00
|
|
|
mod common;
|
2018-12-28 11:15:17 +00:00
|
|
|
|
|
|
|
use std::env;
|
|
|
|
|
2018-12-28 16:30:47 +00:00
|
|
|
use common::build_site;
|
2018-12-29 10:17:43 +00:00
|
|
|
use site::Site;
|
2018-12-28 11:15:17 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn can_parse_multilingual_site() {
|
|
|
|
let mut path = env::current_dir().unwrap().parent().unwrap().parent().unwrap().to_path_buf();
|
|
|
|
path.push("test_site_i18n");
|
|
|
|
let mut site = Site::new(&path, "config.toml").unwrap();
|
|
|
|
site.load().unwrap();
|
|
|
|
|
2019-01-27 17:57:07 +00:00
|
|
|
let library = site.library.read().unwrap();
|
|
|
|
assert_eq!(library.pages().len(), 10);
|
|
|
|
assert_eq!(library.sections().len(), 6);
|
2018-12-28 11:15:17 +00:00
|
|
|
|
|
|
|
// default index sections
|
2018-12-29 10:17:43 +00:00
|
|
|
let default_index_section =
|
2019-01-27 17:57:07 +00:00
|
|
|
library.get_section(&path.join("content").join("_index.md")).unwrap();
|
2018-12-28 11:15:17 +00:00
|
|
|
assert_eq!(default_index_section.pages.len(), 1);
|
|
|
|
assert!(default_index_section.ancestors.is_empty());
|
|
|
|
|
2018-12-29 10:17:43 +00:00
|
|
|
let fr_index_section =
|
2019-01-27 17:57:07 +00:00
|
|
|
library.get_section(&path.join("content").join("_index.fr.md")).unwrap();
|
2018-12-28 11:15:17 +00:00
|
|
|
assert_eq!(fr_index_section.pages.len(), 1);
|
|
|
|
assert!(fr_index_section.ancestors.is_empty());
|
|
|
|
|
|
|
|
// blog sections get only their own language pages
|
|
|
|
let blog_path = path.join("content").join("blog");
|
|
|
|
|
2019-01-27 17:57:07 +00:00
|
|
|
let default_blog = library.get_section(&blog_path.join("_index.md")).unwrap();
|
2018-12-28 11:15:17 +00:00
|
|
|
assert_eq!(default_blog.subsections.len(), 0);
|
|
|
|
assert_eq!(default_blog.pages.len(), 4);
|
2018-12-29 10:17:43 +00:00
|
|
|
assert_eq!(
|
|
|
|
default_blog.ancestors,
|
2019-01-27 17:57:07 +00:00
|
|
|
vec![*library.get_section_key(&default_index_section.file.path).unwrap()]
|
2018-12-29 10:17:43 +00:00
|
|
|
);
|
2018-12-28 11:15:17 +00:00
|
|
|
for key in &default_blog.pages {
|
2019-01-27 17:57:07 +00:00
|
|
|
let page = library.get_page_by_key(*key);
|
2019-01-29 18:20:03 +00:00
|
|
|
assert_eq!(page.lang, "en");
|
2018-12-28 11:15:17 +00:00
|
|
|
}
|
|
|
|
|
2019-01-27 17:57:07 +00:00
|
|
|
let fr_blog = library.get_section(&blog_path.join("_index.fr.md")).unwrap();
|
2018-12-28 11:15:17 +00:00
|
|
|
assert_eq!(fr_blog.subsections.len(), 0);
|
|
|
|
assert_eq!(fr_blog.pages.len(), 3);
|
2018-12-29 10:17:43 +00:00
|
|
|
assert_eq!(
|
|
|
|
fr_blog.ancestors,
|
2019-01-27 17:57:07 +00:00
|
|
|
vec![*library.get_section_key(&fr_index_section.file.path).unwrap()]
|
2018-12-29 10:17:43 +00:00
|
|
|
);
|
2018-12-28 11:15:17 +00:00
|
|
|
for key in &fr_blog.pages {
|
2019-01-27 17:57:07 +00:00
|
|
|
let page = library.get_page_by_key(*key);
|
2019-01-29 18:20:03 +00:00
|
|
|
assert_eq!(page.lang, "fr");
|
2018-12-28 11:15:17 +00:00
|
|
|
}
|
|
|
|
}
|
2018-12-28 16:30:47 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn can_build_multilingual_site() {
|
|
|
|
let (_, _tmp_dir, public) = build_site("test_site_i18n");
|
|
|
|
|
|
|
|
assert!(public.exists());
|
|
|
|
|
|
|
|
// Index pages
|
|
|
|
assert!(file_exists!(public, "index.html"));
|
|
|
|
assert!(file_exists!(public, "fr/index.html"));
|
|
|
|
assert!(file_contains!(public, "fr/index.html", "Une page"));
|
|
|
|
assert!(file_contains!(public, "fr/index.html", "Language: fr"));
|
|
|
|
|
|
|
|
assert!(file_exists!(public, "base/index.html"));
|
|
|
|
assert!(file_exists!(public, "fr/base/index.html"));
|
|
|
|
|
2019-01-04 19:31:31 +00:00
|
|
|
// Sections are there as well, with translations info
|
2018-12-28 16:30:47 +00:00
|
|
|
assert!(file_exists!(public, "blog/index.html"));
|
2019-01-04 19:34:20 +00:00
|
|
|
assert!(file_contains!(
|
|
|
|
public,
|
|
|
|
"blog/index.html",
|
|
|
|
"Translated in fr: Mon blog https://example.com/fr/blog/"
|
|
|
|
));
|
|
|
|
assert!(file_contains!(
|
|
|
|
public,
|
|
|
|
"blog/index.html",
|
|
|
|
"Translated in it: Il mio blog https://example.com/it/blog/"
|
|
|
|
));
|
2018-12-28 16:30:47 +00:00
|
|
|
assert!(file_exists!(public, "fr/blog/index.html"));
|
|
|
|
assert!(file_contains!(public, "fr/blog/index.html", "Language: fr"));
|
2019-01-04 19:34:20 +00:00
|
|
|
assert!(file_contains!(
|
|
|
|
public,
|
|
|
|
"fr/blog/index.html",
|
2019-01-25 15:18:48 +00:00
|
|
|
"Translated in en: My blog https://example.com/blog/"
|
2019-01-04 19:34:20 +00:00
|
|
|
));
|
|
|
|
assert!(file_contains!(
|
|
|
|
public,
|
|
|
|
"fr/blog/index.html",
|
|
|
|
"Translated in it: Il mio blog https://example.com/it/blog/"
|
|
|
|
));
|
2019-01-04 19:31:31 +00:00
|
|
|
|
|
|
|
// Normal pages are there with the translations
|
|
|
|
assert!(file_exists!(public, "blog/something/index.html"));
|
2019-01-04 19:34:20 +00:00
|
|
|
assert!(file_contains!(
|
|
|
|
public,
|
|
|
|
"blog/something/index.html",
|
|
|
|
"Translated in fr: Quelque chose https://example.com/fr/blog/something/"
|
|
|
|
));
|
2019-01-04 19:31:31 +00:00
|
|
|
assert!(file_exists!(public, "fr/blog/something/index.html"));
|
|
|
|
assert!(file_contains!(public, "fr/blog/something/index.html", "Language: fr"));
|
2019-01-04 19:34:20 +00:00
|
|
|
assert!(file_contains!(
|
|
|
|
public,
|
|
|
|
"fr/blog/something/index.html",
|
2019-01-25 15:18:48 +00:00
|
|
|
"Translated in en: Something https://example.com/blog/something/"
|
2019-01-04 19:34:20 +00:00
|
|
|
));
|
2018-12-28 16:30:47 +00:00
|
|
|
|
|
|
|
// sitemap contains all languages
|
|
|
|
assert!(file_exists!(public, "sitemap.xml"));
|
|
|
|
assert!(file_contains!(public, "sitemap.xml", "https://example.com/blog/something-else/"));
|
|
|
|
assert!(file_contains!(public, "sitemap.xml", "https://example.com/fr/blog/something-else/"));
|
2019-01-02 21:11:34 +00:00
|
|
|
assert!(file_contains!(public, "sitemap.xml", "https://example.com/it/blog/something-else/"));
|
|
|
|
|
|
|
|
// one rss per language
|
|
|
|
assert!(file_exists!(public, "rss.xml"));
|
|
|
|
assert!(file_contains!(public, "rss.xml", "https://example.com/blog/something-else/"));
|
|
|
|
assert!(!file_contains!(public, "rss.xml", "https://example.com/fr/blog/something-else/"));
|
|
|
|
assert!(file_exists!(public, "fr/rss.xml"));
|
|
|
|
assert!(!file_contains!(public, "fr/rss.xml", "https://example.com/blog/something-else/"));
|
|
|
|
assert!(file_contains!(public, "fr/rss.xml", "https://example.com/fr/blog/something-else/"));
|
|
|
|
// Italian doesn't have RSS enabled
|
|
|
|
assert!(!file_exists!(public, "it/rss.xml"));
|
2019-01-07 20:03:34 +00:00
|
|
|
|
|
|
|
// Taxonomies are per-language
|
|
|
|
assert!(file_exists!(public, "authors/index.html"));
|
|
|
|
assert!(file_contains!(public, "authors/index.html", "Queen"));
|
|
|
|
assert!(!file_contains!(public, "authors/index.html", "Vincent"));
|
|
|
|
assert!(!file_exists!(public, "auteurs/index.html"));
|
|
|
|
assert!(file_exists!(public, "authors/queen-elizabeth/rss.xml"));
|
|
|
|
|
|
|
|
assert!(!file_exists!(public, "fr/authors/index.html"));
|
|
|
|
assert!(file_exists!(public, "fr/auteurs/index.html"));
|
|
|
|
assert!(!file_contains!(public, "fr/auteurs/index.html", "Queen"));
|
|
|
|
assert!(file_contains!(public, "fr/auteurs/index.html", "Vincent"));
|
|
|
|
assert!(!file_exists!(public, "fr/auteurs/vincent-prouillet/rss.xml"));
|
|
|
|
|
2018-12-28 16:30:47 +00:00
|
|
|
}
|