133 lines
4.0 KiB
Dart
133 lines
4.0 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:social_app/features/chat/ui/widgets/ui_schema_renderer.dart';
|
|
|
|
void main() {
|
|
group('UiSchemaRenderer', () {
|
|
testWidgets('renders stack title and badge', (tester) async {
|
|
final schema = {
|
|
'version': '2.0',
|
|
'locale': 'zh-CN',
|
|
'status': 'success',
|
|
'theme': 'default',
|
|
'root': {
|
|
'type': 'stack',
|
|
'direction': 'vertical',
|
|
'appearance': 'card',
|
|
'children': [
|
|
{'type': 'text', 'role': 'title', 'content': '日程已创建'},
|
|
{'type': 'badge', 'label': 'SUCCESS', 'status': 'success'},
|
|
],
|
|
},
|
|
};
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Scaffold(body: UiSchemaRenderer.renderSchema(schema)),
|
|
),
|
|
);
|
|
|
|
expect(find.text('日程已创建'), findsOneWidget);
|
|
expect(find.text('SUCCESS'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('renders kv node values', (tester) async {
|
|
final schema = {
|
|
'version': '2.0',
|
|
'root': {
|
|
'type': 'stack',
|
|
'direction': 'vertical',
|
|
'appearance': 'card',
|
|
'children': [
|
|
{
|
|
'type': 'kv',
|
|
'items': [
|
|
{'key': 'title', 'label': '标题', 'value': '评审会'},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
};
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Scaffold(body: UiSchemaRenderer.renderSchema(schema)),
|
|
),
|
|
);
|
|
|
|
expect(find.text('标题'), findsOneWidget);
|
|
expect(find.text('评审会'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('renders batch result list items in one card', (tester) async {
|
|
final schema = {
|
|
'version': '2.0',
|
|
'root': {
|
|
'type': 'stack',
|
|
'direction': 'vertical',
|
|
'appearance': 'card',
|
|
'status': 'warning',
|
|
'children': [
|
|
{'type': 'text', 'role': 'title', 'content': '日历操作完成'},
|
|
{
|
|
'type': 'stack',
|
|
'direction': 'vertical',
|
|
'gap': 8,
|
|
'children': [
|
|
{
|
|
'type': 'stack',
|
|
'direction': 'vertical',
|
|
'appearance': 'card',
|
|
'children': [
|
|
{'type': 'text', 'role': 'body', 'content': '#1 create'},
|
|
{'type': 'text', 'role': 'caption', 'content': '成功'},
|
|
{'type': 'text', 'role': 'caption', 'content': '日程「晨会」已创建'},
|
|
],
|
|
},
|
|
{
|
|
'type': 'stack',
|
|
'direction': 'vertical',
|
|
'appearance': 'card',
|
|
'children': [
|
|
{'type': 'text', 'role': 'body', 'content': '#2 delete'},
|
|
{'type': 'text', 'role': 'caption', 'content': '失败'},
|
|
{
|
|
'type': 'text',
|
|
'role': 'caption',
|
|
'content': 'Schedule item not found',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
};
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Scaffold(body: UiSchemaRenderer.renderSchema(schema)),
|
|
),
|
|
);
|
|
|
|
expect(find.text('日历操作完成'), findsOneWidget);
|
|
expect(find.text('#1 create'), findsOneWidget);
|
|
expect(find.text('#2 delete'), findsOneWidget);
|
|
expect(find.text('成功'), findsOneWidget);
|
|
expect(find.text('失败'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('renders fallback for invalid schema', (tester) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: Scaffold(
|
|
body: UiSchemaRenderer.renderSchema({'version': '2.0'}),
|
|
),
|
|
),
|
|
);
|
|
|
|
expect(find.textContaining('无效 UI Schema'), findsOneWidget);
|
|
});
|
|
});
|
|
}
|