@@ -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;
@@ -249,7 +293,7 @@ void main() {
249
293
});
250
294
251
295
group ('NotificationOpenPayload' , () {
252
- test ('smoke round-trip' , () {
296
+ test ('android: smoke round-trip' , () {
253
297
// DM narrow
254
298
var payload = NotificationOpenPayload (
255
299
realmUrl: Uri .parse ('http://chat.example' ),
@@ -275,6 +319,56 @@ void main() {
275
319
..narrow.equals (payload.narrow);
276
320
});
277
321
322
+ group ('parseIosApnsPayload' , () {
323
+ test ('smoke one-one DM' , () {
324
+ final userA = eg.user (userId: 1001 );
325
+ final userB = eg.user (userId: 1002 );
326
+ final account = eg.account (
327
+ realmUrl: Uri .parse ('http://chat.example' ),
328
+ user: userA);
329
+ final payload = messageApnsPayload (eg.dmMessage (from: userB, to: [userA]),
330
+ account: account);
331
+ check (NotificationOpenPayload .parseIosApnsPayload (payload))
332
+ ..realmUrl.equals (Uri .parse ('http://chat.example' ))
333
+ ..userId.equals (1001 )
334
+ ..narrow.which ((it) => it.isA <DmNarrow >()
335
+ ..otherRecipientIds.deepEquals ([1002 ]));
336
+ });
337
+
338
+ test ('smoke group DM' , () {
339
+ final userA = eg.user (userId: 1001 );
340
+ final userB = eg.user (userId: 1002 );
341
+ final userC = eg.user (userId: 1003 );
342
+ final account = eg.account (
343
+ realmUrl: Uri .parse ('http://chat.example' ),
344
+ user: userA);
345
+ final payload = messageApnsPayload (eg.dmMessage (from: userC, to: [userA, userB]),
346
+ account: account);
347
+ check (NotificationOpenPayload .parseIosApnsPayload (payload))
348
+ ..realmUrl.equals (Uri .parse ('http://chat.example' ))
349
+ ..userId.equals (1001 )
350
+ ..narrow.which ((it) => it.isA <DmNarrow >()
351
+ ..otherRecipientIds.deepEquals ([1002 , 1003 ]));
352
+ });
353
+
354
+ test ('smoke topic message' , () {
355
+ final userA = eg.user (userId: 1001 );
356
+ final account = eg.account (
357
+ realmUrl: Uri .parse ('http://chat.example' ),
358
+ user: userA);
359
+ final payload = messageApnsPayload (eg.streamMessage (
360
+ stream: eg.stream (streamId: 1 ),
361
+ topic: 'topic A' ),
362
+ account: account);
363
+ check (NotificationOpenPayload .parseIosApnsPayload (payload))
364
+ ..realmUrl.equals (Uri .parse ('http://chat.example' ))
365
+ ..userId.equals (1001 )
366
+ ..narrow.which ((it) => it.isA <TopicNarrow >()
367
+ ..streamId.equals (1 )
368
+ ..topic.equals (TopicName ('topic A' )));
369
+ });
370
+ });
371
+
278
372
group ('buildAndroidNotificationUrl' , () {
279
373
test ('smoke DM' , () {
280
374
final url = NotificationOpenPayload (
0 commit comments