import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_app/core/network/api_repository.dart'; import 'package:flutter_app/features/chat/presentation/cubit/chat_cubit.dart'; import 'package:flutter_app/features/chat/presentation/cubit/chat_state.dart'; class _VersionTestApi extends ApiRepository { _VersionTestApi() : super(baseUrl: 'http://127.0.0.1:8000'); final responses = >[ ['الجواب الأول'], ['الجواب الثاني'], ]; SavedConversation? lastSaved; @override Future getModelName() async => 'gemma4:e2b'; @override Future> getAvailableModels() async => ['gemma4:e2b']; @override Future> listConversations() async => []; @override Future saveConversation(SavedConversation conversation) async { lastSaved = conversation; } @override Stream completeStream( List messages, { String? model, }) => Stream.fromIterable(responses.removeAt(0)); } void main() { test('regeneration keeps prior answers and selection is persisted', () async { final api = _VersionTestApi(); final cubit = ChatCubit(api); await Future.delayed(Duration.zero); await cubit.send('ما معنى API؟'); expect(cubit.state.messages.last.answerVersions, ['الجواب الأول']); await cubit.regenerateLastAnswer(); expect(cubit.state.messages.last.text, 'الجواب الثاني'); expect(cubit.state.messages.last.answerVersions, ['الجواب الأول', 'الجواب الثاني']); expect(cubit.state.messages.last.selectedVersion, 1); await cubit.selectAnswerVersion(1, 0); expect(cubit.state.messages.last.text, 'الجواب الأول'); expect(cubit.state.messages.last.selectedVersion, 0); expect(api.lastSaved?.messages.last.answerVersions, ['الجواب الأول', 'الجواب الثاني']); expect(api.lastSaved?.messages.last.selectedVersion, 0); await cubit.close(); }); }