The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Object::For::Test;

use Moose;
sub testrun_id { return 42 };

package Mock::Tapper::Test;
# object for mocking Net::SSH::Perl

use Moose;
sub login
{
        return;
}

sub cmd
{
return '
cleaning
config
building
copying
---
 - /path/to/file1
 - /here/be/file2
...
Will trigger 3 OSRC feature tests
Special tests: http://tapper/tapper/testruns/idlist/1,2,3
Normal tests: http://tapper/tapper/testruns/idlist/4,5,6
Add to list for Additional RANDCONF tests on build-server
'}

package main;

use Test::More;


use Tapper::Config;
use Test::MockModule;
use File::Temp qw(tempdir);

my $tempdir = tempdir( CLEANUP => 1 );
my $config = Tapper::Config->subconfig;
$config->{paths}{output_dir} = $tempdir;

# Net::SSH::Perl tries to login at new(). Thus we need to mock new to return
# an object that provides all functions we want to use.
my $mock_ssh = Test::MockModule->new('Net::SSH::Perl');
$mock_ssh->mock('new', sub {return Mock::Tapper::Test->new()});

use_ok('Tapper::Producer::Builder');
my $builder = Tapper::Producer::Builder->new(cfg => $config);
isa_ok($builder, 'Tapper::Producer::Builder');

my $job     = Object::For::Test->new();
my $precond = {type => "kernel", repository => "build_test", version=> "HEAD^1", buildserver => "server"};
my $retval  = $builder->produce($job, $precond);
is_deeply($retval, {
                    'precondition_yaml' =>
                    "---\nfilename: /path/to/file1\nprecondition_type: package\n".
                    "---\nfilename: /here/be/file2\nprecondition_type: package\n"},
          'Produced precondition looks as expected');
ok(-e "$tempdir/42/config/builder/kernel_server_build_test_HEAD^1.stdout", "STDOUT file $tempdir/42/config/kernel_server_build_test_HEAD^1.stdout file exists");
ok(-e "$tempdir/42/config/builder/kernel_server_build_test_HEAD^1.stderr", "STDERR file $tempdir/42/config/kernel_server_build_test_HEAD^1.stderr file exists");

done_testing();