Main coves client
1import 'package:coves_flutter/utils/date_time_utils.dart';
2import 'package:flutter_test/flutter_test.dart';
3
4void main() {
5 group('DateTimeUtils.formatTimeAgo', () {
6 // Fixed reference time for deterministic testing
7 final referenceTime = DateTime(2024, 1, 15, 12);
8
9 test('formats minutes correctly', () {
10 final pastTime = referenceTime.subtract(const Duration(minutes: 5));
11 expect(
12 DateTimeUtils.formatTimeAgo(pastTime, currentTime: referenceTime),
13 '5m',
14 );
15 });
16
17 test('formats 0 minutes as 0m', () {
18 final pastTime = referenceTime.subtract(const Duration(seconds: 30));
19 expect(
20 DateTimeUtils.formatTimeAgo(pastTime, currentTime: referenceTime),
21 '0m',
22 );
23 });
24
25 test('formats 59 minutes as minutes', () {
26 final pastTime = referenceTime.subtract(const Duration(minutes: 59));
27 expect(
28 DateTimeUtils.formatTimeAgo(pastTime, currentTime: referenceTime),
29 '59m',
30 );
31 });
32
33 test('formats hours correctly', () {
34 final pastTime = referenceTime.subtract(const Duration(hours: 3));
35 expect(
36 DateTimeUtils.formatTimeAgo(pastTime, currentTime: referenceTime),
37 '3h',
38 );
39 });
40
41 test('formats 23 hours as hours', () {
42 final pastTime = referenceTime.subtract(const Duration(hours: 23));
43 expect(
44 DateTimeUtils.formatTimeAgo(pastTime, currentTime: referenceTime),
45 '23h',
46 );
47 });
48
49 test('formats days correctly', () {
50 final pastTime = referenceTime.subtract(const Duration(days: 7));
51 expect(
52 DateTimeUtils.formatTimeAgo(pastTime, currentTime: referenceTime),
53 '7d',
54 );
55 });
56
57 test('formats 364 days as days', () {
58 final pastTime = referenceTime.subtract(const Duration(days: 364));
59 expect(
60 DateTimeUtils.formatTimeAgo(pastTime, currentTime: referenceTime),
61 '364d',
62 );
63 });
64
65 test('formats years correctly', () {
66 final pastTime = referenceTime.subtract(const Duration(days: 365));
67 expect(
68 DateTimeUtils.formatTimeAgo(pastTime, currentTime: referenceTime),
69 '1yr',
70 );
71 });
72
73 test('formats multiple years correctly', () {
74 final pastTime = referenceTime.subtract(const Duration(days: 730));
75 expect(
76 DateTimeUtils.formatTimeAgo(pastTime, currentTime: referenceTime),
77 '2yr',
78 );
79 });
80
81 test('uses DateTime.now() when currentTime not provided', () {
82 final pastTime = DateTime.now().subtract(const Duration(minutes: 5));
83 final result = DateTimeUtils.formatTimeAgo(pastTime);
84
85 // Should be "5m" or "4m" depending on timing
86 expect(result, matches(r'^\d+m$'));
87 });
88 });
89
90 group('DateTimeUtils.formatCount', () {
91 test('formats numbers less than 1000 as-is', () {
92 expect(DateTimeUtils.formatCount(0), '0');
93 expect(DateTimeUtils.formatCount(1), '1');
94 expect(DateTimeUtils.formatCount(42), '42');
95 expect(DateTimeUtils.formatCount(999), '999');
96 });
97
98 test('formats 1000 as 1.0k', () {
99 expect(DateTimeUtils.formatCount(1000), '1.0k');
100 });
101
102 test('formats thousands with one decimal place', () {
103 expect(DateTimeUtils.formatCount(1500), '1.5k');
104 expect(DateTimeUtils.formatCount(2300), '2.3k');
105 expect(DateTimeUtils.formatCount(5678), '5.7k');
106 });
107
108 test('formats large numbers correctly', () {
109 expect(DateTimeUtils.formatCount(10000), '10.0k');
110 expect(DateTimeUtils.formatCount(42500), '42.5k');
111 expect(DateTimeUtils.formatCount(999999), '1000.0k');
112 });
113
114 test('rounds to one decimal place', () {
115 expect(DateTimeUtils.formatCount(1234), '1.2k');
116 expect(DateTimeUtils.formatCount(1567), '1.6k');
117 });
118 });
119}