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

use Test::More;

BEGIN {
    package 
        Dancer2::Plugin::Foo;

    use Dancer2::Plugin;

    plugin_keywords 'from_config', 'from_plugin_setting', 'from_indirect';

    sub from_config :PluginKeyword {
        $_[0]->config->{oops};
    }

    sub from_plugin_setting :PluginKeyword {
        plugin_setting()->{oops};
    }

    sub from_indirect :PluginKeyword {
        _indirect();
    }

    sub _indirect {
        plugin_setting()->{oops};
    }
}

{
    package 
        Alpha;

    use Dancer2 '!pass';
    use Test::More;

    dancer_app->config->{plugins}{Foo}{oops} = 'alpha';

    use Dancer2::Plugin::Foo;

    is from_config()         => 'alpha', 'alpha from config';
    is from_plugin_setting() => 'alpha', 'alpha from plugin_setting';
    is from_indirect()       => 'alpha', 'alpha from indirect';

}
{
    package 
        Beta;

    use Dancer2 '!pass';
    use Test::More;

    dancer_app->config->{plugins}{Foo}{oops} = 'beta';

    use Dancer2::Plugin::Foo;

    is from_config()         => 'beta', 'beta from config';
    is from_plugin_setting() => 'beta', 'beta from plugin_setting';
    is from_indirect()       => 'beta', 'beta from indirect';
}

done_testing();