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 warnings;
use FindBin::libs;
use Test::More;
use XT::Business;
use Data::Dump qw/pp/;

my $tests = [
    {
        label => 'Bar',
        method => 'foo',
        params => 'hello there',
    },
    {
        label => 'Bar',
        method => 'unknown',
        params => '',
        error => "Cannot call 'unknown' on 'Bar'",
    },
    {
        label => 'Baz',
        method => 'foo',
        params => '',
        error => 'Not possible to load module',
    },
];

is(scalar XT::Business->plugin, 1,
    'Found one plugin');
is(XT::Business->plugin('Bar'),'XT::Business::Plugin::Bar',
    'Correct fully qualified name');
is(XT::Business->plugin('Baz'),undef,
    'Unknown plugin');

my $rv;

foreach my $test (@{$tests}) {
    my $label = 'Bar';
    note "  call: '$test->{label}' '$test->{method}' '$test->{params}'";
    eval {
        $rv = XT::Business->call(
            $test->{label}, $test->{method}, $test->{params});
    };
    if (my $e = $@) {
        if ($test->{error}) {
            my $foo = $test->{error};

            like($e, qr/$foo/, "Matched expected error - $foo");
#            is($e =~ /$foo/, 'blah', 'Matched expected error');
#            if ($e =~ /$foo/i) {
#                warn __PACKAGE__ .": not matching error - $foo";
#            }
        } else {
            diag $e;
            is(0,1,"Error when test not expecting");
        }

    } else {
        is(defined $test->{error},'', 'Should be an error');
    }
}

done_testing;