first pass RT4 merge, RT#13852
[freeside.git] / rt / t / web / saved_search_chart.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4
5 use RT::Test no_plan => 1;
6 my ( $url, $m ) = RT::Test->started_ok;
7 use RT::Attribute;
8
9 my $search = RT::Attribute->new(RT->SystemUser);
10 my $ticket = RT::Ticket->new(RT->SystemUser);
11 my ( $ret, $msg ) = $ticket->Create(
12     Subject   => 'base ticket' . $$,
13     Queue     => 'general',
14     Owner     => 'root',
15     Requestor => 'root@localhost',
16     MIMEObj   => MIME::Entity->build(
17         From    => 'root@localhost',
18         To      => 'rt@localhost',
19         Subject => 'base ticket' . $$,
20         Data    => "",
21     ),
22 );
23 ok( $ret, "ticket created: $msg" );
24
25 ok( $m->login, 'logged in' );
26
27 $m->get_ok( $url . "/Search/Chart.html?Query=" . 'id=1' );
28 my ($owner) = $m->content =~ /value="(RT::User-\d+)"/;
29
30 $m->submit_form(
31     form_name => 'SaveSearch',
32     fields    => {
33         SavedSearchDescription => 'first chart',
34         SavedSearchOwner       => $owner,
35     },
36     button => 'SavedSearchSave',
37 );
38
39 $m->content_contains("Chart first chart saved", 'saved first chart' );
40
41 my ( $search_uri, $id ) = $m->content =~ /value="(RT::User-\d+-SavedSearch-(\d+))"/;
42 $m->submit_form(
43     form_name => 'SaveSearch',
44     fields    => { SavedSearchLoad => $search_uri },
45 );
46
47 $m->content_like( qr/name="SavedSearchDelete"\s+value="Delete"/,
48     'found Delete button' );
49 $m->content_like(
50     qr/name="SavedSearchDescription"\s+value="first chart"/,
51     'found Description input with the value filled'
52 );
53 $m->content_like( qr/name="SavedSearchSave"\s+value="Update"/,
54     'found Update button' );
55 $m->content_unlike( qr/name="SavedSearchSave"\s+value="Save"/,
56     'no Save button' );
57
58 $m->submit_form(
59     form_name => 'SaveSearch',
60     fields    => {
61         Query          => 'id=2',
62         PrimaryGroupBy => 'Status',
63         ChartStyle     => 'pie',
64     },
65     button => 'SavedSearchSave',
66 );
67
68 $m->content_contains("Chart first chart updated", 'found updated message' );
69 $m->content_contains("id=2",                      'Query is updated' );
70 $m->content_like( qr/value="Status"\s+selected="selected"/,
71     'PrimaryGroupBy is updated' );
72 $m->content_like( qr/value="pie"\s+selected="selected"/,
73     'ChartType is updated' );
74 ok( $search->Load($id) );
75 is( $search->SubValue('Query'), 'id=2', 'Query is indeed updated' );
76 is( $search->SubValue('PrimaryGroupBy'),
77     'Status', 'PrimaryGroupBy is indeed updated' );
78 is( $search->SubValue('ChartStyle'), 'pie', 'ChartStyle is indeed updated' );
79
80 # finally, let's test delete
81 $m->submit_form(
82     form_name => 'SaveSearch',
83     button    => 'SavedSearchDelete',
84 );
85 $m->content_contains("Chart first chart deleted", 'found deleted message' );
86 $m->content_unlike( qr/value="RT::User-\d+-SavedSearch-\d+"/,
87     'no saved search' );
88
89 for ('A' .. 'F') {
90     $ticket->Create(
91         Subject   => $$ . $_,
92     );
93 }
94
95 for ([A => 'subject="'.$$.'A"'], [BorC => 'subject="'.$$.'B" OR subject="'.$$.'C"']) {
96     $m->get_ok('/Search/Edit.html');
97     $m->form_name('BuildQueryAdvanced');
98     $m->field('Query', $_->[1]);
99     $m->submit;
100
101     # Save the search
102     $m->follow_link_ok({id => 'page-chart'});
103     $m->form_name('SaveSearch');
104     $m->field(SavedSearchDescription => $_->[0]);
105     $m->click_ok('SavedSearchSave');
106     $m->text_contains('Chart ' . $_->[0] . ' saved.');
107
108 }
109
110 $m->form_name('SaveSearch');
111 my @saved_search_ids =
112     $m->current_form->find_input('SavedSearchLoad')->possible_values;
113 shift @saved_search_ids; # first value is blank
114
115 cmp_ok(@saved_search_ids, '==', 2, 'Two saved charts were made');
116
117 # TODO get find_link('page-chart')->URI->params to work...
118 sub page_chart_link_has {
119     my ($m, $id, $msg) = @_;
120
121     $Test::Builder::Level = $Test::Builder::Level + 1;
122
123     (my $dec_id = $id) =~ s/:/%3A/g;
124
125     my $chart_url = $m->find_link(id => 'page-chart')->url;
126     like(
127         $chart_url, qr{SavedChartSearchId=\Q$dec_id\E},
128         $msg || 'Page chart link matches the pattern we expected'
129     );
130 }
131
132 # load the first chart
133 $m->field('SavedSearchLoad' => $saved_search_ids[0]);
134 $m->click('SavedSearchLoadSubmit');
135
136 page_chart_link_has($m, $saved_search_ids[0]);
137
138 $m->form_name('SaveSearch');
139 is($m->form_number(3)->value('SavedChartSearchId'), $saved_search_ids[0]);
140
141 $m->form_name('SaveSearch');
142
143 # now load the second chart
144 $m->field('SavedSearchLoad' => $saved_search_ids[1]);
145 $m->click('SavedSearchLoadSubmit');
146
147 page_chart_link_has($m, $saved_search_ids[1]);
148
149 is(
150     $m->form_number(3)->value('SavedChartSearchId'), $saved_search_ids[1],
151     'Second form is seen as a hidden field'
152 );
153
154 page_chart_link_has($m, $saved_search_ids[1]);