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

use strict;
use warnings;

use Test::More tests => 5;
use Authorize::Rule;

my $auth = Authorize::Rule->new(
    rules => {
        Marge => {
            '' => [ [
                sub {
                    my $result = shift;
                    ::isa_ok( $result, 'HASH', 'Action CB got result hash' );
                    ::is_deeply(
                        $result,
                        {
                            ruleset_idx => 1,
                            params      => { time => 'now' },
                            entity      => 'Marge',
                            resource    => 'Anywhere',
                        },
                        'Correct resultset',
                    );

                    return 'SpecialActionValue';
                },
                { time => 'now' }
            ] ],
        },
    },
);

isa_ok( $auth, 'Authorize::Rule' );
can_ok( $auth, qw<is_allowed>    );

is(
    $auth->is_allowed( 'Marge', 'Anywhere', { time => 'now' } ),
    'SpecialActionValue',
    'We can override the value from the callback',
);