import 'package:eatvio_app/core/app_config.dart'; import 'package:eatvio_app/core/app_initializer.dart'; import 'package:eatvio_app/core/locator_service.dart'; import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:eatvio_app/features/registration/models/user_registration_model.dart'; import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart'; import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_state.dart'; import 'package:eatvio_app/features/registration/presentation/pages/credentials_screen.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'credentials_screen_test.mocks.dart'; @GenerateNiceMocks([MockSpec()]) void main() { group('CredentialsScreen smoke', () { setUpAll(() async { dotenv.loadFromString(envString: 'DEV_BASE_URL=http://localhost\nBASE_URL=http://localhost'); }); setUp(() async { await sl.reset(); sl.registerLazySingleton(() => AppConfig(buildType: AppBuildType.tests)..setBaseUrl('http://localhost')); }); const mockSheet = UserRegistrationSheet( firstName: 'Test', lastName: 'User', email: 'test@test.com', phone: '+1234567890', password: 'password', passwordConfirmation: 'password', birthdate: '1990-01-01', gender: 'male', location: 'Moscow, Russia', responseBody: '{}', lang: 'Русский', weight: 70, height: 175, chestCircumference: 90, waistCircumference: 80, hipCircumference: 95, bloodPressureUp: 120, bloodPressureDown: 80, hasHypo: 0, hasHyper: 0, aboutAllergy: '', aboutTakingPils: '', aboutSportHobbies: '', favoriteFoods: '', unfavoriteFoods: '', additionalInfo: '', ); Widget wrap(Widget child) { return MaterialApp( theme: ThemeHelper().themeData(), localizationsDelegates: const [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [Locale('ru')], home: Scaffold(body: child), ); } testWidgets('renders credentials screen', (tester) async { final cubit = MockRegistrationCubit(); const state = RegistrationState(sheet: mockSheet); when(cubit.state).thenReturn(state); when(cubit.stream).thenAnswer((_) => Stream.value(state)); when(cubit.close()).thenAnswer((_) async => Future.value()); when(cubit.updateSheet(any)).thenReturn(null); await tester.pumpWidget( BlocProvider.value( value: cubit, child: wrap(const CredentialsScreen(sheet: mockSheet)), ), ); await tester.pump(); await tester.pump(const Duration(milliseconds: 100)); expect(find.byType(CredentialsScreen), findsOneWidget); }); }); }