@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
99import 'package:plugin_platform_interface/plugin_platform_interface.dart' ;
1010import 'package:video_player_platform_interface/video_player_platform_interface.dart' ;
1111import 'package:video_player/video_player.dart' ;
12+ import 'package:zulip/api/model/events.dart' ;
1213import 'package:zulip/api/model/model.dart' ;
1314import 'package:zulip/model/localizations.dart' ;
1415import 'package:zulip/model/narrow.dart' ;
@@ -204,6 +205,8 @@ class FakeVideoPlayerPlatform extends Fake
204205void main () {
205206 TestZulipBinding .ensureInitialized ();
206207
208+ late PerAccountStore store;
209+
207210 group ('LightboxHero' , () {
208211 late PerAccountStore store;
209212 late FakeApiConnection connection;
@@ -316,10 +319,16 @@ void main() {
316319
317320 Future <void > setupPage (WidgetTester tester, {
318321 Message ? message,
322+ List <User >? users,
319323 required Uri ? thumbnailUrl,
320324 }) async {
321325 addTearDown (testBinding.reset);
322326 await testBinding.globalStore.add (eg.selfAccount, eg.initialSnapshot ());
327+ store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
328+
329+ if (users != null ) {
330+ await store.addUsers (users);
331+ }
323332
324333 // ZulipApp instead of TestZulipApp because we need the navigator to push
325334 // the lightbox route. The lightbox page works together with the route;
@@ -351,20 +360,41 @@ void main() {
351360 debugNetworkImageHttpClientProvider = null ;
352361 });
353362
354- testWidgets ('app bar shows sender name and date' , (tester) async {
355- prepareBoringImageHttpClient ();
356- final timestamp = DateTime .parse ("2024-07-23 23:12:24" ).millisecondsSinceEpoch ~ / 1000 ;
357- final message = eg.streamMessage (sender: eg.otherUser, timestamp: timestamp);
358- await setupPage (tester, message: message, thumbnailUrl: null );
359-
360- // We're looking for a RichText, in the app bar, with both the
361- // sender's name and the timestamp.
363+ void checkAppBarNameAndDate (WidgetTester tester, String expectedName, String expectedDate) {
362364 final labelTextWidget = tester.widget <RichText >(
363365 find.descendant (of: find.byType (AppBar ).last,
364- matching: find.textContaining (findRichText: true ,
365- eg.otherUser.fullName)));
366+ matching: find.textContaining (findRichText: true , expectedName)));
366367 check (labelTextWidget.text.toPlainText ())
367- .contains ('Jul 23, 2024 23:12:24' );
368+ .contains (expectedDate);
369+ }
370+
371+ testWidgets ('app bar shows sender name and date; updates when name changes' , (tester) async {
372+ prepareBoringImageHttpClient ();
373+ final timestamp = DateTime .parse ("2024-07-23 23:12:24" ).millisecondsSinceEpoch ~ / 1000 ;
374+ final sender = eg.user (fullName: 'Old name' );
375+ final message = eg.streamMessage (sender: sender, timestamp: timestamp);
376+ await setupPage (tester, message: message, thumbnailUrl: null , users: [sender]);
377+ check (store.getUser (sender.userId)).isNotNull ();
378+
379+ checkAppBarNameAndDate (tester, 'Old name' , 'Jul 23, 2024 23:12:24' );
380+
381+ await store.handleEvent (RealmUserUpdateEvent (id: 1 ,
382+ userId: sender.userId, fullName: 'New name' ));
383+ await tester.pump ();
384+ checkAppBarNameAndDate (tester, 'New name' , 'Jul 23, 2024 23:12:24' );
385+
386+ debugNetworkImageHttpClientProvider = null ;
387+ });
388+
389+ testWidgets ('app bar shows sender name and date; unknown sender' , (tester) async {
390+ prepareBoringImageHttpClient ();
391+ final timestamp = DateTime .parse ("2024-07-23 23:12:24" ).millisecondsSinceEpoch ~ / 1000 ;
392+ final sender = eg.user (fullName: 'Sender name' );
393+ final message = eg.streamMessage (sender: sender, timestamp: timestamp);
394+ await setupPage (tester, message: message, thumbnailUrl: null , users: []);
395+ check (store.getUser (sender.userId)).isNull ();
396+
397+ checkAppBarNameAndDate (tester, 'Sender name' , 'Jul 23, 2024 23:12:24' );
368398
369399 debugNetworkImageHttpClientProvider = null ;
370400 });
0 commit comments