#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 9;
use Test::MockObject;
use Test::Exception;
use ok 'Template';
use File::Temp qw/tempfile/;
use File::Spec;
use Verby::Config::Data;
my $m; BEGIN { use_ok($m = "Verby::Action::Template") };
my $template = <<TMPL;
foo bar gorch
foo='[% c.foo() %]'
ding ding ding
TMPL
my $c = Verby::Config::Data->new;
%{ $c->data } = (
template => \$template,
logger => Test::MockObject->new,
foo => "blah",
);
$c->logger->set_true($_) for qw/info/;
$c->logger->mock(logdie => sub { shift; die "@_" });
isa_ok(my $a = $m->new, $m);
{
(my $outfh, $c->data->{output}) = tempfile(UNLINK => 1);
can_ok($a, "do");
lives_ok { $a->do($c) } "template had no errors";
ok($a->verify($c), "verififcation successful");
my $output = do { local $/; <$outfh> };
like($output, qr/foo='blah'/s, "output looks good");
}
{
my ($outfh, $outfile) = tempfile(UNLINK => 1);
$c->data->{output} = $outfile;
chmod 0, $outfile or die "couldn't chmod '$outfile': $!";
$c->logger->clear;
dies_ok { $a->do($c) } "action dies when output not writable";
$c->logger->called_ok("logdie");
}