Skip to content

Commit e6bad69

Browse files
committed
api: Add ReactionOp.unknown
1 parent cce7d5b commit e6bad69

5 files changed

Lines changed: 39 additions & 1 deletion

File tree

lib/api/model/events.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1727,6 +1727,7 @@ class ReactionEvent extends Event {
17271727
@JsonKey(includeToJson: true)
17281728
String get type => 'reaction';
17291729

1730+
@JsonKey(unknownEnumValue: ReactionOp.unknown)
17301731
final ReactionOp op;
17311732

17321733
final String emojiName;
@@ -1758,6 +1759,9 @@ class ReactionEvent extends Event {
17581759
enum ReactionOp {
17591760
add,
17601761
remove,
1762+
1763+
/// A new, unrecognized operation.
1764+
unknown;
17611765
}
17621766

17631767
/// A Zulip event of type `heartbeat`: https://zulip.com/api/get-events#heartbeat

lib/api/model/events.g.dart

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/model/message.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,8 @@ class MessageStoreImpl extends HasChannelStore with MessageStore, _OutboxMessage
832832
}
833833

834834
void handleReactionEvent(ReactionEvent event) {
835+
if (event.op == .unknown) return;
836+
835837
final message = messages[event.messageId];
836838
if (message == null) return;
837839

@@ -852,6 +854,8 @@ class MessageStoreImpl extends HasChannelStore with MessageStore, _OutboxMessage
852854
emojiCode: event.emojiCode,
853855
userId: event.userId,
854856
);
857+
case .unknown:
858+
// Shouldn't reach here because of the early return.
855859
}
856860
_notifyMessageListViewsForOneMessage(event.messageId);
857861
}

test/api/model/events_checks.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ extension TypingEventChecks on Subject<TypingEvent> {
9393
Subject<TopicName?> get topic => has((e) => e.topic, 'topic');
9494
}
9595

96+
extension ReactionEventChecks on Subject<ReactionEvent> {
97+
Subject<ReactionOp> get op => has((e) => e.op, 'op');
98+
}
99+
96100
extension HeartbeatEventChecks on Subject<HeartbeatEvent> {
97101
// No properties not covered by Event.
98102
}

test/api/model/events_test.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,4 +423,25 @@ void main() {
423423
})).recipientIds.isNotNull().deepEquals([1, 2, 4, 8, 10]);
424424
});
425425
});
426+
427+
group('reaction event', () {
428+
final json = Map<String, dynamic>.unmodifiable({
429+
'id': 1,
430+
'type': 'reaction',
431+
'op': 'add',
432+
'emoji_name': '+1',
433+
'emoji_code': '1f44d',
434+
'reaction_type': 'unicode_emoji',
435+
'user_id': 100,
436+
'message_id': 1000,
437+
});
438+
439+
test('handle unknown op', () {
440+
check(ReactionEvent.fromJson(json)).op.equals(.add);
441+
442+
for (final unknown in ['unknown_op', '']) {
443+
check(ReactionEvent.fromJson({...json, 'op': unknown})).op.equals(.unknown);
444+
}
445+
});
446+
});
426447
}

0 commit comments

Comments
 (0)