Skip to content

Commit cd49fcf

Browse files
committed
api: Ensure DeleteMessageEvent.{streamId,topic} present when stream message
1 parent 31ab506 commit cd49fcf

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

lib/api/model/events.dart

+9-2
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,15 @@ class DeleteMessageEvent extends Event {
438438
this.topic,
439439
});
440440

441-
factory DeleteMessageEvent.fromJson(Map<String, dynamic> json) =>
442-
_$DeleteMessageEventFromJson(json);
441+
factory DeleteMessageEvent.fromJson(Map<String, dynamic> json) {
442+
final result = _$DeleteMessageEventFromJson(json);
443+
// Crunchy-shell validation
444+
if (result.messageType == MessageType.stream) {
445+
result.streamId as int;
446+
result.topic as String;
447+
}
448+
return result;
449+
}
443450

444451
@override
445452
Map<String, dynamic> toJson() => _$DeleteMessageEventToJson(this);

test/api/model/events_test.dart

+32
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,38 @@ void main() {
4343
check(mkEvent([MessageFlag.read])).message.flags.deepEquals([MessageFlag.read]);
4444
});
4545

46+
test('delete_message: require streamId and topic for stream messages', () {
47+
check(() => DeleteMessageEvent.fromJson({
48+
'id': 1,
49+
'type': 'delete_message',
50+
'message_ids': [1, 2, 3],
51+
'message_type': 'private',
52+
})).returnsNormally();
53+
54+
final baseJsonStream = {
55+
'id': 1,
56+
'type': 'delete_message',
57+
'message_ids': [1, 2, 3],
58+
'message_type': 'stream',
59+
};
60+
61+
check(() => DeleteMessageEvent.fromJson({
62+
...baseJsonStream
63+
})).throws();
64+
65+
check(() => DeleteMessageEvent.fromJson({
66+
...baseJsonStream, 'stream_id': 1, 'topic': 'some topic',
67+
})).returnsNormally();
68+
69+
check(() => DeleteMessageEvent.fromJson({
70+
...baseJsonStream, 'stream_id': 1,
71+
})).throws();
72+
73+
check(() => DeleteMessageEvent.fromJson({
74+
...baseJsonStream, 'topic': 'some topic',
75+
})).throws();
76+
});
77+
4678
test('update_message_flags/remove: require messageDetails in mark-as-unread', () {
4779
final baseJson = {
4880
'id': 1,

0 commit comments

Comments
 (0)