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