first pass RT4 merge, RT#13852
[freeside.git] / rt / t / web / walk.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use RT::Test;
7 use HTML::TreeBuilder;
8
9 my ( $baseurl, $m ) = RT::Test->started_ok;
10
11 ok( $m->login( 'root' => 'password' ), 'login as root' );
12
13 my %viewed = ( '/NoAuth/Logout.html' => 1 );    # in case logout
14
15 my $user = RT::User->new($RT::SystemUser);
16 $user->Load('root');
17 ok( $user->id, 'loaded root' );
18
19 my $queue = RT::Queue->new($RT::SystemUser);
20 $queue->Load('General');
21 ok( $queue->id, 'loaded General queue' );
22
23 my $group = RT::Group->new($RT::SystemUser);
24 ok( $group->CreateUserDefinedGroup( Name => 'group_foo' ) );
25 my $cf = RT::CustomField->new($RT::SystemUser);
26 ok(
27     $cf->Create(
28         Name       => 'cf_foo',
29         Type       => 'Freeform',
30         LookupType => 'RT::Queue-RT::Ticket',
31     )
32 );
33 ok( $cf->id, 'created cf_foo' );
34
35 my $class = RT::Class->new($RT::SystemUser);
36 ok( $class->Create( Name => 'class_foo' ) );
37 ok( $class->id, 'created class_foo' );
38
39 # to make search have results
40 my $open_ticket = RT::Test->create_ticket(
41     Subject => 'ticket_foo',
42     Queue   => 1,
43 );
44
45 my $resolved_ticket = RT::Test->create_ticket(
46     Subject => 'ticket_bar',
47     Status  => 'resolved',
48     Queue   => 1,
49 );
50
51 my @links = (
52     '/',
53     '/Admin/Users/Modify.html?id=' . $user->id,
54     '/Admin/Groups/Modify.html?id=' . $group->id,
55     '/Admin/Queues/Modify.html?id=' . $queue->id,
56     '/Admin/CustomFields/Modify.html?id=' . $cf->id,
57     '/Admin/Global/Scrip.html?id=1',
58     '/Admin/Global/Template.html?Template=1',
59     '/Admin/Articles/Classes/Modify.html?id=' . $class->id,
60     '/Search/Build.html?Query=id<10',
61     '/Ticket/Display.html?id=' . $open_ticket->id,
62     '/Ticket/Display.html?id=' . $resolved_ticket->id,
63 );
64
65 for my $link (@links) {
66     test_page($m, $link);
67 }
68
69 $m->get_ok('/NoAuth/Logout.html');
70
71 sub test_page {
72     my $m = shift;
73     my $link = shift;
74     $m->get_ok( $link, $link );
75     $m->no_warnings_ok($link);
76
77     my $tree = HTML::TreeBuilder->new();
78     $tree->parse( $m->content );
79     $tree->elementify;
80     my ($top_menu)  = $tree->look_down( id => 'main-navigation' );
81     my ($page_menu) = $tree->look_down( id => 'page-navigation' );
82
83     my (@links) =
84       grep { !$viewed{$_}++ && /^[^#]/ }
85       map { $_->attr('href') || () } ( $top_menu ? $top_menu->find('a') : () ),
86       ( $page_menu ? $page_menu->find('a') : () );
87
88     for my $link (@links) {
89         test_page($m, $link);
90     }
91 }
92