switch to relative paths for symlink targets
[engit/Iron-Munger.git] / t / stats_saver.t
1 use strict;
2 use warnings;
3 use Test::More qw(no_plan);
4 use IO::All;
5 use File::Temp ();
6
7 sub tempdir {
8   if ($ENV{UNCLEAN_TEMP}) {
9     my $dir = File::Temp::tempdir;
10     warn $dir;
11     return $dir;
12   }
13   return File::Temp::tempdir(CLEANUP => 1);
14 }
15
16 BEGIN { use_ok aliased => 'IronMunger::StatsSaver'; }
17 BEGIN { use_ok aliased => 'IronMunger::Monger'; }
18
19 ok(
20   (my $saver = StatsSaver->new(dir => 'X')),
21   'Constructed object ok'
22 );
23
24 is(
25   $saver->_image_symlink_target('male','iron'), '../../badges/male/iron.png',
26   'Symlink target ok',
27 );
28
29 is(
30   $saver->_image_symlink_from('mst', 'female'), 'X/mybadge/female/mst.png',
31   'Symlink from ok',
32 );
33
34 my $monger = Monger->new(
35   nick => 'mst',
36   posts => []
37 );
38
39 is($monger->level, 'paper', 'mst sucks');
40
41 my $dir = tempdir;
42
43 $saver = StatsSaver->new(dir => $dir);
44
45 $saver->_write_symlinks_for($monger);
46
47 my $bdir = io("${dir}/badges");
48
49 my $mbdir = io("${dir}/mybadge");
50
51 my %found_links;
52 do {
53   my @l = $mbdir->all_links(2);
54   @found_links{@l} = (1) x scalar @l;
55 };
56
57 foreach my $gender (qw(male female)) {
58   my $desc = "${gender} symlink";
59   my $l = io("${mbdir}/${gender}/mst.png");
60   ok($l->is_link, "${desc} exists");
61   is(
62     $l->readlink, "${bdir}/${gender}/paper.png",
63     "${desc} points to right target",
64   );
65   ok(delete $found_links{$l}, "${desc} in link list");
66 }
67
68 ok(!(keys %found_links), 'all links accounted for');