Merge remote-tracking branch 'smcv/ready/map'
[ikiwiki] / t / autoindex.t
1 #!/usr/bin/perl
2 package IkiWiki;
3
4 use warnings;
5 use strict;
6 use Test::More tests => 38;
7
8 BEGIN { use_ok("IkiWiki"); }
9 BEGIN { use_ok("IkiWiki::Render"); }
10 BEGIN { use_ok("IkiWiki::Plugin::aggregate"); }
11 BEGIN { use_ok("IkiWiki::Plugin::autoindex"); }
12 BEGIN { use_ok("IkiWiki::Plugin::html"); }
13 BEGIN { use_ok("IkiWiki::Plugin::mdwn"); }
14
15 ok(! system("rm -rf t/tmp; mkdir t/tmp"));
16
17 $config{verbose} = 1;
18 $config{srcdir} = 't/tmp';
19 $config{underlaydir} = 't/tmp';
20 $config{underlaydirbase} = '.';
21 $config{templatedir} = 'templates';
22 $config{usedirs} = 1;
23 $config{htmlext} = 'html';
24 $config{wiki_file_chars} = "-[:alnum:]+/.:_";
25 $config{userdir} = "users";
26 $config{tagbase} = "tags";
27 $config{default_pageext} = "mdwn";
28 $config{wiki_file_prune_regexps} = [qr/^\./];
29 $config{autoindex_commit} = 0;
30
31 is(checkconfig(), 1);
32
33 %oldrenderedfiles=%pagectime=();
34 %pagesources=%pagemtime=%oldlinks=%links=%depends=%typedlinks=%oldtypedlinks=
35 %destsources=%renderedfiles=%pagecase=%pagestate=();
36
37 # Pages that (we claim) were deleted in an earlier pass. We're using deleted,
38 # not autofile, to test backwards compat.
39 $wikistate{autoindex}{deleted}{deleted} = 1;
40 $wikistate{autoindex}{deleted}{expunged} = 1;
41 $wikistate{autoindex}{deleted}{reinstated} = 1;
42
43 foreach my $page (qw(tags/numbers deleted/bar reinstated reinstated/foo gone/bar)) {
44         # we use a non-default extension for these, so they're distinguishable
45         # from programmatically-created pages
46         $pagesources{$page} = "$page.html";
47         $pagemtime{$page} = $pagectime{$page} = 1000000;
48         writefile("$page.html", "t/tmp", "your ad here");
49 }
50
51 # a directory containing only an internal page shouldn't be indexed
52 $pagesources{"has_internal/internal"} = "has_internal/internal._aggregated";
53 $pagemtime{"has_internal/internal"} = 123456789;
54 $pagectime{"has_internal/internal"} = 123456789;
55 writefile("has_internal/internal._aggregated", "t/tmp", "this page is internal");
56
57 # a directory containing only an attachment should be indexed
58 $pagesources{"attached/pie.jpg"} = "attached/pie.jpg";
59 $pagemtime{"attached/pie.jpg"} = 123456789;
60 $pagectime{"attached/pie.jpg"} = 123456789;
61 writefile("attached/pie.jpg", "t/tmp", "I lied, this isn't a real JPEG");
62
63 # "gone" disappeared just before this refresh pass so it still has a mtime
64 $pagemtime{gone} = $pagectime{gone} = 1000000;
65
66 my %pages;
67 my @del;
68
69 IkiWiki::Plugin::autoindex::refresh();
70
71 # this page is still on record as having been deleted, because it has
72 # a reason to be re-created
73 is($wikistate{autoindex}{autofile}{"deleted.mdwn"}, 1);
74 is($autofiles{"deleted.mdwn"}{plugin}, "autoindex");
75 %pages = ();
76 @del = ();
77 IkiWiki::gen_autofile("deleted.mdwn", \%pages, \@del);
78 is_deeply(\%pages, {});
79 is_deeply(\@del, []);
80 ok(! -f "t/tmp/deleted.mdwn");
81
82 # this page is tried as an autofile, but because it'll be in @del, it's not
83 # actually created
84 ok(! exists $wikistate{autoindex}{autofile}{"gone.mdwn"});
85 %pages = ();
86 @del = ("gone.mdwn");
87 is($autofiles{"gone.mdwn"}{plugin}, "autoindex");
88 IkiWiki::gen_autofile("gone.mdwn", \%pages, \@del);
89 is_deeply(\%pages, {});
90 is_deeply(\@del, ["gone.mdwn"]);
91 ok(! -f "t/tmp/gone.mdwn");
92
93 # this page does not exist and has no reason to be re-created, but we no longer
94 # have a special case for that - see
95 # [[todo/autoindex_should_use_add__95__autofile]] - so it won't be created
96 # even if it gains subpages later
97 is($wikistate{autoindex}{autofile}{"expunged.mdwn"}, 1);
98 ok(! exists $autofiles{"expunged.mdwn"});
99 ok(! -f "t/tmp/expunged.mdwn");
100
101 # a directory containing only an internal page shouldn't be indexed
102 ok(! exists $wikistate{autoindex}{autofile}{"has_internal.mdwn"});
103 ok(! exists $autofiles{"has_internal.mdwn"});
104 ok(! -f "t/tmp/has_internal.mdwn");
105
106 # this page was re-created, but that no longer gets a special case
107 # (see [[todo/autoindex_should_use_add__95__autofile]]) so it's the same as
108 # deleted
109 is($wikistate{autoindex}{autofile}{"reinstated.mdwn"}, 1);
110 ok(! exists $autofiles{"reinstated.mdwn"});
111 ok(! -f "t/tmp/reinstated.mdwn");
112
113 # needs creating (deferred; part of the autofile mechanism now)
114 ok(! exists $wikistate{autoindex}{autofile}{"tags.mdwn"});
115 %pages = ();
116 @del = ();
117 is($autofiles{"tags.mdwn"}{plugin}, "autoindex");
118 IkiWiki::gen_autofile("tags.mdwn", \%pages, \@del);
119 is_deeply(\%pages, {"t/tmp/tags" => 1});
120 is_deeply(\@del, []);
121 ok(! -s "t/tmp/tags.mdwn");
122 ok(-s "t/tmp/.ikiwiki/transient/tags.mdwn");
123
124 # needs creating because of an attachment
125 ok(! exists $wikistate{autoindex}{autofile}{"attached.mdwn"});
126 %pages = ();
127 @del = ();
128 is($autofiles{"attached.mdwn"}{plugin}, "autoindex");
129 IkiWiki::gen_autofile("attached.mdwn", \%pages, \@del);
130 is_deeply(\%pages, {"t/tmp/attached" => 1});
131 is_deeply(\@del, []);
132 ok(-s "t/tmp/.ikiwiki/transient/attached.mdwn");
133
134 1;