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 => 6;
use Authorize::Rule;

my $auth = Authorize::Rule->new(
    entity_groups => {
        Group => [ qw<Foo Bar Baz> ],
    },

    rules => {
        Group => {
            Place => [
                [ 1, { name => 'me' } ]
            ]
        },

        Person => {
            Place => [ [1] ],
        },
    },
);

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

ok(
    $auth->is_allowed( 'Person', 'Place' ),
    'Person allowed to enter Place',
);

ok(
    ! $auth->is_allowed( 'Foo', 'Place' ),
    'Foo is not allowed in Place',
);

ok(
    $auth->is_allowed( 'Foo', 'Place', { name => 'me' } ),
    'Foo is allowed to Place as part of Group',
);

ok(
    $auth->is_allowed( 'Baz', 'Place', { name => 'me' } ),
    'Foo is allowed to Place as part of Group',
);

ok(
    ! $auth->is_allowed( 'Group', 'Place', { name => 'me' } ),
    'Group group not allowed in Place',
);