Skip to content

Commit d5a5c4c

Browse files
committed
Add tests for self service simple search
1 parent 1c85aaa commit d5a5c4c

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

t/web/selfservice_simple_search.t

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
use strict;
2+
use warnings;
3+
4+
use RT::Test tests => undef;
5+
6+
my ( $url, $m ) = RT::Test->started_ok;
7+
8+
my $user_a = RT::Test->load_or_create_user(
9+
Name => 'user_a',
10+
Password => 'password',
11+
EmailAddress => 'user_a@example.com',
12+
Privileged => 0,
13+
);
14+
ok( $user_a && $user_a->id, 'created unprivileged user' );
15+
ok( !$user_a->Privileged, 'user is not privileged' );
16+
17+
# Grant ShowTicket to the system Requestor role so user_a can see tickets
18+
# where they are the requestor.
19+
my $requestor_group = RT::System->RoleGroup('Requestor');
20+
ok( $requestor_group->id, 'loaded system Requestor role group' );
21+
RT::Test->add_rights( { Principal => $requestor_group, Right => ['ShowTicket'] } );
22+
23+
# A ticket where user_a is the requestor (watcher)
24+
my ($watcher_ticket) = RT::Test->create_ticket(
25+
Queue => 'General',
26+
Subject => "selftest-$$ watcher ticket",
27+
Requestor => 'user_a@example.com',
28+
);
29+
ok( $watcher_ticket->id, 'created watcher ticket' );
30+
31+
# A ticket where user_a is NOT a watcher but subject shares the search token
32+
my ($other_ticket) = RT::Test->create_ticket(
33+
Queue => 'General',
34+
Subject => "selftest-$$ other ticket",
35+
);
36+
ok( $other_ticket->id, 'created non-watcher ticket' );
37+
38+
ok( $m->login( 'user_a', 'password' ), 'logged in as unprivileged user' );
39+
40+
diag 'Test Simple Search nav link is present by default';
41+
{
42+
$m->get_ok( '/SelfService/', 'loaded SelfService home page' );
43+
ok( $m->find_link( text => 'Simple Search' ), 'Simple Search nav link present' );
44+
}
45+
46+
diag 'Test SimpleSearch.html is accessible and shows form when no query given';
47+
{
48+
$m->get_ok( '/SelfService/SimpleSearch.html', 'loaded SimpleSearch page' );
49+
$m->title_is( 'Search for tickets', 'page title correct' );
50+
51+
my $dom = $m->dom;
52+
ok( $dom->at('#SimpleSearchForm'), 'search form container present' );
53+
ok( $dom->at('input[name="q"]'), 'search input present' );
54+
ok( $dom->at('input[type="submit"]'), 'submit button present' );
55+
ok( $dom->at('table.table'), 'help table present' );
56+
$m->content_contains( 'Simple Search Help', 'help section heading present' );
57+
}
58+
59+
diag 'Test search returns watcher ticket and excludes non-watcher ticket';
60+
{
61+
$m->get_ok( "/SelfService/SimpleSearch.html?q=selftest-$$", 'searched with unique token' );
62+
63+
my $dom = $m->dom;
64+
my $table = $dom->at('table.collection-as-table');
65+
ok( $table, 'results table present' );
66+
67+
my @rows = $table->find('tbody tr')->each;
68+
is( scalar @rows, 1, 'exactly one result row returned' );
69+
70+
$m->content_contains( "selftest-$$ watcher ticket", 'watcher ticket in results' );
71+
$m->content_lacks( "selftest-$$ other ticket", 'non-watcher ticket excluded from results' );
72+
}
73+
74+
diag 'Test result links point to SelfService display URL';
75+
{
76+
my $dom = $m->dom;
77+
my $table = $dom->at('table.collection-as-table');
78+
79+
ok( $table->at('a[href*="SelfService/Display.html"]'), 'result link points to SelfService Display' );
80+
ok( !$table->at('a[href*="/Ticket/Display.html"]'), 'no privileged ticket links in results' );
81+
}
82+
83+
diag 'Test direct ticket ID search redirects to SelfService display page';
84+
{
85+
$m->get_ok( '/SelfService/SimpleSearch.html?q=' . $watcher_ticket->id, 'searched for ticket ID' );
86+
like( $m->uri, qr{/SelfService/Display\.html\?id=\d+}, 'redirected to SelfService Display URL' );
87+
}
88+
89+
diag 'Test SelfServiceSimpleSearch config disabled hides nav link';
90+
{
91+
RT::Test->stop_server;
92+
RT->Config->Set( SelfServiceSimpleSearch => 0 );
93+
( $url, $m ) = RT::Test->started_ok;
94+
95+
ok( $m->login( 'user_a', 'password' ), 'logged in as unprivileged user' );
96+
$m->get_ok( '/SelfService/', 'loaded SelfService home page' );
97+
ok( !$m->find_link( text => 'Simple Search' ), 'Simple Search nav link absent when config disabled' );
98+
}
99+
100+
done_testing;

0 commit comments

Comments
 (0)