Skip to content

Commit 995e116

Browse files
committed
Add additional tests for unrendered pages/sections:
* They can be accessed through templates directly and through sections * Unrendered pages are not added to sitemaps * Unrendered pages are not added to taxonomies
1 parent 896a805 commit 995e116

File tree

5 files changed

+82
-12
lines changed

5 files changed

+82
-12
lines changed

Diff for: components/site/tests/common.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ macro_rules! file_exists {
2222

2323
#[macro_export]
2424
macro_rules! file_contains {
25-
($root: expr, $path: expr, $text: expr) => {{
25+
(@impl $root: expr, $path: expr) => {{
2626
use std::io::prelude::*;
2727
let mut path = $root.clone();
2828
for component in $path.split('/') {
@@ -31,11 +31,24 @@ macro_rules! file_contains {
3131
let mut file = std::fs::File::open(&path).expect(&format!("Failed to open {:?}", $path));
3232
let mut s = String::new();
3333
file.read_to_string(&mut s).unwrap();
34-
println!("{}", s);
34+
println!("{path:?} {s}");
35+
s
36+
}};
37+
($root: expr, $path: expr, $text: expr) => {{
38+
let s = file_contains!(@impl $root, $path);
3539
s.contains($text)
3640
}};
3741
}
3842

43+
#[macro_export]
44+
macro_rules! file_contains_regex {
45+
($root: expr, $path: expr, $pat: expr) => {{
46+
let s = file_contains!(@impl $root, $path);
47+
let re = libs::regex::Regex::new($pat).unwrap();
48+
re.is_match(&s)
49+
}};
50+
}
51+
3952
/// We return the tmpdir otherwise it would get out of scope and be deleted
4053
/// The tests can ignore it if they dont need it by prefixing it with a `_`
4154
pub fn build_site(name: &str) -> (Site, TempDir, PathBuf) {

Diff for: components/site/tests/site.rs

+39-10
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ fn can_parse_site() {
2121
let library = site.library.read().unwrap();
2222

2323
// Correct number of pages (sections do not count as pages, draft are ignored)
24-
assert_eq!(library.pages.len(), 36);
24+
assert_eq!(library.pages.len(), 37);
2525
let posts_path = path.join("content").join("posts");
2626

2727
// Make sure the page with a url doesn't have any sections
@@ -44,7 +44,7 @@ fn can_parse_site() {
4444

4545
let posts_section = library.sections.get(&posts_path.join("_index.md")).unwrap();
4646
assert_eq!(posts_section.subsections.len(), 2);
47-
assert_eq!(posts_section.pages.len(), 10); // 11 with 1 draft == 10
47+
assert_eq!(posts_section.pages.len(), 12); // 13 with 1 draft == 12
4848
assert_eq!(posts_section.ancestors, vec![index_section.file.relative.clone()]);
4949

5050
// Make sure we remove all the pwd + content from the sections
@@ -155,6 +155,33 @@ fn can_build_site_without_live_reload() {
155155
"posts/tutorials/devops/nix.md"
156156
));
157157

158+
assert!(file_exists!(public, "posts/access-render/index.html"));
159+
160+
// render = false pages can still be accessed directly
161+
assert!(file_contains!(
162+
public,
163+
"posts/access-render/index.html",
164+
"Path of unrendered page: /posts/render/"
165+
));
166+
// render = false pages can still be accessed through sections
167+
assert!(file_contains_regex!(
168+
public,
169+
"posts/access-render/index.html",
170+
r#"Pages in section with unrendered page: <ul>(<li>[^>]+</li>)*<li>/posts/render/</li>"#
171+
));
172+
// render = false sections can still be accessed directly
173+
assert!(file_contains!(
174+
public,
175+
"posts/access-render/index.html",
176+
"Pages in unrendered section: <ul><li>"
177+
));
178+
// render = false pages don't show up in taxonomies
179+
assert!(!file_contains!(public, "podcast-authors/some-person/atom.xml", "/posts/render/"));
180+
assert!(!file_contains!(public, "categories/a-category/atom.xml", "/posts/render/"));
181+
// render = false pages don't even add terms to taxonomies
182+
assert!(!file_exists!(public, "podcast-authors/other-person/atom.xml"));
183+
assert!(!file_exists!(public, "categories/b-category/atom.xml"));
184+
158185
// aliases work
159186
assert!(file_exists!(public, "an-old-url/old-page/index.html"));
160187
assert!(file_contains!(public, "an-old-url/old-page/index.html", "something-else"));
@@ -216,6 +243,8 @@ fn can_build_site_without_live_reload() {
216243
assert!(!file_contains!(public, "sitemap.xml", "draft"));
217244
// render: false sections are not in the sitemap either
218245
assert!(!file_contains!(public, "sitemap.xml", "posts/2018/</loc>"));
246+
// render: false pages are not in the sitemap either
247+
assert!(!file_contains!(public, "sitemap.xml", "posts/render/</loc>"));
219248

220249
// robots.txt has been rendered from the template
221250
assert!(file_contains!(public, "robots.txt", "User-agent: zola"));
@@ -417,7 +446,7 @@ fn can_build_site_with_pagination_for_section() {
417446
"posts/page/1/index.html",
418447
"http-equiv=\"refresh\" content=\"0; url=https://replace-this-with-your-url.com/posts/\""
419448
));
420-
assert!(file_contains!(public, "posts/index.html", "Num pagers: 5"));
449+
assert!(file_contains!(public, "posts/index.html", "Num pagers: 6"));
421450
assert!(file_contains!(public, "posts/index.html", "Page size: 2"));
422451
assert!(file_contains!(public, "posts/index.html", "Current index: 1"));
423452
assert!(!file_contains!(public, "posts/index.html", "has_prev"));
@@ -430,12 +459,12 @@ fn can_build_site_with_pagination_for_section() {
430459
assert!(file_contains!(
431460
public,
432461
"posts/index.html",
433-
"Last: https://replace-this-with-your-url.com/posts/page/5/"
462+
"Last: https://replace-this-with-your-url.com/posts/page/6/"
434463
));
435464
assert!(!file_contains!(public, "posts/index.html", "has_prev"));
436465

437466
assert!(file_exists!(public, "posts/page/2/index.html"));
438-
assert!(file_contains!(public, "posts/page/2/index.html", "Num pagers: 5"));
467+
assert!(file_contains!(public, "posts/page/2/index.html", "Num pagers: 6"));
439468
assert!(file_contains!(public, "posts/page/2/index.html", "Page size: 2"));
440469
assert!(file_contains!(public, "posts/page/2/index.html", "Current index: 2"));
441470
assert!(file_contains!(public, "posts/page/2/index.html", "has_prev"));
@@ -448,11 +477,11 @@ fn can_build_site_with_pagination_for_section() {
448477
assert!(file_contains!(
449478
public,
450479
"posts/page/2/index.html",
451-
"Last: https://replace-this-with-your-url.com/posts/page/5/"
480+
"Last: https://replace-this-with-your-url.com/posts/page/6/"
452481
));
453482

454483
assert!(file_exists!(public, "posts/page/3/index.html"));
455-
assert!(file_contains!(public, "posts/page/3/index.html", "Num pagers: 5"));
484+
assert!(file_contains!(public, "posts/page/3/index.html", "Num pagers: 6"));
456485
assert!(file_contains!(public, "posts/page/3/index.html", "Page size: 2"));
457486
assert!(file_contains!(public, "posts/page/3/index.html", "Current index: 3"));
458487
assert!(file_contains!(public, "posts/page/3/index.html", "has_prev"));
@@ -465,11 +494,11 @@ fn can_build_site_with_pagination_for_section() {
465494
assert!(file_contains!(
466495
public,
467496
"posts/page/3/index.html",
468-
"Last: https://replace-this-with-your-url.com/posts/page/5/"
497+
"Last: https://replace-this-with-your-url.com/posts/page/6/"
469498
));
470499

471500
assert!(file_exists!(public, "posts/page/4/index.html"));
472-
assert!(file_contains!(public, "posts/page/4/index.html", "Num pagers: 5"));
501+
assert!(file_contains!(public, "posts/page/4/index.html", "Num pagers: 6"));
473502
assert!(file_contains!(public, "posts/page/4/index.html", "Page size: 2"));
474503
assert!(file_contains!(public, "posts/page/4/index.html", "Current index: 4"));
475504
assert!(file_contains!(public, "posts/page/4/index.html", "has_prev"));
@@ -482,7 +511,7 @@ fn can_build_site_with_pagination_for_section() {
482511
assert!(file_contains!(
483512
public,
484513
"posts/page/4/index.html",
485-
"Last: https://replace-this-with-your-url.com/posts/page/5/"
514+
"Last: https://replace-this-with-your-url.com/posts/page/6/"
486515
));
487516

488517
// sitemap contains the pager pages

Diff for: test_site/content/posts/access-render.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
+++
2+
title = 'render = false tests'
3+
slug = 'access-render'
4+
template = 'access_render.html'
5+
date = 2000-01-01
6+
+++
7+
8+
This post exists to test that unrendered sections and pages are still accessible
9+
via templates.

Diff for: test_site/content/posts/render.md

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ title = "Page with content but without generated folder"
33
description = ""
44
date = 2017-04-01
55
render = false
6+
7+
[taxonomies]
8+
categories = ["a-category", "b-category"]
9+
podcast_authors = ["Some Person", "Other Person"]
610
+++
711

812
Don't generate a folder for this page

Diff for: test_site/templates/access_render.html

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{% extends "index.html" %}
2+
3+
{% block content %}
4+
{% set unrendered_page = get_page(path='posts/render.md') %}
5+
{% set section_with_unrendered = get_section(path='posts/_index.md') %}
6+
{% set unrendered_section = get_section(path='posts/2018/_index.md') %}
7+
Path of unrendered page: {{ unrendered_page.path | safe }}
8+
Pages in section with unrendered page: <ul>{% for page in section_with_unrendered.pages -%}
9+
<li>{{ page.path | safe }}</li>
10+
{%- endfor %}</ul>
11+
Pages in unrendered section: <ul>{% for page in unrendered_section.pages -%}
12+
<li>{{ page.path | safe }}</li>
13+
{%- endfor %}</ul>
14+
{% endblock content %}
15+

0 commit comments

Comments
 (0)