use strict; use warnings; =head1 DESCRIPTION Tests Jifty::Web::Session =cut use Jifty::Test tests => 21; { my $session = Jifty::Model::Session->new; $session->create( data_key => 'old', value => 'one', ); $session->set_created( DateTime->now->subtract( days => 14 ) ); $session->set_updated( DateTime->now->subtract( days => 14 ) ); my $collection = Jifty::Model::SessionCollection->new; $collection->expired_update( DateTime->now->subtract( days => 2 ) ); is($collection->first->value,'one' , 'expired by updated'); $collection->unlimit; $collection->expired_create( DateTime->now->subtract( days => 2 ) ); is($collection->first->value,'one' , 'expired by created'); } my ($first_id, $third_id); { my $session = Jifty::Web::Session->new(); $session->load_by_kv(user => 'first'); ok($session->id, "got a session"); $first_id = $session->id; $session->set(hello => 'world'); $session->set(number => '1st'); is($session->get('hello'), 'world', "immediate 'get' works"); is($session->get('number'), '1st', "immediate 'get' works"); $session->load_by_kv(user => 'first'); is($session->id, $first_id, "same session as before"); is($session->get('hello'), 'world', "'get' before destroy works"); is($session->get('number'), '1st', "'get' before destroy works"); } { my $session = Jifty::Web::Session->new(); $session->load_by_kv(user => 'first'); ok($session->id, "got a session"); is($session->id, $first_id, "same session as before"); is($session->get('hello'), 'world', "'set', destroy, 'get' works"); is($session->get('number'), '1st', "'set', destroy, 'get' works"); } { my $session = Jifty::Web::Session->new(); $session->load_by_kv(user => 'second'); ok($session->id, "got a session"); isnt($session->id, $first_id, "NOT same session as before"); is($session->get('hello'), undef, "different value gives different session"); is($session->get('number'), undef, "different value gives different session"); $session->set(hello => 'world'); $session->set(number => '2nd'); } { my $session = Jifty::Web::Session->new(); $session->load_by_kv(user => 'first'); ok($session->id, "got a session"); is($session->id, $first_id, "first session again"); is($session->get('hello'), 'world'); is($session->get('number'), '1st', "even though the two sessions have some overlapping keys, the one that matters doesn't overlap"); } # test null char TODO: { local $TODO = "something doesn't like \\0, and it generates a lot of warnings, so the tests here are commented out instead of todo'd"; ok(0, $TODO); } #{ # my $session = Jifty::Web::Session->new(); # $session->load_by_kv(user => "first\0sneaky!"); # ok($session->id, "got a session"); # isnt($session->id, $first_id, "'first\\0sneaky!' different from 'first'"); # is($session->get('hello'), undef, "first\\0sneaky has no session data yet"); #} # #{ # my $session = Jifty::Web::Session->new(); # $session->load_by_kv(user => "\0third"); # ok($session->id, "got a session"); # $third_id = $session->id; # # $session->set(a => 'apple'); #} # #{ # my $session = Jifty::Web::Session->new(); # $session->load_by_kv(user => "\0third"); # ok($session->id, "got a session"); # is($session->id, $third_id, "same session as before"); # # is($session->get('a'), 'apple', "'set', destroy, 'get' works"); #} #