@@ -43,10 +43,16 @@ Future<void> setupToMessageActionSheet(WidgetTester tester, {
43
43
required Narrow narrow,
44
44
}) async {
45
45
addTearDown (testBinding.reset);
46
+ assert (narrow.containsMessage (message));
46
47
47
48
await testBinding.globalStore.add (eg.selfAccount, eg.initialSnapshot ());
48
49
store = await testBinding.globalStore.perAccount (eg.selfAccount.id);
49
- await store.addUsers ([eg.selfUser, eg.user (userId: message.senderId)]);
50
+ await store.addUsers ([
51
+ eg.selfUser,
52
+ eg.user (userId: message.senderId),
53
+ if (narrow is DmNarrow )
54
+ ...narrow.otherRecipientIds.map ((id) => eg.user (userId: id)),
55
+ ]);
50
56
if (message is StreamMessage ) {
51
57
final stream = eg.stream (streamId: message.streamId);
52
58
await store.addStream (stream);
@@ -313,6 +319,22 @@ void main() {
313
319
checkSuccessState (store, contentController,
314
320
valueBefore: valueBefore, message: message, rawContent: 'Hello world' );
315
321
});
322
+
323
+ testWidgets ('no error if user lost posting permission after action sheet opened' , (tester) async {
324
+ final stream = eg.stream ();
325
+ final message = eg.streamMessage (stream: stream);
326
+ await setupToMessageActionSheet (tester, message: message, narrow: TopicNarrow .ofMessage (message));
327
+
328
+ await store.handleEvent (RealmUserUpdateEvent (id: 1 , userId: eg.selfUser.userId,
329
+ role: UserRole .guest));
330
+ await store.handleEvent (eg.channelUpdateEvent (stream,
331
+ property: ChannelPropertyName .channelPostPolicy,
332
+ value: ChannelPostPolicy .administrators));
333
+ await tester.pump ();
334
+
335
+ await tapQuoteAndReplyButton (tester);
336
+ // no error
337
+ });
316
338
});
317
339
318
340
group ('in DM narrow' , () {
@@ -333,6 +355,27 @@ void main() {
333
355
checkSuccessState (store, contentController,
334
356
valueBefore: valueBefore, message: message, rawContent: 'Hello world' );
335
357
});
358
+
359
+ testWidgets ('no error if recipient was deactivated while raw-content request in progress' , (tester) async {
360
+ final message = eg.dmMessage (from: eg.selfUser, to: [eg.otherUser]);
361
+ await setupToMessageActionSheet (tester,
362
+ message: message,
363
+ narrow: DmNarrow .ofMessage (message, selfUserId: eg.selfUser.userId));
364
+
365
+ prepareRawContentResponseSuccess (
366
+ message: message,
367
+ rawContent: 'Hello world' ,
368
+ delay: const Duration (seconds: 5 ),
369
+ );
370
+ await tapQuoteAndReplyButton (tester);
371
+ await tester.pump (const Duration (seconds: 1 )); // message not yet fetched
372
+
373
+ await store.handleEvent (RealmUserUpdateEvent (id: 1 , userId: eg.otherUser.userId,
374
+ isActive: false ));
375
+ await tester.pump ();
376
+ // no error
377
+ await tester.pump (const Duration (seconds: 4 ));
378
+ });
336
379
});
337
380
338
381
testWidgets ('request has an error' , (tester) async {
0 commit comments