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); }); }); }