The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;

use Cwd;
use IO::File;
use File::Path qw(rmtree);
use File::Spec::Functions qw(catfile catdir rel2abs splitdir);

use Test::More tests => 15;

#----------------------------------------------------------------------
# Load package

my @path = splitdir(rel2abs($0));
pop(@path);
pop(@path);

my $lib = catdir(@path, 'lib');
unshift(@INC, $lib);

require App::Followme;
require App::Followme::Initialize;

my $test_dir = catdir(@path, 'test');

rmtree($test_dir);
mkdir $test_dir;
chdir $test_dir;
$test_dir = cwd();

#----------------------------------------------------------------------
# Initialize web site

do {
    App::Followme::Initialize::initialize($test_dir);
    ok(-e 'templates', 'Created templates directory'); # test 1
    ok(-e 'archive', 'Created archive directory'); # test 2
    ok(-e 'followme.cfg', 'Created configuration file'); # test 3
};

#----------------------------------------------------------------------
# Create index page

do {
    chdir($test_dir);
    my $followme = App::Followme->new();

    my $text = "This is the top page\n";
    $followme->write_page('index.md', $text);
    $followme->run($test_dir);
    
    ok(-e 'index.html', 'Index file created'); #test 4
    ok(! -e 'index.md', 'Text file deleted'); #test 5
    
    chomp($text);
    my $page = $followme->read_page('index.html');
    ok(index($page, '<h2>Test</h2>') > 0, 'Generated title'); # test 6
    ok(index($page, "<p>$text</p>") > 0, 'Generated body'); # test 7

};

#----------------------------------------------------------------------
# Create archive pages

do {
    chdir($test_dir);
    my $followme = App::Followme->new();

    my $path = catfile($test_dir, 'archive');
    foreach my $dir (qw(2013 12december)) {
        $path = catfile($path, $dir);
        mkdir($path);
    }

    foreach my $count (qw(first second third)) {
        my $file = "$count.md";
        $file = catfile($path, $file);
        
        my $text = "$count blog post.\n";
        $followme->write_page($file, $text);
        
        $followme->run($path);
        $file =~ s/md$/html/;
        sleep(1);
        
        chomp($text);
        my $page = $followme->read_page($file);
        ok(index($page, "<p>$text</p>") > 0,
           "Generated $count blog post"); # test 8-10
    }
    
    $path = catfile($test_dir, 'archive');
    my $file = catfile($path, 'index.html'); # test 11
    ok(-e $file, "archive index file created");

    foreach my $dir (qw(2013 12december)) {
        my $page = $followme->read_page($file);
        ok(index($page, "$dir/index.html") > 0,
           "Link to $dir directory"); # test 12,14
        
        $path = catfile($path, $dir);
        $file = catfile($path, 'index.html');
        ok(-e $file, "$dir index file created"); # test 13,15
    }    
};