refactor(chat): 重构聊天模块并集成历史消息加载功能
- 删除冗余的 chat_history_repository 和 home_mock_data - 简化 ag_ui_event fromJson 使用工厂映射表 - 提取 ChatBloc 事件处理方法,添加 loadHistory/loadMoreHistory - HomeScreen 集成 ChatBloc 实现历史消息加载和下拉刷新 - 更新 AGENTS.md 文档约束
This commit is contained in:
@@ -2,51 +2,33 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:lucide_icons/lucide_icons.dart';
|
||||
import 'package:social_app/features/home/ui/screens/home_screen.dart';
|
||||
import 'package:social_app/shared/widgets/chat_bubble.dart';
|
||||
|
||||
void main() {
|
||||
group('HomeScreen Widget Tests', () {
|
||||
testWidgets('displays chat messages with ChatBubble', (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await tester.pumpWidget(const MaterialApp(home: HomeScreen()));
|
||||
|
||||
expect(find.byType(ChatBubble), findsAtLeastNWidgets(1));
|
||||
});
|
||||
|
||||
testWidgets('displays user request message', (WidgetTester tester) async {
|
||||
await tester.pumpWidget(const MaterialApp(home: HomeScreen()));
|
||||
|
||||
expect(find.textContaining('明天提醒我开会'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('displays AI response message', (WidgetTester tester) async {
|
||||
await tester.pumpWidget(const MaterialApp(home: HomeScreen()));
|
||||
|
||||
expect(find.textContaining('已为你创建日程'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('displays calendar schedule cards in chat flow', (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await tester.pumpWidget(const MaterialApp(home: HomeScreen()));
|
||||
|
||||
expect(find.byType(ChatBubble), findsAtLeastNWidgets(2));
|
||||
});
|
||||
|
||||
testWidgets('input field is present', (WidgetTester tester) async {
|
||||
testWidgets('displays input field', (WidgetTester tester) async {
|
||||
await tester.pumpWidget(const MaterialApp(home: HomeScreen()));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.byType(TextField), findsOneWidget);
|
||||
expect(find.text('输入消息...'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('header icons are present', (WidgetTester tester) async {
|
||||
testWidgets('displays header icons', (WidgetTester tester) async {
|
||||
await tester.pumpWidget(const MaterialApp(home: HomeScreen()));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.byIcon(LucideIcons.settings), findsOneWidget);
|
||||
expect(find.byIcon(LucideIcons.calendar), findsOneWidget);
|
||||
expect(find.byIcon(LucideIcons.messageSquare), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('displays send or mic icon based on input', (
|
||||
WidgetTester tester,
|
||||
) async {
|
||||
await tester.pumpWidget(const MaterialApp(home: HomeScreen()));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.byIcon(LucideIcons.mic), findsOneWidget);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user