The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Plack::Test;

use HTTP::Request::Common;

{
    package MyApp;
    use OX;

    router as {
        wrap_if sub { ($_[0]->{HTTP_X_FOO} || '') =~ /Bar/i },
            'Plack::Middleware::XFramework' => (
                framework => literal('Testing'),
            );
        wrap_if sub { $_[0]->{HTTP_X_ALLCAPS} },
            sub {
                my $app = shift;
                sub {
                    my $res = $app->($_[0]);
                    $res->[2] = [ map uc $_, @{$res->[2]} ];
                    $res
                };
            };

        route '/' => sub {
            return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello' ] ]
        };
    };
}

test_psgi
    app    => MyApp->new->to_app,
    client => sub {
        my $cb = shift;

        {
            my $res = $cb->(GET 'http://localhost/');
            ok($res->is_success);
            ok(!$res->header('X-Framework'));
            is($res->content, 'Hello');
        }
        {
            my $res = $cb->(GET 'http://localhost/', 'X-Foo' => 'Bar');
            ok($res->is_success);
            like($res->header('X-Framework'), qr/Testing/);
            is($res->content, 'Hello');
        }
        {
            my $res = $cb->(GET 'http://localhost/', 'X-AllCaps' => 1);
            ok($res->is_success);
            ok(!$res->header('X-Framework'));
            is($res->content, 'HELLO');
        }
    };

done_testing;