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

use Test::More tests => 14;
use Test::MockObject;
use Apache2::Const -compile => qw(OK);
BEGIN{
    use_ok(q|JavaScript::Ectype::Handler::Apache2|);
}



sub setup_fake_request{
    my ($uri,$config,$headers_in ) = @_;
    my $request    = Test::MockObject->new;
    my $dir_config = Test::MockObject->new;
    my $headers    = Test::MockObject->new;
    my $status;
    $dir_config->mock( get => sub{
        $config->{$_[1]};
    });
    my $headers_out = {};
    $headers->mock('set' => sub{
        $headers_out->{$_[1]} = $_[2];
    });
    $request->mock('status'=>sub{
        my $class = shift;
        if( @_ ){
            $status = shift;
        }else{
            return $status;
        }
    });
    $request->set_true('content_type');
    $request->set_true('print');
    $request->set_always('uri',$uri);
    $request->set_always('dir_config',$dir_config);
    $request->set_always('err_headers_out',$headers);
    $request->set_always('headers_out',$headers);
    $request->set_always('headers_in',$headers_in);
    $request->fake_new('Apache2::Request');
    $headers_out;

}



{
    my ($headers) = setup_fake_request(
        q|/ectype/org.cpan.no_such|,
        {
            EctypeLibPath => './t/js/',
            EctypePrefix  => '/ectype/',
            EctypeMinify  => 1,
        },
        {

        }
    );
    my $req = Apache2::Request->new;
    ::is( 
        JavaScript::Ectype::Handler::Apache2->handler($req),
        Apache2::Const::OK
    );
    $req->called_ok('status');
    ok( $req->status == 404 );

}

{
    my ($headers) = setup_fake_request(
        q|/ectype/org.cpan|,
        {
            EctypeLibPath => './t/js/',
            EctypePrefix  => '/ectype/',
            EctypeMinify  => 1,
        },
        {

        }
    );
    my $req = Apache2::Request->new;
    ::is( 
        JavaScript::Ectype::Handler::Apache2->handler($req),
        Apache2::Const::OK
    );
    $req->called_ok('status');
    ok( $req->status == 200 );
    $req->called_ok('print');
    ok( exists $headers->{"Content-length"} );
    ok( exists $headers->{"Last-Modified"} );
    ok( exists $headers->{"Expires"} );
}

use HTTP::Date;
{
    my ($headers) = setup_fake_request(
        q|/ectype/org.cpan|,
        {
            EctypeLibPath => './t/js/',
            EctypePrefix  => '/ectype/',
            EctypeMinify  => 1,
        },
        {
            "If-Modified-Since" => HTTP::Date::time2str( time() )
        }
    );
    my $req = Apache2::Request->new;
    ::is( 
        JavaScript::Ectype::Handler::Apache2->handler($req),
        Apache2::Const::OK
    );
    $req->called_ok('status');
    ok( $req->status == 304 );

}