@@ -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