The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Plack::Test;
use HTTP::Request::Common;
use Test::More 'tests' => 2;
use Capture::Tiny qw< capture_stderr capture_merged >;

{
    package App;
    use Dancer2;
    sub prepare_app {1}
    get '/' => sub {'OK'};
}

{
    package Bar;
    use Dancer2 'appname' => 'App';
    sub prepare_app {2}
    get '/' => sub {'OK'};
}

my $msg = qr{
    ^ WARNING: \s You \s have \s a \s subroutine \s in \s your
    \s app \s called \s 'prepare_app' \.
    \s In \s the \s future \s this \s will \s automatically
    \s be \s called \s by \s Dancer2 \.
}xms;

subtest 'App' => sub {
    my $app;
    like(
        capture_stderr { $app = App->to_app; },
        $msg,
        'Got warning on prepare_app sub',
    );

    my $test = Plack::Test->create($app);
    my $res;
    my $out;
    capture_merged { $res = $test->request( GET '/' )->content },
    is(
        $res,
        'OK',
        'Correct content',
    );

    is( $out, undef, 'No extra warnings or output' );
};

subtest 'Bar' => sub {
    my $app;
    like(
        capture_stderr { $app = Bar->to_app; },
        $msg,
        'Got warning on prepare_app sub',
    );
};