annotate tests/test_dataproviders_blog.py @ 1145:e94737572542

serve: Fix an issue where false positive matches were rendered as the requested page. Now we try to render the page, but also try to detect for the most common "empty" pages.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 05 Jun 2018 22:08:51 -0700
parents 45ad976712ec
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
979
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 from .mockutil import mock_fs, mock_fs_scope
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 from .rdrutil import render_simple_page
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 def _get_post_tokens(i, posts_per_month=2, posts_per_year=5, first_year=2001):
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 year = first_year + int(i / posts_per_year)
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 i_in_year = i % posts_per_year
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 month = int(i_in_year / posts_per_month) + 1
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 day = i_in_year % posts_per_month + 1
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 return (year, month, day, i + 1)
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 def test_blog_provider_archives():
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 fs = (mock_fs()
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 .withConfig({
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 'site': {
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 'default_layout': 'none',
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 'default_format': 'none'
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 }
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 })
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 .withPages(
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 20,
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 lambda i: ('posts/%04d-%02d-%02d_post-%d.md' %
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 _get_post_tokens(i)),
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 lambda i: {'title': "Post %02d" % (i + 1), 'format': 'none'},
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 lambda i: "This is post %02d" % (i + 1))
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 .withPage('pages/allposts.html',
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 {'layout': 'none'},
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 "{%for p in blog.posts-%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 "{{p.title}}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 "{%endfor%}\n")
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 .withPage('pages/allyears.html',
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 {'layout': 'none'},
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 "{%for y in blog.years-%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 "YEAR={{y}}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 "{%for p in y.posts-%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 "{{p.title}}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 "{%endfor%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 "{%endfor%}")
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 .withFile('kitchen/templates/_year.html',
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 "YEAR={{year}}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 "{%for p in archives-%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 "{{p.title}}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 "{%endfor%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 "\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 "{%for m in monthly_archives-%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 "MONTH={{m.timestamp|date('%m')}}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 "{%for p in m.posts-%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 "{{p.title}}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 "{%endfor%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 "{%endfor%}"))
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 with mock_fs_scope(fs):
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 fs.runChef('bake', '-o', fs.path('counter'))
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 # Check `allposts`.
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 # Should have all the posts. Duh.
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 expected = '\n'.join(map(lambda i: "Post %02d" % i,
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 range(20, 0, -1))) + '\n'
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 actual = fs.getFileEntry('counter/allposts.html')
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 assert expected == actual
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 # Check `allyears`.
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 # Should have all the years, each with 5 posts in reverse
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 # chronological order.
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 expected = ''
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 cur_index = 20
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 for y in range(2004, 2000, -1):
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 expected += ('YEAR=%04d\n' % y) + '\n'.join(
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 map(lambda i: "Post %02d" % i,
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 range(cur_index, cur_index - 5, -1))) + '\n\n'
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 cur_index -= 5
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 actual = fs.getFileEntry('counter/allyears.html')
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 assert expected == actual
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 # Check each yearly page.
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 # Should have both the posts for that year (5 posts) in
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 # chronological order, followed by the months for that year
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 # (3 months) and the posts in each month (2, 2, and 1).
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 cur_index = 1
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 for y in range(2001, 2005):
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 orig_index = cur_index
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 expected = ('YEAR=%04d\n' % y) + '\n'.join(
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 map(lambda i: "Post %02d" % i,
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 range(cur_index, cur_index + 5))) + '\n'
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 expected += "\n\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 orig_final_index = cur_index
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 cur_index = orig_index
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 for m in range(1, 4):
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 expected += 'MONTH=%02d\n' % m
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 expected += '\n'.join(
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 map(lambda i: "Post %02d" % i,
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93 range(cur_index,
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 min(cur_index + 2, orig_index + 5)))) + '\n'
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 expected += '\n'
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 cur_index += 2
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 cur_index = orig_final_index
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 actual = fs.getFileEntry('counter/archives/%04d.html' % y)
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 assert expected == actual
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101 cur_index += 5
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 def test_blog_provider_tags():
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105 fs = (mock_fs()
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 .withConfig()
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 .withPage('posts/2015-03-01_one.md',
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 {'title': 'One', 'tags': ['Foo']})
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109 .withPage('posts/2015-03-02_two.md',
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 {'title': 'Two', 'tags': ['Foo']})
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 .withPage('posts/2015-03-03_three.md',
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 {'title': 'Three', 'tags': ['Bar']})
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 .withPage('pages/tags.md',
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 {'format': 'none', 'layout': 'none'},
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 "{%for c in blog.tags%}\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 "{{c.name}} ({{c.post_count}})\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 "{%endfor%}\n"))
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 with mock_fs_scope(fs):
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 page = fs.getSimplePage('tags.md')
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120 actual = render_simple_page(page)
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 expected = "\nBar (1)\n\nFoo (2)\n"
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 assert actual == expected
45ad976712ec tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123