Skip to content

Commit dcdc491

Browse files
PIG208gnprice
authored andcommitted
submessage test [nfc]: Extract pollWidgetData.
The goal is to make the relevant context of the test data local to the tests, and keep the example data as boring as possible. We also combine the smoke test into the test for invalid widget types, contrasting it with the failing cases. Signed-off-by: Zixuan James Li <[email protected]>
1 parent 2d41e66 commit dcdc491

File tree

3 files changed

+24
-16
lines changed

3 files changed

+24
-16
lines changed

lib/api/model/submessage.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ enum SubmessageType {
6565
/// * Zero or more submessages with content [PollEventSubmessage] if the
6666
/// message is a poll (i.e. if the first submessage was a [PollWidgetData]),
6767
/// and similarly for other types of widgets.
68-
sealed class SubmessageData {}
68+
sealed class SubmessageData {
69+
Object? toJson();
70+
}
6971

7072
/// The data encoded in a submessage to make the message a Zulip widget.
7173
///
@@ -87,6 +89,7 @@ sealed class WidgetData extends SubmessageData {
8789
};
8890
}
8991

92+
@override
9093
Object? toJson();
9194
}
9295

@@ -188,6 +191,7 @@ sealed class PollEventSubmessage extends SubmessageData {
188191
}
189192
}
190193

194+
@override
191195
Map<String, Object?> toJson();
192196
}
193197

test/api/model/submessage_test.dart

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:test/scaffolding.dart';
33
import 'package:zulip/api/model/submessage.dart';
44

55
import '../../example_data.dart' as eg;
6+
import '../../stdlib_checks.dart';
67
import 'submessage_checks.dart';
78

89
void main() {
@@ -27,23 +28,25 @@ void main() {
2728
});
2829
});
2930

30-
test('smoke WidgetData', () {
31-
check(WidgetData.fromJson(eg.pollWidgetDataFavoriteLetter)).isA<PollWidgetData>()
31+
test('invalid widget_type -> UnsupportedWidgetData/throw', () {
32+
final pollWidgetData = deepToJson(eg.pollWidgetData(
33+
question: 'example question',
34+
options: ['A', 'B', 'C'],
35+
)) as Map<String, Object?>;
36+
37+
check(WidgetData.fromJson(pollWidgetData)).isA<PollWidgetData>()
3238
..widgetType.equals(WidgetType.poll)
3339
..extraData.which((x) => x
34-
..question.equals('favorite letter')
40+
..question.equals('example question')
3541
..options.deepEquals(['A', 'B', 'C'])
3642
);
37-
});
38-
39-
test('invalid widget_type -> UnsupportedWidgetData/throw', () {
4043
check(WidgetData.fromJson({
41-
...eg.pollWidgetDataFavoriteLetter,
44+
...pollWidgetData,
4245
'widget_type': 'unknown_foo',
4346
})).isA<UnsupportedWidgetData>();
4447

4548
check(() => WidgetData.fromJson({
46-
...eg.pollWidgetDataFavoriteLetter,
49+
...pollWidgetData,
4750
'widget_type': 123,
4851
})).throws<TypeError>();
4952
});

test/example_data.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'dart:math';
33
import 'package:zulip/api/model/events.dart';
44
import 'package:zulip/api/model/initial_snapshot.dart';
55
import 'package:zulip/api/model/model.dart';
6+
import 'package:zulip/api/model/submessage.dart';
67
import 'package:zulip/api/route/realm.dart';
78
import 'package:zulip/api/route/channels.dart';
89
import 'package:zulip/model/narrow.dart';
@@ -405,13 +406,13 @@ DmMessage dmMessage({
405406
}) as Map<String, dynamic>);
406407
}
407408

408-
const pollWidgetDataFavoriteLetter = {
409-
'widget_type': 'poll',
410-
'extra_data': {
411-
'question': 'favorite letter',
412-
'options': ['A', 'B', 'C'],
413-
}
414-
};
409+
PollWidgetData pollWidgetData({
410+
required String question,
411+
required List<String> options,
412+
}) {
413+
return PollWidgetData(
414+
extraData: PollWidgetExtraData(question: question, options: options));
415+
}
415416

416417
////////////////////////////////////////////////////////////////
417418
// Aggregate data structures.

0 commit comments

Comments
 (0)