Skip to content

Commit cf857e0

Browse files
chrisbobbegnprice
authored andcommitted
lightbox: Use senderDisplayName for sender's name
Related: #716
1 parent c4a0ad9 commit cf857e0

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed

lib/widgets/lightbox.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ class _LightboxPageLayoutState extends State<_LightboxPageLayout> {
166166

167167
@override
168168
Widget build(BuildContext context) {
169+
final store = PerAccountStoreWidget.of(context);
169170
final themeData = Theme.of(context);
170171

171172
final appBarBackgroundColor = Colors.grey.shade900.withValues(alpha: 0.87);
@@ -200,7 +201,7 @@ class _LightboxPageLayoutState extends State<_LightboxPageLayout> {
200201
child: RichText(
201202
text: TextSpan(children: [
202203
TextSpan(
203-
text: '${widget.message.senderFullName}\n', // TODO(#716): use `store.senderDisplayName`
204+
text: '${store.senderDisplayName(widget.message)}\n',
204205

205206
// Restate default
206207
style: themeData.textTheme.titleLarge!.copyWith(color: appBarForegroundColor)),

test/widgets/lightbox_test.dart

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
99
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
1010
import 'package:video_player_platform_interface/video_player_platform_interface.dart';
1111
import 'package:video_player/video_player.dart';
12+
import 'package:zulip/api/model/events.dart';
1213
import 'package:zulip/api/model/model.dart';
1314
import 'package:zulip/model/localizations.dart';
1415
import 'package:zulip/model/narrow.dart';
@@ -205,6 +206,8 @@ void main() {
205206
TestZulipBinding.ensureInitialized();
206207
MessageListPage.debugEnableMarkReadOnScroll = false;
207208

209+
late PerAccountStore store;
210+
208211
group('LightboxHero', () {
209212
late PerAccountStore store;
210213
late FakeApiConnection connection;
@@ -317,10 +320,16 @@ void main() {
317320

318321
Future<void> setupPage(WidgetTester tester, {
319322
Message? message,
323+
List<User>? users,
320324
required Uri? thumbnailUrl,
321325
}) async {
322326
addTearDown(testBinding.reset);
323327
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+
}
324333

325334
// ZulipApp instead of TestZulipApp because we need the navigator to push
326335
// the lightbox route. The lightbox page works together with the route;
@@ -352,20 +361,41 @@ void main() {
352361
debugNetworkImageHttpClientProvider = null;
353362
});
354363

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) {
363365
final labelTextWidget = tester.widget<RichText>(
364366
find.descendant(of: find.byType(AppBar).last,
365-
matching: find.textContaining(findRichText: true,
366-
eg.otherUser.fullName)));
367+
matching: find.textContaining(findRichText: true, expectedName)));
367368
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');
369399

370400
debugNetworkImageHttpClientProvider = null;
371401
});

0 commit comments

Comments
 (0)