The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Plack::Test;

use HTTP::Request;

my $n = 0;
{
    package Thing;
    use Moose;

    sub BUILD { ++$n }
}

{
    package Foo::Root;
    use Moose;

    has thing => (
        is       => 'ro',
        isa      => 'Thing',
        required => 1,
    );

    has thing2 => (
        is       => 'ro',
        isa      => 'Thing',
        required => 1,
    );

    sub index {
        my $self = shift;
        $self->thing == $self->thing2 ? "$n 1" : "$n 0";
    }
}

{
    package Foo;
    use OX;

    has thing => (
        is        => 'ro',
        isa       => 'Thing',
        lifecycle => 'Request',
    );
    has root => (
        is    => 'ro',
        isa   => 'Foo::Root',
        infer => 1,
    );

    router as {
        route '/' => 'root.index'
    };
}

test_psgi
    app => Foo->new->to_app,
    client => sub {
        my $cb = shift;
        for (1 .. 2) {
            my $req = HTTP::Request->new(GET => "http://localhost");
            my $res = $cb->($req);
            is($res->content, "$_ 1");
        }
    };

done_testing;