aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/Utils.pm17
-rw-r--r--t/utils.t36
-rw-r--r--t/utils/email.t34
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;
diff --git a/t/utils.t b/t/utils.t
index 29759cddc..ac9eb1a4a 100644
--- a/t/utils.t
+++ b/t/utils.t
@@ -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();