Prep for new release
[catagits/Catalyst-Plugin-Session-State-Cookie.git] / t / basic.t
CommitLineData
1a776a0c 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
8bdcbb46 6use Test::More tests => 13;
1a776a0c 7
8my $m;
9BEGIN { use_ok( $m = "Catalyst::Plugin::Session::State::Cookie" ) }
10
679f4a58 11my $cookie_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] );
12my $cookie = $cookie_meta->name->new;
13$cookie_meta->add_method( value => sub { "the session id" } );
1a776a0c 14
679f4a58 15my $req_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] );
1a776a0c 16my %req_cookies;
679f4a58 17$req_meta->add_method( cookies => sub { \%req_cookies } );
18my $req = $req_meta->name->new;
1a776a0c 19
679f4a58 20my $res_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] );
1a776a0c 21my %res_cookies;
679f4a58 22my $cookies_called = 0;
23$res_meta->add_method( cookies => sub { $cookies_called++; \%res_cookies });
24my $res = $res_meta->name->new;
25
26my $cxt_meta = Class::MOP::Class->create_anon_class( superclasses => ["Catalyst::Plugin::Session::State::Cookie", 'Moose::Object'] );
27
28my $config = {};
29$cxt_meta->add_method( config => sub { $config });
30$cxt_meta->add_method( request => sub { $req });
31$cxt_meta->add_method( response => sub { $res });
32$cxt_meta->add_method( session => sub { { } } );
33$cxt_meta->add_method( session_expires => sub { 123 });
34$cxt_meta->add_method("debug" => sub { 0 });
1a776a0c 35my $sessionid;
679f4a58 36$cxt_meta->add_method( sessionid => sub { shift; $sessionid = shift if @_; $sessionid } );
1a776a0c 37
7acfe95d 38can_ok( $m, "setup_session" );
39
679f4a58 40my $cxt = $cxt_meta->name->new;
7acfe95d 41$cxt->setup_session;
42
679f4a58 43like( $config->{session}{cookie_name},
74586782 44 qr/_session$/, "default cookie name is set" );
45
679f4a58 46$config->{session}{cookie_name} = "session";
7acfe95d 47
2bde9162 48can_ok( $m, "get_session_id" );
1a776a0c 49
2bde9162 50ok( !$cxt->get_session_id, "no session id yet");
1a776a0c 51
679f4a58 52$cxt = $cxt_meta->name->new;
1a776a0c 53
54%req_cookies = ( session => $cookie );
55
2bde9162 56is( $cxt->get_session_id, "the session id", "session ID was restored from cookie" );
1a776a0c 57
679f4a58 58$cxt_meta->name->new;
59%res_cookies = ();
1a776a0c 60
2bde9162 61can_ok( $m, "set_session_id" );
62$cxt->set_session_id("moose");
1a776a0c 63
679f4a58 64ok( $cookies_called, "created a cookie on set" );
65$cookies_called = 0;
1a776a0c 66
679f4a58 67$cxt_meta->name->new;
68%res_cookies = ();
1a776a0c 69
2bde9162 70$cxt->set_session_id($sessionid);
1a776a0c 71
679f4a58 72ok( $cookies_called, "response cookie was set when sessionid changed" );
1a776a0c 73is_deeply(
74 \%res_cookies,
6a9ca807 75 { session => { value => $sessionid, httponly => 1, expires => 123 } },
1a776a0c 76 "cookie was set correctly"
77);
8bdcbb46 78
679f4a58 79$cxt_meta->name->new;
8bdcbb46 80
81can_ok( $m, "cookie_is_rejecting" );
82
83%req_cookies = ( path => '/foo' );
679f4a58 84my $path = '';
85$req_meta->add_method( path => sub { $path } );
8bdcbb46 86ok( $cxt->cookie_is_rejecting(\%req_cookies), "cookie is rejecting" );
679f4a58 87$path = 'foo/bar';
8bdcbb46 88ok( !$cxt->cookie_is_rejecting(\%req_cookies), "cookie is not rejecting" );
679f4a58 89