Skip to content

Commit d6a5020

Browse files
gnpricechrisbobbe
authored andcommitted
action_sheet test: Avoid mutating shared example users
This is the same sort of state leak that caused #1712; this instance of it just hasn't happened to break any tests for us yet. We'll soon arrange things so that this sort of state-leaking mutation causes an immediate error. This is one of the three total places where it turns out we had such mutations, including the one we just fixed in a04b44e (#1713). The second of these tests ("no error if recipient was deactivated …") wasn't actually mutating the shared example user `eg.otherUser`, because secretly `setupToMessageActionSheet` makes a new User object with the same user ID and puts that in the store. Still, it *looked* like it was; best to do something that clearly looks correct instead. The first of these tests was indeed mutating `eg.selfUser`, just as it looks like it's doing.
1 parent 9297b75 commit d6a5020

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

test/widgets/action_sheet_test.dart

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ late FakeApiConnection connection;
5555
Future<void> setupToMessageActionSheet(WidgetTester tester, {
5656
required Message message,
5757
required Narrow narrow,
58+
User? selfUser,
5859
User? sender,
5960
List<int>? mutedUserIds,
6061
bool? realmAllowMessageEditing,
@@ -67,15 +68,17 @@ Future<void> setupToMessageActionSheet(WidgetTester tester, {
6768
// TODO(#1667) will be null in a search narrow; remove `!`.
6869
assert(narrow.containsMessage(message)!);
6970

71+
selfUser ??= eg.selfUser;
72+
final selfAccount = eg.account(user: selfUser);
7073
await testBinding.globalStore.add(
71-
eg.selfAccount,
74+
selfAccount,
7275
eg.initialSnapshot(
7376
realmAllowMessageEditing: realmAllowMessageEditing,
7477
realmMessageContentEditLimitSeconds: realmMessageContentEditLimitSeconds,
7578
));
76-
store = await testBinding.globalStore.perAccount(eg.selfAccount.id);
79+
store = await testBinding.globalStore.perAccount(selfAccount.id);
7780
await store.addUsers([
78-
eg.selfUser,
81+
selfUser,
7982
sender ?? eg.user(userId: message.senderId),
8083
if (narrow is DmNarrow)
8184
...narrow.otherRecipientIds.map((id) => eg.user(userId: id)),
@@ -97,7 +100,7 @@ Future<void> setupToMessageActionSheet(WidgetTester tester, {
97100

98101
connection.prepare(json: eg.newestGetMessagesResult(
99102
foundOldest: true, messages: [message]).toJson());
100-
await tester.pumpWidget(TestZulipApp(accountId: eg.selfAccount.id,
103+
await tester.pumpWidget(TestZulipApp(accountId: selfAccount.id,
101104
child: MessageListPage(initNarrow: narrow)));
102105

103106
// global store, per-account store, and message list get loaded
@@ -1204,11 +1207,13 @@ void main() {
12041207
});
12051208

12061209
testWidgets('no error if user lost posting permission after action sheet opened', (tester) async {
1210+
final selfUser = eg.user(role: UserRole.member);
12071211
final stream = eg.stream();
12081212
final message = eg.streamMessage(stream: stream);
1209-
await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message));
1213+
await setupToMessageActionSheet(tester, selfUser: selfUser,
1214+
message: message, narrow: TopicNarrow.ofMessage(message));
12101215

1211-
await store.handleEvent(RealmUserUpdateEvent(id: 1, userId: eg.selfUser.userId,
1216+
await store.handleEvent(RealmUserUpdateEvent(id: 1, userId: selfUser.userId,
12121217
role: UserRole.guest));
12131218
await store.handleEvent(eg.channelUpdateEvent(stream,
12141219
property: ChannelPropertyName.channelPostPolicy,
@@ -1240,7 +1245,8 @@ void main() {
12401245
});
12411246

12421247
testWidgets('no error if recipient was deactivated while raw-content request in progress', (tester) async {
1243-
final message = eg.dmMessage(from: eg.selfUser, to: [eg.otherUser]);
1248+
final otherUser = eg.user();
1249+
final message = eg.dmMessage(from: eg.selfUser, to: [otherUser]);
12441250
await setupToMessageActionSheet(tester,
12451251
message: message,
12461252
narrow: DmNarrow.ofMessage(message, selfUserId: eg.selfUser.userId));
@@ -1253,7 +1259,7 @@ void main() {
12531259
await tapQuoteAndReplyButton(tester);
12541260
await tester.pump(const Duration(seconds: 1)); // message not yet fetched
12551261

1256-
await store.handleEvent(RealmUserUpdateEvent(id: 1, userId: eg.otherUser.userId,
1262+
await store.handleEvent(RealmUserUpdateEvent(id: 1, userId: otherUser.userId,
12571263
isActive: false));
12581264
await tester.pump();
12591265
// no error

0 commit comments

Comments
 (0)