The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use utf8;
use Test::More;

our $DESTROY = 0;
our $DISPATCH = 0;

{
    package MockDB;
    sub new { bless {}, shift }
    sub DESTROY { $::DESTROY++ }
}

{
    package MyApp::Web;
    use parent qw/Amon2 Amon2::Web/;
    sub dispatch {
        my ($c) = @_;
        return $c->create_response(200, [], 'dispatch OK');
    }
    __PACKAGE__->add_trigger(
        BEFORE_DISPATCH => sub {
            my $c = shift;
            $c->{mockdb} = MockDB->new();
            if (!$::DISPATCH) {
                return $c->create_response(200, [], 'trigger OK');
            }
        }
    );
}

my $app = MyApp::Web->to_app();
{
    local $DESTROY  = 0;
    local $DISPATCH = 0;
    my $res = $app->(+{});
    is($res->[2]->[0], 'trigger OK');
    is($DESTROY, 1);
}

{
    local $DESTROY  = 0;
    local $DISPATCH = 1;
    my $res = $app->(+{});
    is($res->[2]->[0], 'dispatch OK');
    is($DESTROY, 1);
}

done_testing;