1
2use strict;
3use warnings;
4
5use RT::Test tests => undef;
6
7plan skip_all => 'SQLite has shared file sessions' if RT->Config->Get('DatabaseType') eq 'SQLite';
8
9# Web server hangs when processing the same session row after tied
10# %session on Oracle with non-inline web servers :/
11# Use file session instead for now.
12if ( RT->Config->Get('DatabaseType') eq 'Oracle' && ( $ENV{'RT_TEST_WEB_HANDLER'} || '' ) ne 'inline' ) {
13    RT->Config->Set( 'WebSessionClass', 'Apache::Session::File' );
14}
15
16my ($baseurl, $agent) = RT::Test->started_ok;
17my $url = $agent->rt_base_url;
18
19diag "Test server running at $baseurl";
20
21# get the top page
22{
23    $agent->get($url);
24    is ($agent->status, 200, "Loaded a page");
25}
26
27# test a login
28{
29    $agent->login('root' => 'password');
30    # the field isn't named, so we have to click link 0
31    is( $agent->status, 200, "Fetched the page ok");
32    $agent->content_contains("Logout", "Found a logout link");
33}
34
35my ($session_id) = $agent->cookie_jar->as_string =~ /RT_SID_[^=]+=(\w+);/;
36
37diag 'Load session for root user';
38my %session;
39tie %session, 'RT::Interface::Web::Session', $session_id;
40is ( $session{'_session_id'}, $session_id, 'Got session id ' . $session_id );
41is ( $session{'CurrentUser'}->Name, 'root', 'Session is for root user' );
42
43diag 'Test queues cache';
44my $user_id = $session{'CurrentUser'}->Id;
45ok ( $session{'SelectObject---RT::Queue---' . $user_id . '---CreateTicket---0'}, 'Queues cached for create ticket');
46is ( $session{'SelectObject---RT::Queue---' . $user_id . '---CreateTicket---0'}{'objects'}->[0]{'Name'},
47    'General', 'General queue is in cached list' );
48
49my $last_updated = $session{'SelectObject---RT::Queue---' . $user_id . '---CreateTicket---0'}{'lastupdated'};
50ok( $last_updated, "Got a lastupdated timestamp of $last_updated");
51
52untie(%session);
53# Wait for 1 sec so we can confirm lastupdated doesn't change
54sleep 1;
55$agent->get($url);
56is ($agent->status, 200, "Loaded a page");
57
58tie %session, 'RT::Interface::Web::Session', $session_id;
59is ( $session{'_session_id'}, $session_id, 'Got session id ' . $session_id );
60is ( $session{'CurrentUser'}->Name, 'root', 'Session is for root user' );
61is ($last_updated, $session{'SelectObject---RT::Queue---' . $user_id . '---CreateTicket---0'}{'lastupdated'},
62    "lastupdated is still $last_updated");
63
64done_testing;
65