1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
use strict;
use warnings;
BEGIN {
require RT::Test;
if (eval { require GD }) {
RT::Test->import(tests => 15);
}
else {
RT::Test->import(skip_all => 'GD required.');
}
}
use utf8;
my $root = RT::Test->load_or_create_user( Name => 'root' );
my ( $baseurl, $m ) = RT::Test->started_ok;
ok( $m->login, 'logged in' );
my $ticket = RT::Ticket->new( $RT::SystemUser );
$ticket->Create(
Queue => 'General',
Subject => 'test äöü',
);
ok( $ticket->id, 'created ticket' );
$m->get_ok(q{/Search/Chart.html?Query=Subject LIKE 'test äöü'});
$m->submit_form(
form_name => 'SaveSearch',
fields => {
SavedSearchDescription => 'chart foo',
SavedSearchOwner => 'RT::User-' . $root->id,
},
button => 'SavedSearchSave',
);
# first, create and populate a dashboard
$m->get_ok('/Dashboards/Modify.html?Create=1');
$m->form_name('ModifyDashboard');
$m->field( 'Name' => 'dashboard foo' );
$m->click_button( value => 'Create' );
$m->follow_link_ok( { text => 'Content' } );
my $form = $m->form_name('Dashboard-Searches-body');
my @input = $form->find_input('Searches-body-Available');
my ($dashboards_component) =
map { ( $_->possible_values )[1] }
grep { ( $_->value_names )[1] =~ /^Chart/ } @input;
$form->value( 'Searches-body-Available' => $dashboards_component );
$m->click_button( name => 'add' );
$m->content_contains('Dashboard updated');
$m->follow_link_ok( { text => 'Subscription' } );
$m->form_name('SubscribeDashboard');
$m->field( 'Frequency' => 'daily' );
$m->field( 'Hour' => '06:00' );
$m->click_button( name => 'Save' );
$m->content_contains('Subscribed to dashboard dashboard foo');
my $c = $m->get(q{/Search/Chart?Query=Subject LIKE 'test äöü'});
my $image = $c->content;
RT::Test->run_and_capture(
command => $RT::SbinPath . '/rt-email-dashboards', all => 1
);
my @mails = RT::Test->fetch_caught_mails;
is @mails, 1, "got a dashboard mail";
# can't use parse_mail here is because it deletes all attachments
# before we can call bodyhandle :/
use RT::EmailParser;
my $parser = RT::EmailParser->new;
my $mail = $parser->ParseMIMEEntityFromScalar( $mails[0] );
like(
$mail->head->get('Subject'),
qr/Daily Dashboard: dashboard foo/,
'mail subject'
);
my ($mail_image) = grep { $_->mime_type eq 'image/png' } $mail->parts;
ok( $mail_image, 'mail contains image attachment' );
my $handle = $mail_image->bodyhandle;
my $mail_image_data = '';
if ( my $io = $handle->open('r') ) {
while ( defined( $_ = $io->getline ) ) { $mail_image_data .= $_ }
$io->close;
}
is( $mail_image_data, $image, 'image in mail is the same one in web' );
|