
sunnavy at bestpractical
Aug 8, 2011, 10:20 PM
Post #2 of 2
(348 views)
Permalink
|
|
Re: [Rt-commit] rt branch, 4.0/dashboard-chart-with-umlauts, created. rt-4.0.1-298-gc6fb9f5
[In reply to]
|
|
On 11-08-08 21:13, Ruslan Zakirov wrote: > Regards, Ruslan. From phone. > 08.08.2011 14:01 пользователь "? sunnavy" <sunnavy [at] bestpractical> > написал: > > > > The branch, 4.0/dashboard-chart-with-umlauts has been created > > at c6fb9f54c37142df0089145c12ab4feab52d7d27 (commit) > > > > - Log ----------------------------------------------------------------- > > commit c0ec1787729093b2064a36c9ef5cce5e84b763d5 > > Author: sunnavy <sunnavy [at] bestpractical> > > Date: Mon Aug 8 17:31:41 2011 +0800 > > > > turn off utf8 as uri string is utf8 encoded, see also #18104 > > > > diff --git a/lib/RT/Dashboard/Mailer.pm b/lib/RT/Dashboard/Mailer.pm > > index f6b1685..ae10d21 100644 > > --- a/lib/RT/Dashboard/Mailer.pm > > +++ b/lib/RT/Dashboard/Mailer.pm > > @@ -476,7 +476,9 @@ sub BuildEmail { > > } > > > > sub GetResource { > > - my $uri = URI->new(shift); > > + my $string = shift; > > + Encode::_utf8_off($string); > > + my $uri = URI->new($string); > > Shouldn't uri be escaped and contain only ASCII? I see this masking real > issue. yep, but those ascii with utf8 flag on makes URI interpret uri escaped utf8 encoded data differently, here is the detail: "äöü" is escaped to "%C3%A4%C3%B6%C3%BC" use Devel::StringInfo 'string_info'; my $uri = URI->new('?Query=%C3%A4%C3%B6%C3%BC'); print string_info( ($uri->query_form('Query'))[1] ); output: string: äöü is_utf8: 0 octet_length: 6 valid_utf8: 1 decoded_is_same: 0 decoded: octet_length: 6 downgradable: 1 char_length: 3 string: äöü is_utf8: 1 raw = <<äöü>> this is right. but if utf8 flag of "%C3%A4%C3%B6%C3%BC" is on: use Encode; use Devel::StringInfo 'string_info'; my $uri = URI->new(decode_utf8 '?Query=%C3%A4%C3%B6%C3%BC'); print string_info( ($uri->query_form('Query'))[1] ); output: string: äöü is_utf8: 1 char_length: 6 octet_length: 12 downgradable: 1 raw = <<äöü>> this is not right, the char_length should be 3 and octet_length should be 6 > > > my ($content, $filename, $mimetype, $encoding); > > > > $RT::Logger->debug("Getting resource $uri"); > > > > commit c6fb9f54c37142df0089145c12ab4feab52d7d27 > > Author: sunnavy <sunnavy [at] bestpractical> > > Date: Mon Aug 8 17:31:58 2011 +0800 > > > > test for dashboard chart with umlauts > > > > diff --git a/t/mail/dashboard-chart-with-umlauts.t > b/t/mail/dashboard-chart-with-umlauts.t > > new file mode 100644 > > index 0000000..cfde407 > > --- /dev/null > > +++ b/t/mail/dashboard-chart-with-umlauts.t > > @@ -0,0 +1,88 @@ > > +use strict; > > +use warnings; > > + > > +use RT::Test tests => 19; > > +use RT::Dashboard::Mailer; > > +use Encode; > > + > > +my $root = RT::Test->load_or_create_user( Name => 'root' ); > > + > > +my ( $baseurl, $m ) = RT::Test->started_ok; > > +ok( $m->login, 'logged in' ); > > + > > +RT::Test->create_ticket( > > + Queue => 'General', > > + Subject => decode_utf8('test äöü'), > > +); > > + > > +my $query = "Subject LIKE 'test äöü'"; > > + > > +$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'); > > + > > +$m->follow_link_ok( { text => 'Show' } ); > > +my ($src) = $m->content =~ qr{src="(/Search/Chart\?.*?)"}; > > +ok( $src, 'have chart image' ); > > +my $c = $m->get($src); > > +my $image = $c->content; > > + > > +RT::Dashboard::Mailer->MailDashboards( 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; > > +$parser->ParseMIMEEntityFromScalar( $mails[0] ); > > +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' ); > > + > > > > ----------------------------------------------------------------------- > > > > _______________________________________________ > > Rt-commit mailing list > > Rt-commit [at] lists > > http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-commit > > > _______________________________________________ > Come work for us: http://blog.bestpractical.com/2011/06/were-hiring-come-hack-perl-for-best-practical.html > 2011 Training: http://bestpractical.com/services/training.html > List info: http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-devel _______________________________________________ Come work for us: http://blog.bestpractical.com/2011/06/were-hiring-come-hack-perl-for-best-practical.html 2011 Training: http://bestpractical.com/services/training.html List info: http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-devel
|