diff options
author | franck cuny <franck@lumberjaph.net> | 2010-02-28 12:38:51 +0100 |
---|---|---|
committer | franck cuny <franck@lumberjaph.net> | 2010-02-28 12:38:51 +0100 |
commit | d304286cf4ed607474312e0fb831b2406a610501 (patch) | |
tree | c133154eef9bf570a441d60ae800329413f622c0 | |
parent | update readme and makefile (diff) | |
download | plack-middleware-etag-d304286cf4ed607474312e0fb831b2406a610501.tar.gz |
test with conditionalGET, update POD
-rw-r--r-- | lib/Plack/Middleware/ETag.pm | 4 | ||||
-rw-r--r-- | t/01_basic.t | 23 |
2 files changed, 23 insertions, 4 deletions
diff --git a/lib/Plack/Middleware/ETag.pm b/lib/Plack/Middleware/ETag.pm index fbee411..0671ce9 100644 --- a/lib/Plack/Middleware/ETag.pm +++ b/lib/Plack/Middleware/ETag.pm @@ -21,7 +21,7 @@ sub call { return unless defined $res->[2]; return if ( Plack::Util::header_exists( $headers, 'ETag' ) - || $env->{REQUEST_METHOD} ne 'GET' ); + || $env->{REQUEST_METHOD} !~ /^(GET|HEAD)$/ ); my $sha = Digest::SHA->new; my $content = $res->[2]; $sha->add(@$content); @@ -49,7 +49,7 @@ Plack::Middleware::ETag - Adds automatically an ETag header. =head1 DESCRIPTION -Plack::Middleware::ETag adds automatically an ETag header. +Plack::Middleware::ETag adds automatically an ETag header. You may want to use it with C<Plack::Middleware::ConditionalGET>. =head1 AUTHOR diff --git a/t/01_basic.t b/t/01_basic.t index 0bc49c6..8564ece 100644 --- a/t/01_basic.t +++ b/t/01_basic.t @@ -9,6 +9,7 @@ use Plack::Builder; use HTTP::Request::Common; my $content = [qw/hello world/]; +my $sha = Digest::SHA->new->add(@$content)->hexdigest; my $handler = builder { enable "Plack::Middleware::ETag"; @@ -25,6 +26,12 @@ my $second_handler = builder { }; }; +my $unmodified_handler = builder { + enable "Plack::Middleware::ConditionalGET"; + enable "Plack::Middleware::ETag"; + sub { [ '200', [ 'Content-Type' => 'text/html' ], $content ] }; +}; + test_psgi app => $handler, client => sub { @@ -33,8 +40,7 @@ test_psgi my $req = GET "http://localhost/"; my $res = $cb->($req); ok $res->header('ETag'); - my $sha = Digest::SHA->new->add(@$content); - is $res->header('ETag'), $sha->hexdigest; + is $res->header('ETag'), $sha; } }; @@ -50,4 +56,17 @@ test_psgi } }; +test_psgi + app => $unmodified_handler, + client => sub { + my $cb = shift; + { + my $req = GET "http://localhost/", 'If-None-Match' => $sha; + my $res = $cb->($req); + ok $res->header('ETag'); + is $res->code, 304; + ok !$res->content; + } +}; + done_testing; |