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

use Kelp;
use Kelp::Test;
use HTTP::Request::Common;
use Test::More;

my $app = Kelp->new( mode => 'test' );
$app->routes->base("main");
my $t = Kelp::Test->new( app => $app );

# Need only one route
$app->add_route( '/mw', sub { "OK" } );

$t->request( GET '/mw' )
  ->header_is("X-Framework", "Perl Kelp");

# Hack the config to insert middleware
$app->config_hash->{middleware} = ['XFramework'];
$app->config_hash->{middleware_init}->{XFramework} = {
    framework => 'Changed'
};

$t->request(GET '/mw')
  ->header_is("X-Framework", "Changed")
  ->header_isnt("Content-Length", 2);

# One more middleware
$app->{_loaded_middleware} = {};
$app->config_hash->{middleware} = ['XFramework', 'ContentLength'];
$t->request(GET '/mw')
  ->header_is("X-Framework", "Changed")
  ->header_is("Content-Length", 2);

done_testing;