#!/usr/bin/perl -w use strict; use File::Path; use File::Spec; use HTML::Mason::Tests; my $tests = make_tests(); $tests->run; sub make_tests { my $group = HTML::Mason::Tests->new ( name => 'basic-session', description => 'Basic tests for Request::WithMultiSession subclass', pre_test_cleanup => 0, ); my %params = ( request_class => 'MasonX::Request::WithMultiSession', session_class => 'Flex', session_store => 'File', session_lock => 'Null', session_generate => 'MD5', session_serialize => 'Storable', ); foreach ( [ session_directory => 'sessions' ], ) { my $dir = File::Spec->catfile( $group->data_dir, $_->[1] ); mkpath($dir); $params{ $_->[0] } = $dir; } # will be used below in various ways use Apache::Session::Flex; my %session; tie %session, 'Apache::Session::Flex', undef, { Store => 'File', Lock => 'Null', Generate => 'MD5', Serialize => 'Storable', Directory => $params{session_directory}, }; $session{bar}{baz} = 1; my $id = $session{_session_id}; untie %session; #------------------------------------------------------------ $group->add_test ( name => 'can_session', description => 'make sure request->can("session")', interp_params => \%params, component => <<'EOF', I <% $m->can('session') ? 'can' : 'cannot' %> session EOF expect => <<'EOF', I can session EOF ); #------------------------------------------------------------ $group->add_test ( name => 'session_store', description => 'store something in the session', interp_params => \%params, component => <<"EOF", stored <%init> \$m->session( session_id => '$id', sub_session_id => '12345' )->{foo} = 'bar'; EOF expect => <<'EOF', stored EOF ); #------------------------------------------------------------ $group->add_test ( name => 'session_read', description => 'read stored data from the session', interp_params => \%params, component => <<"EOF", read: <% \$m->session( session_id => '$id', sub_session_id => '12345' )->{foo} %> EOF expect => <<'EOF', read: bar EOF ); #------------------------------------------------------------ $group->add_support( path => '/as/subrequest', component => <<'EOF', foo: <% $m->session->{foo} %> EOF ); #------------------------------------------------------------ $group->add_test( name => 'subrequest1', description => 'Make sure session is shared with subrequests', interp_params => \%params, component => <<'EOF', Parent % $m->session->{foo} = 'bar'; % $m->subexec( '/basic-session/as/subrequest' ); EOF expect => <<'EOF', Parent foo: bar EOF ); #------------------------------------------------------------ $group->add_test ( name => 'delete_sub_session', description => 'make sure delete_sub_session method works', interp_params => \%params, component => <<'EOF', % $m->session->{foo} = 'foo'; <% $m->session->{foo} %> % $m->delete_sub_session; foo does <% exists $m->session->{foo} ? '' : 'not' %> exist EOF expect => <<'EOF', foo foo does not exist EOF ); #------------------------------------------------------------ $group->add_test ( name => 'delete_other_sub_session', description => 'make sure delete_sub_session method can delete sub-session besides current one', interp_params => \%params, component => <<'EOF', % $m->session->{foo} = 'foo'; <% $m->session->{foo} %> % my $sub_id = $m->sub_session_id; % $m->session( clone => 1 ); % $m->delete_sub_session( sub_session_id => $sub_id ); foo does <% exists $m->session->{foo} ? '' : 'not' %> exist EOF expect => <<'EOF', foo foo does exist EOF ); #------------------------------------------------------------ $group->add_test ( name => 'delete_session', description => 'make sure delete_session method works with subclass', interp_params => \%params, component => <<'EOF', % $m->session->{foo} = 'foo'; <% $m->session->{foo} %> % $m->delete_session; foo does <% exists $m->session->{foo} ? '' : 'not' %> exist EOF expect => <<'EOF', foo foo does not exist EOF ); #------------------------------------------------------------ return $group; }