diff --git a/lib/WebGUI/Session/Var.pm b/lib/WebGUI/Session/Var.pm index 1c13ff2a9..a49881aff 100644 --- a/lib/WebGUI/Session/Var.pm +++ b/lib/WebGUI/Session/Var.pm @@ -71,7 +71,7 @@ Removes the specified user session from memory and database. sub end { my $self = shift; $self->session->scratch->deleteAll; - $self->session->db->write("delete from userSession where sessionId=".$self->session->db->quote($self->getId)); + $self->session->db->write("delete from userSession where sessionId=?",[$self->getId]); delete $self->session->{_user}; $self->DESTROY; } @@ -171,21 +171,21 @@ sub new { my $self = bless {_session=>$session}, $class; my $sessionId = shift; my $noFuss = shift; - if ($sessionId eq "") { + if ($sessionId eq "") { ##New session $self->start(1); - } else { + } else { ##existing session requested $self->{_var} = $session->db->quickHashRef("select * from userSession where sessionId=?",[$sessionId]); return $self if $noFuss && $self->{_var}{sessionId}; - if ($self->{_var}{expires} && $self->{_var}{expires} < $session->datetime->time()) { + if ($self->{_var}{expires} && $self->{_var}{expires} < $session->datetime->time()) { ##Session expired, start a new one with the same Id $self->end; $self->start(1,$sessionId); - } elsif ($self->{_var}{sessionId} ne "") { + } elsif ($self->{_var}{sessionId} ne "") { ##Fetched an existing session. Update variables with recent data. $self->{_var}{lastPageView} = $session->datetime->time(); $self->{_var}{lastIP} = $session->env->getIp; $self->{_var}{expires} = $session->datetime->time() + $session->setting->get("sessionTimeout"); $self->session->{_sessionId} = $self->{_var}{sessionId}; $session->db->setRow("userSession","sessionId",$self->{_var}); - } else { + } else { ##Start a new session with the requested id. $self->start(1,$sessionId); } } @@ -229,12 +229,13 @@ sub start { $userId = 1 if ($userId eq ""); my $sessionId = shift; $sessionId = $self->session->id->generate if ($sessionId eq ""); + my $time = $self->session->datetime->time(); $self->{_var} = { - expires=>$self->session->datetime->time() + $self->session->setting->get("sessionTimeout"), - lastPageView=>$self->session->datetime->time(), - lastIP => $self->session->env->getIp, - adminOn => 0, - userId => $userId + expires => $time + $self->session->setting->get("sessionTimeout"), + lastPageView => $time, + lastIP => $self->session->env->getIp, + adminOn => 0, + userId => $userId }; $self->{_var}{sessionId} = $sessionId; $self->session->db->setRow("userSession","sessionId",$self->{_var},$sessionId); diff --git a/t/Session/Var.t b/t/Session/Var.t index 9c2dcea16..4de05b7f8 100644 --- a/t/Session/Var.t +++ b/t/Session/Var.t @@ -14,14 +14,14 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; +use WebGUI::Session::Var; -use Test::More tests => 6; # increment this value for each test you create +use Test::More tests => 19; # increment this value for each test you create my $session = WebGUI::Test->session; - ok($session->var->getId ne "", "getId()"); -ok($session->var->get("lastPageView") > 0, "get()"); +cmp_ok($session->var->get("lastPageView"), '>', 0, "get(lastPageView)"); is($session->var->isAdminOn, 0, "isAdminOn()"); $session->var->switchAdminOn; is($session->var->isAdminOn, 1, "switchAdminOn()"); @@ -29,5 +29,26 @@ $session->var->switchAdminOff; is($session->var->isAdminOn, 0, "switchAdminOff()"); my $id = $session->var->getId; $session->var->end; -my ($count) = $session->db->quickArray("select count(*) from userSession where sessionId=".$session->db->quote($id)); +my ($count) = $session->db->quickArray("select count(*) from userSession where sessionId=?",[$id]); ok($count == 0,"end()"); + +my $varTime = time(); +my $varExpires = $varTime + $session->setting->get('sessionTimeout'); +my $var = WebGUI::Session::Var->new($session); +isa_ok($var, 'WebGUI::Session::Var', 'new returns Var object'); +is($var->get('userId'), 1, 'default userId is 1'); +is($var->get('sessionId'), $var->getId, "get('sessionId') and getId return the same thing"); +isnt($var->getId, $session->var->getId, 'a new, unique sessionId was created'); +is($var->get('adminOn'), $var->isAdminOn, "get('adminOn') and isAdminOn return the same thing"); +is($var->get('adminOn'), 0, "adminOn is off by default"); ##retest +cmp_ok(abs($var->get('lastPageView') - $varTime), '<=', 1, 'lastPageView set correctly'); +cmp_ok(abs($var->get('expires') - $varExpires), '<=', 1, 'expires set correctly'); + +TODO: { + local $TODO = "Stuff to write later"; + ok(0, 'check fetching a particular sessionId'); + ok(0, 'check fetching a non-existant sessionId'); + ok(0, 'check setting a particular userId'); + ok(0, 'check setting a non-existant userId'); + ok(0, 'check that lastIp was set correctly'); +}