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