The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl -w
use strict;
use warnings;
use Moose ();
use Test::More tests => 4;

package FooController;
use Railsish::Controller;

sub index {
    if (session->{counter}) {
        session->{counter} = session->{counter} + 1;
    }
    else {
        session->{counter} = 1;
    }
    response->body("Hi from Foo: " . session->{counter});
}

package main;
use Railsish::Router;
use Railsish::Dispatcher;
use HTTP::Engine;
use HTTP::Request;
use HTTP::Headers;
use HTTP::Cookies;
use CGI::Cookie;

Railsish::Router->draw(
    sub {
        my ($map) = @_;
        $map->connect("/:controller/:action/:id");
        $map->connect("/:controller/:action");
        $map->connect("/:controller", action => 'index');
        $map->connect("", controller => "foo");
    }
);

my $engine = HTTP::Engine->new(
    interface => {
        module => "Test",
        request_handler => sub {
            Railsish::Dispatcher->dispatch(@_);
        }
    }
);

my $response = $engine->run(
    HTTP::Request->new(GET => "http://localhost/"),
    connection_info => { request_uri => "/" }
);
is($response->content, "Hi from Foo: 1");
# diag $response->content;
ok($response->header("Set-Cookie"));
# diag($response->header("Set-Cookie"));

use YAML;

my $cookies = $response->header("Set-Cookie");

# diag(Dump($cookies));

my $request = HTTP::Request->new(GET => "http://localhost/");
$request->header(Cookie => $cookies);

$response = $engine->run(
    $request,
    connection_info => {
        request_uri => "/"
    }
);

is($response->content, "Hi from Foo: 2");
# diag $response->content;

ok($response->header("Set-Cookie"));
# diag($response->header("Set-Cookie"));