@@ -291,6 +291,66 @@ void main() {
291
291
expectedTagComponent: expectedTagComponent);
292
292
})));
293
293
294
+ test ('stream message: multiple messages, different topics' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
295
+ await init ();
296
+ final stream = eg.stream ();
297
+ const topicA = 'topic A' ;
298
+ const topicB = 'topic B' ;
299
+ final message1 = eg.streamMessage (topic: topicA, stream: stream);
300
+ final data1 = messageFcmMessage (message1, streamName: stream.name);
301
+ final message2 = eg.streamMessage (topic: topicB, stream: stream);
302
+ final data2 = messageFcmMessage (message2, streamName: stream.name);
303
+ final message3 = eg.streamMessage (topic: topicA, stream: stream);
304
+ final data3 = messageFcmMessage (message3, streamName: stream.name);
305
+
306
+ await receiveFcmMessage (async , data1);
307
+ checkNotification (data1,
308
+ messageStyleMessages: [data1],
309
+ expectedIsGroupConversation: true ,
310
+ expectedTitle: '#${stream .name } > $topicA ' ,
311
+ expectedTagComponent: 'stream:${stream .streamId }:$topicA ' );
312
+
313
+ await receiveFcmMessage (async , data2);
314
+ checkNotification (data2,
315
+ messageStyleMessages: [data2],
316
+ expectedIsGroupConversation: true ,
317
+ expectedTitle: '#${stream .name } > $topicB ' ,
318
+ expectedTagComponent: 'stream:${stream .streamId }:$topicB ' );
319
+
320
+ await receiveFcmMessage (async , data3);
321
+ checkNotification (data3,
322
+ messageStyleMessages: [data1, data3],
323
+ expectedIsGroupConversation: true ,
324
+ expectedTitle: '#${stream .name } > $topicA ' ,
325
+ expectedTagComponent: 'stream:${stream .streamId }:$topicA ' );
326
+ })));
327
+
328
+ test ('stream message: conversation stays same when stream is renamed' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
329
+ await init ();
330
+ var stream = eg.stream (streamId: 1 , name: 'Before' );
331
+ const topic = 'topic' ;
332
+ final message1 = eg.streamMessage (topic: topic, stream: stream);
333
+ final data1 = messageFcmMessage (message1, streamName: stream.name);
334
+
335
+ await receiveFcmMessage (async , data1);
336
+ checkNotification (data1,
337
+ messageStyleMessages: [data1],
338
+ expectedIsGroupConversation: true ,
339
+ expectedTitle: '#Before > $topic ' ,
340
+ expectedTagComponent: 'stream:${stream .streamId }:$topic ' );
341
+
342
+ stream = eg.stream (streamId: 1 , name: 'After' );
343
+ final message2 = eg.streamMessage (topic: topic, stream: stream);
344
+ final data2 = messageFcmMessage (message2, streamName: stream.name);
345
+
346
+ await receiveFcmMessage (async , data2);
347
+ checkNotification (data2,
348
+ messageStyleMessages: [data1, data2],
349
+ expectedIsGroupConversation: true ,
350
+ expectedTitle: '#After > $topic ' ,
351
+ expectedTagComponent: 'stream:${stream .streamId }:$topic ' );
352
+ })));
353
+
294
354
test ('stream message: stream name omitted' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
295
355
await init ();
296
356
final stream = eg.stream ();
@@ -320,6 +380,30 @@ void main() {
320
380
expectedTagComponent: 'dm:${message .allRecipientIds .join ("," )}' );
321
381
})));
322
382
383
+ test ('group DM: title updates with latest sender' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
384
+ await init ();
385
+ final message1 = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser, eg.thirdUser]);
386
+ final data1 = messageFcmMessage (message1);
387
+ final message2 = eg.dmMessage (from: eg.thirdUser, to: [eg.selfUser, eg.otherUser]);
388
+ final data2 = messageFcmMessage (message2);
389
+
390
+ final expectedTagComponent = 'dm:${message1 .allRecipientIds .join ("," )}' ;
391
+
392
+ await receiveFcmMessage (async , data1);
393
+ checkNotification (data1,
394
+ messageStyleMessages: [data1],
395
+ expectedIsGroupConversation: true ,
396
+ expectedTitle: "${eg .otherUser .fullName } to you and 1 other" ,
397
+ expectedTagComponent: expectedTagComponent);
398
+
399
+ await receiveFcmMessage (async , data2);
400
+ checkNotification (data2,
401
+ messageStyleMessages: [data1, data2],
402
+ expectedIsGroupConversation: true ,
403
+ expectedTitle: "${eg .thirdUser .fullName } to you and 1 other" ,
404
+ expectedTagComponent: expectedTagComponent);
405
+ })));
406
+
323
407
test ('1:1 DM' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
324
408
await init ();
325
409
final message = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser]);
@@ -329,6 +413,60 @@ void main() {
329
413
expectedTagComponent: 'dm:${message .allRecipientIds .join ("," )}' );
330
414
})));
331
415
416
+ test ('1:1 DM: title updates when sender name changes' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
417
+ await init ();
418
+ final otherUser = eg.user (fullName: 'Before' );
419
+ final message1 = eg.dmMessage (from: otherUser, to: [eg.selfUser]);
420
+ final data1 = messageFcmMessage (message1);
421
+
422
+ final expectedTagComponent = 'dm:${message1 .allRecipientIds .join ("," )}' ;
423
+
424
+ await receiveFcmMessage (async , data1);
425
+ checkNotification (data1,
426
+ messageStyleMessages: [data1],
427
+ expectedIsGroupConversation: false ,
428
+ expectedTitle: 'Before' ,
429
+ expectedTagComponent: expectedTagComponent);
430
+
431
+ otherUser.fullName = 'After' ;
432
+ final message2 = eg.dmMessage (from: otherUser, to: [eg.selfUser]);
433
+ final data2 = messageFcmMessage (message2);
434
+
435
+ await receiveFcmMessage (async , data2);
436
+ checkNotification (data2,
437
+ messageStyleMessages: [data1, data2],
438
+ expectedIsGroupConversation: false ,
439
+ expectedTitle: 'After' ,
440
+ expectedTagComponent: expectedTagComponent);
441
+ })));
442
+
443
+ test ('1:1 DM: conversation stays same when sender email changes' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
444
+ await init ();
445
+ final otherUser
= eg.
user (email
: '[email protected] ' );
446
+ final message1 = eg.dmMessage (from: otherUser, to: [eg.selfUser]);
447
+ final data1 = messageFcmMessage (message1);
448
+
449
+ final expectedTagComponent = 'dm:${message1 .allRecipientIds .join ("," )}' ;
450
+
451
+ await receiveFcmMessage (async , data1);
452
+ checkNotification (data1,
453
+ messageStyleMessages: [data1],
454
+ expectedIsGroupConversation: false ,
455
+ expectedTitle: otherUser.fullName,
456
+ expectedTagComponent: expectedTagComponent);
457
+
458
+ otherUser.email
= '[email protected] ' ;
459
+ final message2 = eg.dmMessage (from: otherUser, to: [eg.selfUser]);
460
+ final data2 = messageFcmMessage (message2);
461
+
462
+ await receiveFcmMessage (async , data2);
463
+ checkNotification (data2,
464
+ messageStyleMessages: [data1, data2],
465
+ expectedIsGroupConversation: false ,
466
+ expectedTitle: otherUser.fullName,
467
+ expectedTagComponent: expectedTagComponent);
468
+ })));
469
+
332
470
test ('1:1 DM: sender avatar loading fails, remote error' , () => runWithHttpClient (
333
471
() => awaitFakeAsync ((async ) async {
334
472
await init ();
0 commit comments