Skip to content

Commit 93a116d

Browse files
committed
tests: display user's local time
1 parent 82ed4bd commit 93a116d

File tree

2 files changed

+91
-13
lines changed

2 files changed

+91
-13
lines changed

test/example_data.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ User user({
117117
bool? isActive,
118118
bool? isBot,
119119
UserRole? role,
120+
String? timezone,
120121
String? avatarUrl,
121122
Map<int, ProfileFieldUserData>? profileData,
122123
}) {
@@ -134,7 +135,7 @@ User user({
134135
botType: null,
135136
botOwnerId: null,
136137
role: role ?? UserRole.member,
137-
timezone: 'UTC',
138+
timezone: timezone ?? 'UTC',
138139
avatarUrl: avatarUrl,
139140
avatarVersion: 0,
140141
profileData: profileData,

test/widgets/profile_test.dart

Lines changed: 89 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -332,18 +332,95 @@ void main() {
332332
check(find.textContaining(longString).evaluate()).length.equals(7);
333333
});
334334

335-
test('assets; ensure the timezone database used to display users\' local time is up-to-date', () async {
336-
tz.initializeTimeZones();
337-
final latestTimezones = tz.tzdbSerialize(tz.timeZoneDatabase);
338-
339-
await UserLocalTimeText.initializeTimezonesUsingAssets();
340-
final currentTimezones = tz.tzdbSerialize(tz.timeZoneDatabase);
341-
342-
check(
343-
listEquals(currentTimezones, latestTimezones),
344-
because:
345-
'the timezone database used to display users\' local time is not up-to-date, please copy `package:timezone/data/latest_all.tzf` to `assets/timezone/latest_all.tzf`',
346-
).isTrue();
335+
group('UserLocalTimeText', () {
336+
setUp(() async {
337+
await UserLocalTimeText.initializeTimezonesUsingAssets();
338+
});
339+
340+
test('assets; ensure the timezone database used to display users\' local time is up-to-date', () async {
341+
tz.initializeTimeZones();
342+
final latestTimezones = tz.tzdbSerialize(tz.timeZoneDatabase);
343+
344+
await UserLocalTimeText.initializeTimezonesUsingAssets();
345+
final currentTimezones = tz.tzdbSerialize(tz.timeZoneDatabase);
346+
347+
check(
348+
listEquals(currentTimezones, latestTimezones),
349+
because:
350+
'the timezone database used to display users\' local time is not up-to-date, please copy `package:timezone/data/latest_all.tzf` to `assets/timezone/latest_all.tzf`',
351+
).isTrue();
352+
});
353+
354+
final testCases = [(
355+
description: 'simple usecase',
356+
currentTimezone: 'America/Los_Angeles',
357+
currentYear: 2025, currentMonth: 02, currentDay: 01, currentHour: 12, currentMinute: 00,
358+
userTimezone: 'America/New_York',
359+
equalsTo: '3:00 PM local time'
360+
), (
361+
description: 'abbreviation usecase',
362+
currentTimezone: 'Europe/Brussels',
363+
currentYear: 2025, currentMonth: 02, currentDay: 01, currentHour: 12, currentMinute: 00,
364+
userTimezone: 'CET',
365+
equalsTo: '12:00 PM local time'
366+
), (
367+
description: 'DST usecase',
368+
currentTimezone: 'Europe/London',
369+
currentYear: 2025, currentMonth: 08, currentDay: 01, currentHour: 12, currentMinute: 00,
370+
userTimezone: 'UTC',
371+
equalsTo: '11:00 AM local time'
372+
)
373+
];
374+
375+
for (
376+
final (
377+
:description,
378+
:currentTimezone,
379+
:currentYear,
380+
:currentMonth,
381+
:currentDay,
382+
:currentHour,
383+
:currentMinute, :userTimezone, :equalsTo) in testCases) {
384+
testWidgets('page builds; $description', (tester) async {
385+
final currentTime = tz.TZDateTime(
386+
tz.getLocation(currentTimezone),
387+
currentYear,
388+
currentMonth,
389+
currentDay,
390+
currentHour,
391+
currentMinute
392+
);
393+
resetTimezones();
394+
395+
await withClock(Clock.fixed(currentTime), () async {
396+
final user = eg.user(userId: 1, timezone: userTimezone);
397+
await setupPage(tester, pageUserId: user.userId, users: [user]);
398+
399+
checkUserLocalTimeText(tester).equals(equalsTo);
400+
});
401+
});
402+
}
403+
404+
testWidgets('page builds; keep "current" local time current', (tester) async {
405+
withClock(Clock.fixed(tz.TZDateTime(tz.getLocation('Europe/London'), 2025, 02, 01, 12, 00)), () {
406+
FakeAsync().run((async) {
407+
final user = eg.user(userId: 1, timezone: 'Europe/London');
408+
setupPage(tester, pageUserId: user.userId, users: [user]);
409+
async.flushMicrotasks();
410+
checkUserLocalTimeText(tester).equals('12:00 PM local time');
411+
412+
async.elapse(Duration(minutes: 1));
413+
tester.pumpAndSettle();
414+
async.flushMicrotasks();
415+
checkUserLocalTimeText(tester).equals('12:01 PM local time');
416+
417+
async.elapse(Duration(minutes: 1));
418+
tester.pumpAndSettle();
419+
async.flushMicrotasks();
420+
checkUserLocalTimeText(tester).equals('12:02 PM local time');
421+
});
422+
});
423+
});
347424
});
348425
});
349426
}

0 commit comments

Comments
 (0)