import 'package:eatvio_app/features/menu/presentation/bloc/menu_cubit/menu_cubit.dart'; import 'package:eatvio_app/features/menu/presentation/bloc/menu_cubit/menu_state.dart'; import 'package:eatvio_app/features/profile/repositories/profile_repository.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'menu_cubit_test.mocks.dart'; @GenerateNiceMocks([MockSpec()]) void main() { group('MenuCubit', () { MenuCubit? menuCubit; late MockProfileRepository mockProfileRepository; setUp(() { mockProfileRepository = MockProfileRepository(); }); tearDown(() async { if (menuCubit != null && !menuCubit!.isClosed) { await Future.delayed(const Duration(milliseconds: 100)); menuCubit!.close(); menuCubit = null; } }); test('начальное состояние - MenuState', () { menuCubit = MenuCubit(mockProfileRepository); expect(menuCubit!.state, isA()); }); test('makePassKey - успешно создает passKey', () async { menuCubit = MenuCubit(mockProfileRepository); const expectedPassKey = 'test-pass-key'; when(mockProfileRepository.getPassKey( routeName: 'product_nutritional_value.index', routeParams: {}, )).thenAnswer((_) async => expectedPassKey); final result = await menuCubit!.makePassKey(); expect(result, expectedPassKey); verify(mockProfileRepository.getPassKey( routeName: 'product_nutritional_value.index', routeParams: {}, )).called(1); }); test('makePassKey - возвращает null при ошибке', () async { menuCubit = MenuCubit(mockProfileRepository); when(mockProfileRepository.getPassKey( routeName: 'product_nutritional_value.index', routeParams: {}, )).thenThrow(Exception('Ошибка получения passKey')); final result = await menuCubit!.makePassKey(); expect(result, isNull); verify(mockProfileRepository.getPassKey( routeName: 'product_nutritional_value.index', routeParams: {}, )).called(1); }); }); }