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

use strict;
use warnings;

use Test::More tests => 6;
use Authorize::Rule;
use Data::Dumper;

$Data::Dumper::Terse  = 1;
$Data::Dumper::Indent = 0;

my $auth = Authorize::Rule->new(
    default => -1,
    rules   => {
        dogs => {
            table => [
                [ 1, { owner => 'someone-else' } ],
                [0],
            ],

            '' => [ [1] ],
        }
    },
);

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

my @tests = (
    [ qw<1 dogs table>, { owner => 'someone-else' } ],
    [ qw<0 dogs table>, { owner => 'me'           } ],
    [ qw<0 dogs table>   ],
    [ qw<1 dogs kitchen> ],
);

foreach my $test (@tests) {
    my ( $success, $entity, $resource, $params ) = @{$test};
    my $description = "$entity " . ( $success ? 'can' : 'cannot' ) .
                      " access $resource" .
                      ( $params ? ', ' . Dumper($params) : '' );

    cmp_ok(
        $auth->is_allowed( $entity => $resource, $params ),
        '==',
        $success,
        $description,
    );
}