first pass RT4 merge, RT#13852
[freeside.git] / rt / t / web / queue_caching.t
1 use strict;
2 use warnings;
3 use RT::Test tests => 36;
4
5 # make an initial queue, so we have more than 1
6 my $original_test_queue = new_queue("Test$$");
7
8 my ($baseurl, $m) = RT::Test->started_ok;
9 ok $m->login, 'logged in';
10
11 diag("Check for 2 existing queues being visible");
12 {
13     check_queues($m);
14 }
15
16 diag("Add a new queue, which won't show up until we fix the cache");
17 {
18     new_queue("New Test $$");
19     check_queues($m);
20 }
21
22 diag("Disable an existing queue, it should stop appearing in the list");
23 {
24     ok($original_test_queue->SetDisabled(1));
25     check_queues($m);
26 }
27
28 diag("Bring back a disabled queue");
29 {
30     ok($original_test_queue->SetDisabled(0));
31     check_queues($m);
32 }
33
34 diag("Test a user who has more limited rights Queues");
35 {
36
37 my $user_a = RT::Test->load_or_create_user(
38     Name => 'user_a', Password => 'password',
39 );
40 ok $user_a && $user_a->id, 'loaded or created user';
41
42 ok( RT::Test->set_rights(
43         { Principal => $user_a, Right => [qw(SeeQueue CreateTicket)], Object => $original_test_queue },
44 ), 'Allow user a to see the testing queue');
45
46 my $a_m = RT::Test::Web->new;
47 ok $a_m->login('user_a', 'password'), 'logged in as user A';
48
49 # check that they see a single queue
50 check_queues($a_m,[$original_test_queue->Id]);
51
52 ok( RT::Test->add_rights(
53         { Principal => $user_a, Right => [qw(SeeQueue CreateTicket)] },
54 ), 'add global queue viewing rights');
55
56 check_queues($a_m);
57
58 }
59
60 sub new_queue {
61     my $name = shift;
62     my $new_queue = RT::Queue->new(RT->SystemUser);
63     ok($new_queue->Create( Name => $name, Description => "Testing for $name queue" ), "Created queue ".$new_queue->Name);
64     return $new_queue;
65 }
66
67 sub internal_queues {
68     my $internal_queues = RT::Queues->new(RT->SystemUser);
69     $internal_queues->Limit(FIELD => 'Disabled', VALUE => 0);
70     my $queuelist;
71     while ( my $q = $internal_queues->Next ) {
72         $queuelist->{$q->Id} = $q->Name;
73     }
74     return $queuelist;
75 }
76
77
78 # takes a WWW::Mech object and an optional arrayref of queue ids
79 # compares the list of ids to the dropdown of Queues for the New Ticket In form
80 sub check_queues {
81     my $browser = shift;
82     my $queue_list = shift;
83     $browser->get_ok($baseurl,"Navigated to homepage");
84     ok(my $form = $browser->form_name('CreateTicketInQueue'), "Found New Ticket In form");
85     ok(my $queuelist = $form->find_input('Queue','option'), "Found queue select");
86     my @queues = $queuelist->possible_values;
87
88     $queue_list = [keys %{internal_queues()}] unless $queue_list;
89     is_deeply([sort @queues],[sort @$queue_list], "Queue list contains the expected queues");
90 }