@@ -15,7 +15,7 @@ use warnings;
1515
1616use lib qw( . lib local/lib/perl5 t) ;
1717use Support::Files;
18- use Test::More tests => 20 ;
18+ use Test::More tests => 52 ;
1919use DateTime;
2020
2121BEGIN {
@@ -114,3 +114,56 @@ my ($removed, $added) = diff_arrays(\@old_array, \@new_array);
114114is_deeply($removed , [qw( gamma alpha gamma) ],
115115 ' diff_array(\@old, \@new) (check removal)' );
116116is_deeply($added , [qw( delta) ], ' diff_array(\@old, \@new) (check addition)' );
117+
118+ # time_ago():
119+ # Test with seconds
120+ is(time_ago(5), ' Just now' , ' time_ago(5) returns "Just now"' );
121+ is(time_ago(9), ' Just now' , ' time_ago(9) returns "Just now"' );
122+ is(time_ago(10), ' 10 seconds ago' , ' time_ago(10) returns "10 seconds ago"' );
123+ is(time_ago(30), ' 30 seconds ago' , ' time_ago(30) returns "30 seconds ago"' );
124+ is(time_ago(44), ' 44 seconds ago' , ' time_ago(44) returns "44 seconds ago"' );
125+
126+ # Test minute boundaries
127+ is(time_ago(45), ' 1 minute ago' , ' time_ago(45) returns "1 minute ago"' );
128+ is(time_ago(60), ' 1 minute ago' , ' time_ago(60) returns "1 minute ago"' );
129+ is(time_ago(90), ' 1 minute ago' , ' time_ago(90) returns "1 minute ago"' );
130+ is(time_ago(119), ' 1 minute ago' , ' time_ago(119) returns "1 minute ago"' );
131+ is(time_ago(120), ' 2 minutes ago' , ' time_ago(120) returns "2 minutes ago"' );
132+
133+ # Test hour boundaries - critical for the bug fix
134+ is(time_ago(60 * 44), ' 44 minutes ago' , ' time_ago(44 minutes) returns "44 minutes ago"' );
135+ is(time_ago(60 * 60), ' 1 hour ago' , ' time_ago(60 minutes) returns "1 hour ago"' );
136+ is(time_ago(60 * 90), ' 1 hour ago' , ' time_ago(90 minutes) returns "1 hour ago"' );
137+ is(time_ago(60 * 119), ' 1 hour ago' , ' time_ago(119 minutes) returns "1 hour ago"' );
138+ is(time_ago(60 * 120), ' 2 hours ago' , ' time_ago(2 hours) returns "2 hours ago"' );
139+
140+ # Test day boundaries - this is where the bug was most visible
141+ is(time_ago(60 * 60 * 23), ' 23 hours ago' , ' time_ago(23 hours) returns "23 hours ago"' );
142+ is(time_ago(60 * 60 * 24), ' 1 day ago' , ' time_ago(24 hours) returns "1 day ago"' );
143+ is(time_ago(60 * 60 * 36), ' 1 day ago' , ' time_ago(36 hours) returns "1 day ago"' );
144+ is(time_ago(60 * 60 * 47), ' 1 day ago' , ' time_ago(47 hours) returns "1 day ago"' );
145+ is(time_ago(60 * 60 * 48), ' 2 days ago' , ' time_ago(48 hours) returns "2 days ago"' );
146+ is(time_ago(60 * 60 * 72), ' 3 days ago' , ' time_ago(72 hours) returns "3 days ago"' );
147+
148+ # Test month boundaries
149+ is(time_ago(60 * 60 * 24 * 29), ' 29 days ago' , ' time_ago(29 days) returns "29 days ago"' );
150+ is(time_ago(60 * 60 * 24 * 30), ' 1 month ago' , ' time_ago(30 days) returns "1 month ago"' );
151+ is(time_ago(60 * 60 * 24 * 45), ' 1 month ago' , ' time_ago(45 days) returns "1 month ago"' );
152+ is(time_ago(60 * 60 * 24 * 59), ' 1 month ago' , ' time_ago(59 days) returns "1 month ago"' );
153+ is(time_ago(60 * 60 * 24 * 60), ' 2 months ago' , ' time_ago(60 days) returns "2 months ago"' );
154+
155+ # Test year boundaries
156+ is(time_ago(60 * 60 * 24 * 365), ' 1 year ago' , ' time_ago(365 days) returns "1 year ago"' );
157+ is(time_ago(60 * 60 * 24 * 547), ' 1 year ago' , ' time_ago(547 days) returns "1 year ago"' );
158+ is(time_ago(60 * 60 * 24 * 731), ' 2 years ago' , ' time_ago(731 days) returns "2 years ago"' );
159+
160+ # Test with DateTime object
161+ my $now = DateTime-> now();
162+ my $past = $now -> clone-> subtract(hours => 25);
163+ is(time_ago($past ), ' 1 day ago' , ' time_ago(DateTime 25 hours ago) returns "1 day ago"' );
164+
165+ $past = $now -> clone-> subtract(days => 2);
166+ is(time_ago($past ), ' 2 days ago' , ' time_ago(DateTime 2 days ago) returns "2 days ago"' );
167+
168+ $past = $now -> clone-> subtract(months => 1);
169+ like(time_ago($past ), qr / ^(1 month|2[89]|3[01] days) ago$ / , ' time_ago(DateTime 1 month ago) is reasonable' );
0 commit comments