test: 更新 AgentScope 相关单元测试与集成测试
- 重命名 test_react_runner.py 为 test_runner.py - 新增 test_utils.py 测试工具函数 - 更新现有测试用例适配新架构
This commit is contained in:
@@ -1,226 +1,74 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:social_app/features/chat/data/models/tool_result.dart';
|
||||
import 'package:social_app/features/chat/ui/widgets/ui_schema_renderer.dart';
|
||||
|
||||
void main() {
|
||||
group('UiSchemaRenderer', () {
|
||||
testWidgets('calendar_card.v1 renders title', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_card.v1',
|
||||
data: CalendarCardData(
|
||||
id: 'evt_001',
|
||||
title: 'Team Meeting',
|
||||
startAt: '2026-03-01T10:00:00Z',
|
||||
).toJson(),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.text('Team Meeting'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('calendar_card.v1 renders time', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_card.v1',
|
||||
data: CalendarCardData(
|
||||
id: 'evt_001',
|
||||
title: 'Meeting',
|
||||
startAt: '2026-03-01T10:00:00Z',
|
||||
endAt: '2026-03-01T11:30:00Z',
|
||||
).toJson(),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.textContaining('3月1日'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('calendar_card.v1 renders location', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_card.v1',
|
||||
data: CalendarCardData(
|
||||
id: 'evt_001',
|
||||
title: 'Meeting',
|
||||
startAt: '2026-03-01T10:00:00Z',
|
||||
location: 'Room 101',
|
||||
).toJson(),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.text('Room 101'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('calendar_card.v1 renders description', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_card.v1',
|
||||
data: CalendarCardData(
|
||||
id: 'evt_001',
|
||||
title: 'Meeting',
|
||||
startAt: '2026-03-01T10:00:00Z',
|
||||
description: 'Quarterly review',
|
||||
).toJson(),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.text('Quarterly review'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('calendar_card.v1 renders AI generated tag', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_card.v1',
|
||||
data: CalendarCardData(
|
||||
id: 'evt_001',
|
||||
title: 'Meeting',
|
||||
startAt: '2026-03-01T10:00:00Z',
|
||||
sourceType: 'ai_generated',
|
||||
).toJson(),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.text('AI生成'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('calendar_card.v1 renders agent generated tag', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_card.v1',
|
||||
data: CalendarCardData(
|
||||
id: 'evt_001',
|
||||
title: 'Meeting',
|
||||
startAt: '2026-03-01T10:00:00Z',
|
||||
sourceType: 'agent_generated',
|
||||
).toJson(),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.text('AI生成'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('calendar_event_list.v1 renders list items', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_event_list.v1',
|
||||
data: {
|
||||
'items': [
|
||||
{'id': 'evt_1', 'title': '晨会'},
|
||||
{'id': 'evt_2', 'title': '评审'},
|
||||
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'},
|
||||
],
|
||||
'pagination': {'page': 1, 'total': 2},
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
MaterialApp(
|
||||
home: Scaffold(body: UiSchemaRenderer.renderSchema(schema)),
|
||||
),
|
||||
);
|
||||
|
||||
expect(find.text('日程列表'), findsOneWidget);
|
||||
expect(find.text('晨会'), findsOneWidget);
|
||||
expect(find.text('评审'), findsOneWidget);
|
||||
expect(find.text('日程已创建'), findsOneWidget);
|
||||
expect(find.text('SUCCESS'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('calendar_operation.v1 renders operation message', (
|
||||
tester,
|
||||
) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_operation.v1',
|
||||
data: {'operation': 'delete', 'ok': true, 'message': '日程已删除'},
|
||||
);
|
||||
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.render(card))),
|
||||
MaterialApp(
|
||||
home: Scaffold(body: UiSchemaRenderer.renderSchema(schema)),
|
||||
),
|
||||
);
|
||||
|
||||
expect(find.text('日程delete结果'), findsOneWidget);
|
||||
expect(find.text('日程已删除'), findsOneWidget);
|
||||
expect(find.text('标题'), findsOneWidget);
|
||||
expect(find.text('评审会'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('error_card.v1 renders error message', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'error_card.v1',
|
||||
data: {'message': 'Something went wrong'},
|
||||
);
|
||||
|
||||
testWidgets('renders fallback for invalid schema', (tester) async {
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
MaterialApp(
|
||||
home: Scaffold(
|
||||
body: UiSchemaRenderer.renderSchema({'version': '2.0'}),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(find.text('Something went wrong'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('error_card.v1 renders default message when missing', (
|
||||
tester,
|
||||
) async {
|
||||
final card = UiCard(cardType: 'error_card.v1', data: {});
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.text('发生错误'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('unknown card type renders fallback', (tester) async {
|
||||
final card = UiCard(cardType: 'unknown_type', data: {'foo': 'bar'});
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.textContaining('未知卡片类型'), findsOneWidget);
|
||||
expect(find.textContaining('unknown_type'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('calendar_card.v1 renders actions', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_card.v1',
|
||||
data: CalendarCardData(
|
||||
id: 'evt_001',
|
||||
title: 'Meeting',
|
||||
startAt: '2026-03-01T10:00:00Z',
|
||||
).toJson(),
|
||||
actions: [
|
||||
CardAction(type: 'link', label: '查看详情', target: '/calendar/evt_001'),
|
||||
],
|
||||
);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.text('查看详情'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('calendar_card.v1 renders custom color', (tester) async {
|
||||
final card = UiCard(
|
||||
cardType: 'calendar_card.v1',
|
||||
data: CalendarCardData(
|
||||
id: 'evt_001',
|
||||
title: 'Meeting',
|
||||
startAt: '2026-03-01T10:00:00Z',
|
||||
color: '#FF0000',
|
||||
).toJson(),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(home: Scaffold(body: UiSchemaRenderer.render(card))),
|
||||
);
|
||||
|
||||
expect(find.text('Meeting'), findsOneWidget);
|
||||
expect(find.textContaining('无效 UI Schema'), findsOneWidget);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user