@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
9
9
import 'package:plugin_platform_interface/plugin_platform_interface.dart' ;
10
10
import 'package:video_player_platform_interface/video_player_platform_interface.dart' ;
11
11
import 'package:video_player/video_player.dart' ;
12
+ import 'package:zulip/api/model/events.dart' ;
12
13
import 'package:zulip/api/model/model.dart' ;
13
14
import 'package:zulip/model/localizations.dart' ;
14
15
import 'package:zulip/model/narrow.dart' ;
@@ -205,6 +206,8 @@ void main() {
205
206
TestZulipBinding .ensureInitialized ();
206
207
MessageListPage .debugEnableMarkReadOnScroll = false ;
207
208
209
+ late PerAccountStore store;
210
+
208
211
group ('LightboxHero' , () {
209
212
late PerAccountStore store;
210
213
late FakeApiConnection connection;
@@ -317,10 +320,16 @@ void main() {
317
320
318
321
Future <void > setupPage (WidgetTester tester, {
319
322
Message ? message,
323
+ List <User >? users,
320
324
required Uri ? thumbnailUrl,
321
325
}) async {
322
326
addTearDown (testBinding.reset);
323
327
await testBinding.globalStore.add (eg.selfAccount, eg.initialSnapshot ());
328
+ store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
329
+
330
+ if (users != null ) {
331
+ await store.addUsers (users);
332
+ }
324
333
325
334
// ZulipApp instead of TestZulipApp because we need the navigator to push
326
335
// the lightbox route. The lightbox page works together with the route;
@@ -352,20 +361,41 @@ void main() {
352
361
debugNetworkImageHttpClientProvider = null ;
353
362
});
354
363
355
- testWidgets ('app bar shows sender name and date' , (tester) async {
356
- prepareBoringImageHttpClient ();
357
- final timestamp = DateTime .parse ("2024-07-23 23:12:24" ).millisecondsSinceEpoch ~ / 1000 ;
358
- final message = eg.streamMessage (sender: eg.otherUser, timestamp: timestamp);
359
- await setupPage (tester, message: message, thumbnailUrl: null );
360
-
361
- // We're looking for a RichText, in the app bar, with both the
362
- // sender's name and the timestamp.
364
+ void checkAppBarNameAndDate (WidgetTester tester, String expectedName, String expectedDate) {
363
365
final labelTextWidget = tester.widget <RichText >(
364
366
find.descendant (of: find.byType (AppBar ).last,
365
- matching: find.textContaining (findRichText: true ,
366
- eg.otherUser.fullName)));
367
+ matching: find.textContaining (findRichText: true , expectedName)));
367
368
check (labelTextWidget.text.toPlainText ())
368
- .contains ('Jul 23, 2024 23:12:24' );
369
+ .contains (expectedDate);
370
+ }
371
+
372
+ testWidgets ('app bar shows sender name and date; updates when name changes' , (tester) async {
373
+ prepareBoringImageHttpClient ();
374
+ final timestamp = DateTime .parse ("2024-07-23 23:12:24" ).millisecondsSinceEpoch ~ / 1000 ;
375
+ final sender = eg.user (fullName: 'Old name' );
376
+ final message = eg.streamMessage (sender: sender, timestamp: timestamp);
377
+ await setupPage (tester, message: message, thumbnailUrl: null , users: [sender]);
378
+ check (store.getUser (sender.userId)).isNotNull ();
379
+
380
+ checkAppBarNameAndDate (tester, 'Old name' , 'Jul 23, 2024 23:12:24' );
381
+
382
+ await store.handleEvent (RealmUserUpdateEvent (id: 1 ,
383
+ userId: sender.userId, fullName: 'New name' ));
384
+ await tester.pump ();
385
+ checkAppBarNameAndDate (tester, 'New name' , 'Jul 23, 2024 23:12:24' );
386
+
387
+ debugNetworkImageHttpClientProvider = null ;
388
+ });
389
+
390
+ testWidgets ('app bar shows sender name and date; unknown sender' , (tester) async {
391
+ prepareBoringImageHttpClient ();
392
+ final timestamp = DateTime .parse ("2024-07-23 23:12:24" ).millisecondsSinceEpoch ~ / 1000 ;
393
+ final sender = eg.user (fullName: 'Sender name' );
394
+ final message = eg.streamMessage (sender: sender, timestamp: timestamp);
395
+ await setupPage (tester, message: message, thumbnailUrl: null , users: []);
396
+ check (store.getUser (sender.userId)).isNull ();
397
+
398
+ checkAppBarNameAndDate (tester, 'Sender name' , 'Jul 23, 2024 23:12:24' );
369
399
370
400
debugNetworkImageHttpClientProvider = null ;
371
401
});
0 commit comments