X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Plugin-Session-State-Cookie.git;a=blobdiff_plain;f=t%2Fbasic.t;h=60c33e480569284f1e7a72c6f03c2aa5b8efbbef;hp=66711dda38ec089c4deae75d2e8ce46c640a0a5b;hb=50dacea227c6f6f2c2304af24784beeb857b8eb6;hpb=58730edcb664fc621cbb907b477d037c5c8576fa diff --git a/t/basic.t b/t/basic.t index 66711dd..60c33e4 100644 --- a/t/basic.t +++ b/t/basic.t @@ -1,114 +1,95 @@ -#!/usr/bin/perl - use strict; use warnings; -use Test::More tests => 15; -use Test::MockObject; -use Test::MockObject::Extends; +use Test::More tests => 13; + +use Catalyst::Plugin::Session; my $m; BEGIN { use_ok( $m = "Catalyst::Plugin::Session::State::Cookie" ) } -my $cookie = Test::MockObject->new; -$cookie->set_always( value => "the session id" ); +my $cookie_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] ); +my $cookie = $cookie_meta->name->new; +$cookie_meta->add_method( value => sub { "the session id" } ); -my $req = Test::MockObject->new; +my $req_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] ); my %req_cookies; -$req->set_always( cookies => \%req_cookies ); +$req_meta->add_method( cookies => sub { \%req_cookies } ); +my $req = $req_meta->name->new; -my $res = Test::MockObject->new; +my $res_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] ); my %res_cookies; -$res->set_always( cookies => \%res_cookies ); - -my $cxt = - Test::MockObject::Extends->new("Catalyst::Plugin::Session::State::Cookie"); +my $cookies_called = 0; +$res_meta->add_method( cookies => sub { $cookies_called++; \%res_cookies }); +my $res = $res_meta->name->new; + +my $cxt_meta = Class::MOP::Class->create_anon_class( + superclasses => [qw/ + Catalyst::Plugin::Session + Catalyst::Plugin::Session::State::Cookie + Moose::Object + /], +); -$cxt->set_always( config => {} ); -$cxt->set_always( request => $req ); -$cxt->set_always( response => $res ); -$cxt->set_always( session => { __expires => 123 } ); -$cxt->set_false("debug"); +my $config = {}; +$cxt_meta->add_method( config => sub { $config }); +$cxt_meta->add_method( request => sub { $req }); +$cxt_meta->add_method( response => sub { $res }); +$cxt_meta->add_method( session => sub { { } } ); +$cxt_meta->add_method( session_expires => sub { 123 }); +$cxt_meta->add_method("debug" => sub { 0 }); my $sessionid; -$cxt->mock( sessionid => sub { shift; $sessionid = shift if @_; $sessionid } ); +$cxt_meta->add_method( sessionid => sub { shift; $sessionid = shift if @_; $sessionid } ); can_ok( $m, "setup_session" ); +my $cxt = $cxt_meta->name->new; $cxt->setup_session; -is( $cxt->config->{session}{cookie_name}, - "session", "default cookie name is set" ); +like( $config->{'Plugin::Session'}{cookie_name}, + qr/_session$/, "default cookie name is set" ); -can_ok( $m, "prepare_cookies" ); +$config->{'Plugin::Session'}{cookie_name} = "session"; -$cxt->prepare_cookies; -ok( !$cxt->called("sessionid"), - "didn't try setting session ID when there was nothing to set it by" ); +can_ok( $m, "get_session_id" ); -$cxt->clear; +ok( !$cxt->get_session_id, "no session id yet"); -%req_cookies = ( session => $cookie ); +$cxt = $cxt_meta->name->new; -ok( !$cxt->sessionid, "no session ID yet" ); -$cxt->prepare_cookies; -is( $cxt->sessionid, "the session id", "session ID was restored from cookie" ); - -$cxt->clear; -$res->clear; - -can_ok( $m, "finalize_cookies" ); -$cxt->finalize_cookies; -{ - local $TODO = - "This check is a pain to write, should be done by catalyst itself"; - ok( !$res->called("cookies"), - "response cookie was not set since res cookie is already there" ); -} - -$cxt->clear; -$sessionid = undef; -$res->clear; - -$cxt->finalize_cookies; -ok( !$res->called("cookies"), -"response cookie was not set when sessionid was deleted, even if req cookie is still there" -); +%req_cookies = ( session => $cookie ); -$sessionid = "some other ID"; -$cxt->clear; -$res->clear; +is( $cxt->get_session_id, "the session id", "session ID was restored from cookie" ); -$cxt->finalize_cookies; -$res->called_ok( "cookies", "response cookie was set when sessionid changed" ); -is_deeply( - \%res_cookies, - { session => { value => $sessionid, expires => 123 } }, - "cookie was set correctly" -); - -$cxt->clear; -$res->clear; -%req_cookies = (); +$cxt_meta->name->new; %res_cookies = (); -$sessionid = undef; -$cxt->finalize_cookies; -ok( !$res->called("cookies"), - "response cookie was not set when there is no sessionid or request cookie" -); +can_ok( $m, "set_session_id" ); +$cxt->set_session_id("moose"); -$cxt->clear; -$sessionid = "123"; +ok( $cookies_called, "created a cookie on set" ); +$cookies_called = 0; + +$cxt_meta->name->new; %res_cookies = (); -$res->clear; -$cxt->finalize_cookies; +$cxt->set_session_id($sessionid); -$res->called_ok( "cookies", - "response cookie was set when session was created" ); +ok( $cookies_called, "response cookie was set when sessionid changed" ); is_deeply( \%res_cookies, - { session => { value => $sessionid, expires => 123 } }, + { session => { value => $sessionid, httponly => 1, expires => 123 } }, "cookie was set correctly" ); +$cxt_meta->name->new; + +can_ok( $m, "cookie_is_rejecting" ); + +%req_cookies = ( path => '/foo' ); +my $path = ''; +$req_meta->add_method( path => sub { $path } ); +ok( $cxt->cookie_is_rejecting(\%req_cookies), "cookie is rejecting" ); +$path = 'foo/bar'; +ok( !$cxt->cookie_is_rejecting(\%req_cookies), "cookie is not rejecting" ); +