@@ -25,6 +25,50 @@ import '../widgets/message_list_checks.dart';
25
25
import '../widgets/page_checks.dart' ;
26
26
import 'display_test.dart' ;
27
27
28
+ Map <String , Object ?> messageApnsPayload (
29
+ Message zulipMessage, {
30
+ String ? streamName,
31
+ Account ? account,
32
+ }) {
33
+ account ?? = eg.selfAccount;
34
+ return {
35
+ "aps" : {
36
+ "alert" : {
37
+ "title" : "test" ,
38
+ "subtitle" : "test" ,
39
+ "body" : zulipMessage.content,
40
+ },
41
+ "sound" : "default" ,
42
+ "badge" : 0 ,
43
+ },
44
+ "zulip" : {
45
+ "server" : "zulip.example.cloud" ,
46
+ "realm_id" : 4 ,
47
+ "realm_uri" : account.realmUrl.toString (),
48
+ "realm_url" : account.realmUrl.toString (),
49
+ "realm_name" : "Test" ,
50
+ "user_id" : account.userId,
51
+ "sender_id" : zulipMessage.senderId,
52
+ "sender_email" : zulipMessage.senderEmail,
53
+ "time" : zulipMessage.timestamp,
54
+ "message_ids" : [zulipMessage.id],
55
+ ...(switch (zulipMessage) {
56
+ StreamMessage (: var streamId, : var topic) => {
57
+ "recipient_type" : "stream" ,
58
+ "stream_id" : streamId,
59
+ if (streamName != null ) "stream" : streamName,
60
+ "topic" : topic,
61
+ },
62
+ DmMessage (allRecipientIds: [_, _, _, ...]) => {
63
+ "recipient_type" : "private" ,
64
+ "pm_users" : zulipMessage.allRecipientIds.join ("," ),
65
+ },
66
+ DmMessage () => {"recipient_type" : "private" },
67
+ }),
68
+ },
69
+ };
70
+ }
71
+
28
72
void main () {
29
73
TestZulipBinding .ensureInitialized ();
30
74
final zulipLocalizations = GlobalLocalizations .zulipLocalizations;
@@ -262,7 +306,7 @@ void main() {
262
306
});
263
307
264
308
group ('NotificationOpenPayload' , () {
265
- test ('smoke round-trip' , () {
309
+ test ('android: smoke round-trip' , () {
266
310
// DM narrow
267
311
var payload = NotificationOpenPayload (
268
312
realmUrl: Uri .parse ('http://chat.example' ),
@@ -288,6 +332,56 @@ void main() {
288
332
..narrow.equals (payload.narrow);
289
333
});
290
334
335
+ group ('parseIosApnsPayload' , () {
336
+ test ('smoke one-one DM' , () {
337
+ final userA = eg.user (userId: 1001 );
338
+ final userB = eg.user (userId: 1002 );
339
+ final account = eg.account (
340
+ realmUrl: Uri .parse ('http://chat.example' ),
341
+ user: userA);
342
+ final payload = messageApnsPayload (eg.dmMessage (from: userB, to: [userA]),
343
+ account: account);
344
+ check (NotificationOpenPayload .parseIosApnsPayload (payload))
345
+ ..realmUrl.equals (Uri .parse ('http://chat.example' ))
346
+ ..userId.equals (1001 )
347
+ ..narrow.which ((it) => it.isA <DmNarrow >()
348
+ ..otherRecipientIds.deepEquals ([1002 ]));
349
+ });
350
+
351
+ test ('smoke group DM' , () {
352
+ final userA = eg.user (userId: 1001 );
353
+ final userB = eg.user (userId: 1002 );
354
+ final userC = eg.user (userId: 1003 );
355
+ final account = eg.account (
356
+ realmUrl: Uri .parse ('http://chat.example' ),
357
+ user: userA);
358
+ final payload = messageApnsPayload (eg.dmMessage (from: userC, to: [userA, userB]),
359
+ account: account);
360
+ check (NotificationOpenPayload .parseIosApnsPayload (payload))
361
+ ..realmUrl.equals (Uri .parse ('http://chat.example' ))
362
+ ..userId.equals (1001 )
363
+ ..narrow.which ((it) => it.isA <DmNarrow >()
364
+ ..otherRecipientIds.deepEquals ([1002 , 1003 ]));
365
+ });
366
+
367
+ test ('smoke topic message' , () {
368
+ final userA = eg.user (userId: 1001 );
369
+ final account = eg.account (
370
+ realmUrl: Uri .parse ('http://chat.example' ),
371
+ user: userA);
372
+ final payload = messageApnsPayload (eg.streamMessage (
373
+ stream: eg.stream (streamId: 1 ),
374
+ topic: 'topic A' ),
375
+ account: account);
376
+ check (NotificationOpenPayload .parseIosApnsPayload (payload))
377
+ ..realmUrl.equals (Uri .parse ('http://chat.example' ))
378
+ ..userId.equals (1001 )
379
+ ..narrow.which ((it) => it.isA <TopicNarrow >()
380
+ ..streamId.equals (1 )
381
+ ..topic.equals (TopicName ('topic A' )));
382
+ });
383
+ });
384
+
291
385
group ('buildAndroidNotificationUrl' , () {
292
386
test ('smoke DM' , () {
293
387
final url = NotificationOpenPayload (
0 commit comments