]> sipb.mit.edu Git - ikiwiki.git/blob - t/cvs.t
Use config parameters directly and shorten long lines.
[ikiwiki.git] / t / cvs.t
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use Test::More;
5 use IkiWiki;
6
7 my %ideal_test_plan = (tests => 8);
8 my $dir;
9
10 sub _determine_test_plan {
11         my $cvs=`which cvs`; chomp $cvs;
12         my $cvsps=`which cvsps`; chomp $cvsps;
13         return (skip_all => 'cvs or cvsps not available')
14                 unless -x $cvs && -x $cvsps;
15
16         foreach my $module ('File::ReadBackwards', 'File::MimeInfo') {
17                 eval qq{use $module};
18                 if ($@) {
19                         return (skip_all => "$module not available");
20                 }
21         }
22
23         return %ideal_test_plan;
24 }
25
26 sub _startup {
27         _mktempdir();
28         _generate_minimal_config();
29         _create_test_repo();
30 }
31
32 sub _shutdown {
33         system "rm -rf $dir";
34 }
35
36 sub _mktempdir {
37         $dir="/tmp/ikiwiki-test-cvs.$$";
38         if (! mkdir($dir)) {
39                 die $@;
40         }
41 }
42
43 sub _generate_minimal_config {
44         %config=IkiWiki::defaultconfig();
45         $config{rcs} = "cvs";
46         $config{srcdir} = "$dir/src";
47         $config{cvsrepo} = "$dir/repo";
48         $config{cvspath} = "ikiwiki";
49         IkiWiki::loadplugins();
50         IkiWiki::checkconfig();
51 }
52
53 sub _create_test_repo {
54         my $cvs = "cvs -d $config{cvsrepo}";
55         my $dn = ">/dev/null";
56         system "$cvs init $dn";
57         system "mkdir $dir/$config{cvspath} $dn";
58         system "cd $dir/$config{cvspath} && "
59                 . "$cvs import -m import $config{cvspath} VENDOR RELEASE $dn";
60         system "rm -rf $dir/$config{cvspath} $dn";
61         system "$cvs co -d $config{srcdir} $config{cvspath} $dn";
62 }
63
64 sub test_web_add_and_commit {
65         writefile('test1.mdwn', $config{srcdir}, readfile("t/test1.mdwn"));
66         IkiWiki::rcs_add("test1.mdwn");
67         my $message = "Added the first page";
68         IkiWiki::rcs_commit(
69                 file => "test1.mdwn",
70                 message => $message,
71                 token => "moo",
72         );
73
74         my @changes = IkiWiki::rcs_recentchanges(3);
75         is(
76                 $#changes,
77                 0,
78                 q{1 total commit},
79         );
80         is(
81                 $changes[0]{message}[0]{"line"},
82                 $message,
83                 q{first line of most recent commit message matches},
84         );
85         is(
86                 $changes[0]{pages}[0]{"page"},
87                 "test1",
88                 q{first pagename from most recent commit matches},
89         );
90 }
91
92 sub test_manual_add_and_commit {
93         writefile('test2.mdwn', $config{srcdir}, readfile("t/test2.mdwn"));
94         system "cd $config{srcdir} && cvs add test2.mdwn >/dev/null 2>&1";
95         my $message = "Added the second page";
96         system "cd $config{srcdir} && cvs commit -m \"$message\" test2.mdwn >/dev/null";
97
98         my @changes = IkiWiki::rcs_recentchanges(3);
99         is(
100                 $#changes,
101                 1,
102                 q{2 total commits},
103         );
104         is(
105                 $changes[0]{message}[0]{"line"},
106                 $message,
107                 q{first line of most recent commit message matches},
108         );
109         is(
110                 $changes[0]{pages}[0]{"page"},
111                 "test2",
112                 q{first pagename from most recent commit matches},
113         );
114         is(
115                 $changes[1]{pages}[0]{"page"},
116                 "test1",
117                 q{first pagename from second-most-recent commit matches},
118         );
119 }
120
121 sub test_extra_path_slashes {
122         my $initial_cvspath = $config{cvspath};
123         $config{cvspath} = "/ikiwiki//";
124         IkiWiki::checkconfig();
125         is(
126                 $config{cvspath},
127                 $initial_cvspath,
128                 q{rcs_recentchanges assumes checkconfig sanitizes cvspath},
129         );
130 }
131
132 plan(_determine_test_plan());
133 _startup();
134 test_web_add_and_commit();
135 test_manual_add_and_commit();
136 test_extra_path_slashes();
137 _shutdown();