diff options
| -rw-r--r-- | perllib/Utils.pm | 17 | ||||
| -rw-r--r-- | t/utils.t | 36 | ||||
| -rw-r--r-- | t/utils/email.t | 34 | 
3 files changed, 73 insertions, 14 deletions
| diff --git a/perllib/Utils.pm b/perllib/Utils.pm index 87c1a10d6..84c09d09d 100644 --- a/perllib/Utils.pm +++ b/perllib/Utils.pm @@ -15,6 +15,7 @@ use Encode;  use File::Slurp qw();  use mySociety::GeoUtil;  use mySociety::Locale; +use FixMyStreet;  =head2 convert_latlon_to_en @@ -199,7 +200,7 @@ sub prettify_duration {          $s = int(($s+60*60*12)/60/60/24)*60*60*24;      } elsif ($nearest eq 'hour') {          $s = int(($s+60*30)/60/60)*60*60; -    } elsif ($nearest eq 'minute') { +    } else { # minute          $s = int(($s+30)/60)*60;          return _('less than a minute') if $s == 0;      } @@ -221,7 +222,7 @@ sub _part {              $str = mySociety::Locale::nget("%d day", "%d days", $i);          } elsif ($m == 60*60) {              $str = mySociety::Locale::nget("%d hour", "%d hours", $i); -        } elsif ($m == 60) { +        } else {              $str = mySociety::Locale::nget("%d minute", "%d minutes", $i);          }          push @$o, sprintf($str, $i); @@ -229,17 +230,5 @@ sub _part {      }  } -=head2 read_file - -Reads in a UTF-8 encoded file using File::Slurp and decodes it from UTF-8. -This appears simplest, rather than getting confused with binmodes and so on. - -=cut -sub read_file { -    my $filename = shift; -    my $data = File::Slurp::read_file( $filename ); -    $data = Encode::decode( 'utf8', $data ); -    return $data; -}  1; @@ -4,6 +4,9 @@ use strict;  use warnings;  use Test::More; +use mySociety::Locale; +mySociety::Locale::gettext_domain('FixMyStreet'); +  use Utils;  my @truncate_tests = ( @@ -34,9 +37,14 @@ foreach my $test (@convert_en_to_latlon_tests) {        [ Utils::convert_en_to_latlon_truncated( $e, $n ) ],    #        [ $lat, $lon ],                                         #        "convert ($e,$n) to ($lat,$lon)"; +    is_deeply +      [ Utils::convert_latlon_to_en( $lat, $lon ) ], +      [ $e, $n ], +      "convert ($lat,$lon) to ($e,$n)";  }  my @cleanup_tests = ( +    [ '', '', '' ],      [ 'dog shit', 'Dog poo', 'dog poo' ],      [ 'dog   shit', 'Dog poo', 'with spaces' ],      [ 'dog shite', 'Dog poo', 'with extra e' ], @@ -57,4 +65,32 @@ foreach my $test ( @cleanup_tests ) {  is Utils::cleanup_text( "This has new\n\n\nlines in it", { allow_multiline => 1 } ),  "This has new\n\nLines in it", 'new lines allowed'; + +is Utils::prettify_dt(), "[unknown time]"; +my $dt = DateTime->now; +is Utils::prettify_dt($dt), $dt->strftime("%H:%M today"); + +# Same week test +if ($dt->day_of_week == 7) { # Sunday +    $dt = DateTime->now->add(days => 1); +} else { +    $dt = DateTime->now->subtract(days => 1); +} +is Utils::prettify_dt($dt), $dt->strftime("%H:%M, %A"); + +$dt = DateTime->now->subtract(days => 100); +is Utils::prettify_dt($dt), $dt->strftime("%H:%M, %A %e %B %Y"); +is Utils::prettify_dt($dt, "date"), $dt->strftime("%A %e %B %Y"); +is Utils::prettify_dt($dt, "zurich"), $dt->strftime("%H:%M, %e. %B %Y"); +is Utils::prettify_dt($dt, "short"), $dt->strftime("%H:%M, %e %b %Y"); +is Utils::prettify_dt($dt, 1), $dt->strftime("%H:%M, %e %b %Y"); +$dt = DateTime->now->subtract(days => 400); +is Utils::prettify_dt($dt), $dt->strftime("%H:%M, %a %e %B %Y"); + +is Utils::prettify_duration(7*86400+3600+60+1, 'week'), '1 week'; +is Utils::prettify_duration(86400+3600+60+1, 'day'), '1 day'; +is Utils::prettify_duration(86400+3600+60+1, 'hour'), '1 day, 1 hour'; +is Utils::prettify_duration(86400+3600+60+1, 'minute'), '1 day, 1 hour, 1 minute'; +is Utils::prettify_duration(20, 'minute'), 'less than a minute'; +  done_testing(); diff --git a/t/utils/email.t b/t/utils/email.t new file mode 100644 index 000000000..23814c1d7 --- /dev/null +++ b/t/utils/email.t @@ -0,0 +1,34 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use Test::More; +use Test::MockModule; + +use Utils::Email; + +my $resolver = Test::MockModule->new('Net::DNS::Resolver'); +$resolver->mock('send', sub { +    my ($self, $domain, $type) = @_; +    my @rrs; +    is $type, 'TXT'; +    if ($domain eq '_dmarc.yahoo.com') { +        @rrs = ( +            Net::DNS::RR->new(name => '_dmarc.yahoo.com', type => 'TXT', txtdata => 'p=reject'), +            Net::DNS::RR->new(name => '_dmarc.yahoo.com', type => 'A'), +        ); +    } elsif ($domain eq 'cname.example.com') { +        @rrs = Net::DNS::RR->new(name => 'cname.example.com', type => 'TXT', txtdata => 'p=none'); +    } else { +        @rrs = Net::DNS::RR->new(name => '_dmarc.example.net', type => 'CNAME', cname => 'cname.example.com'); +    } +    my $pkt = Net::DNS::Packet->new; +    push @{$pkt->{answer}}, @rrs; +    return $pkt; +}); + +is Utils::Email::test_dmarc('BAD'), undef; +is Utils::Email::test_dmarc('test@yahoo.com'), 1; +is Utils::Email::test_dmarc('test@example.net'), undef; + +done_testing(); | 
