From 228ea7c9025372fe3d2a044012cc46956ba32ffb Mon Sep 17 00:00:00 2001 From: misha Date: Fri, 17 Oct 2025 16:13:34 +0300 Subject: [PATCH] feat(tests): added sign in skip --- ..._test.dart => auth_screen_login_test.dart} | 10 +++--- ...dart => auth_screen_logo_button_test.dart} | 0 .../common_cases/skip_sign_in.dart | 21 +++++++++++++ .../common_cases/skip_welcome_screen.dart | 2 +- .../blog_post_creation_screen_test.dart | 31 +++++++++++++++++++ lib/app_keys.dart | 15 +++++++-- .../pages/blog_post_create_screen.dart | 5 +++ .../feed/presentation/pages/feed_screen.dart | 3 +- 8 files changed, 78 insertions(+), 9 deletions(-) rename integration_test/auth_screen/{auth_login_test.dart => auth_screen_login_test.dart} (76%) rename integration_test/auth_screen/{auth_logo_button_test.dart => auth_screen_logo_button_test.dart} (100%) create mode 100644 integration_test/common_cases/skip_sign_in.dart create mode 100644 integration_test/feed_screen/blog_post_creation_screen_test.dart diff --git a/integration_test/auth_screen/auth_login_test.dart b/integration_test/auth_screen/auth_screen_login_test.dart similarity index 76% rename from integration_test/auth_screen/auth_login_test.dart rename to integration_test/auth_screen/auth_screen_login_test.dart index ce538770..93fe5bee 100644 --- a/integration_test/auth_screen/auth_login_test.dart +++ b/integration_test/auth_screen/auth_screen_login_test.dart @@ -1,5 +1,7 @@ import 'package:eatvio_app/app_keys.dart'; import 'package:eatvio_app/core/app_initializer.dart'; +import 'package:eatvio_app/core/env_config.dart'; +import 'package:eatvio_app/features/feed/presentation/pages/feed_screen.dart'; import 'package:eatvio_app/main.dart' as app; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; @@ -12,7 +14,7 @@ void main() { await AppInitializer.initialize(buildType: AppBuildType.tests); }); - testWidgets('Signs in successfully with valid credentials', (WidgetTester tester) async { + testWidgets('Signs in successfully with valid credentials', (WidgetTester tester) async { await tester.pumpWidget(const app.MyApp()); await tester.pumpAndSettle(const Duration(seconds: 3)); await skipWelcomeScreen(tester); @@ -24,14 +26,14 @@ void main() { expect(passwordFieldFinder, findsOneWidget, reason: 'Password text field should be found.'); expect(signInButtonFinder, findsOneWidget, reason: 'Sign In button should be found.'); - await tester.enterText(emailFieldFinder, 'reshetnick.mike+user4@gmail.com'); - await tester.enterText(passwordFieldFinder, '1234567890'); + await tester.enterText(emailFieldFinder, EnvConfig.testEmail); + await tester.enterText(passwordFieldFinder, EnvConfig.testPassword); await tester.pumpAndSettle(); await tester.tap(signInButtonFinder); await tester.pumpAndSettle(const Duration(seconds: 3)); - expect(signInButtonFinder, findsNothing, reason: 'Sign-in button should not be visible after successful login and navigation.'); + expect(FeedScreen, findsOne, reason: 'Feed screen should be visible after successful login and navigation.'); }); } diff --git a/integration_test/auth_screen/auth_logo_button_test.dart b/integration_test/auth_screen/auth_screen_logo_button_test.dart similarity index 100% rename from integration_test/auth_screen/auth_logo_button_test.dart rename to integration_test/auth_screen/auth_screen_logo_button_test.dart diff --git a/integration_test/common_cases/skip_sign_in.dart b/integration_test/common_cases/skip_sign_in.dart new file mode 100644 index 00000000..414142ea --- /dev/null +++ b/integration_test/common_cases/skip_sign_in.dart @@ -0,0 +1,21 @@ +import 'package:eatvio_app/app_keys.dart'; +import 'package:eatvio_app/core/env_config.dart'; +import 'package:flutter_test/flutter_test.dart'; + +Future skipSignIn(WidgetTester tester) async { + final emailFieldFinder = find.byKey(AppKeys.emailTextFieldAuthScreen); + final passwordFieldFinder = find.byKey(AppKeys.passwordTextFieldAuthScreen); + final signInButtonFinder = find.byKey(AppKeys.signInButtonAuthScreen); + + expect(emailFieldFinder, findsOneWidget, reason: 'Email text field should be found.'); + expect(passwordFieldFinder, findsOneWidget, reason: 'Password text field should be found.'); + expect(signInButtonFinder, findsOneWidget, reason: 'Sign In button should be found.'); + + await tester.enterText(emailFieldFinder, EnvConfig.testEmail); + await tester.enterText(passwordFieldFinder, EnvConfig.testPassword); + await tester.pumpAndSettle(); + + await tester.tap(signInButtonFinder); + + await tester.pumpAndSettle(const Duration(seconds: 3)); +} diff --git a/integration_test/common_cases/skip_welcome_screen.dart b/integration_test/common_cases/skip_welcome_screen.dart index 20f8899b..2a25050b 100644 --- a/integration_test/common_cases/skip_welcome_screen.dart +++ b/integration_test/common_cases/skip_welcome_screen.dart @@ -5,4 +5,4 @@ Future skipWelcomeScreen(WidgetTester tester) async { final welcomeScreenButtonFinder = find.byKey(AppKeys.welcomeScreenButton); await tester.tap(welcomeScreenButtonFinder); await tester.pumpAndSettle(); -} \ No newline at end of file +} diff --git a/integration_test/feed_screen/blog_post_creation_screen_test.dart b/integration_test/feed_screen/blog_post_creation_screen_test.dart new file mode 100644 index 00000000..617e495a --- /dev/null +++ b/integration_test/feed_screen/blog_post_creation_screen_test.dart @@ -0,0 +1,31 @@ +import 'package:eatvio_app/app_keys.dart'; +import 'package:eatvio_app/core/app_initializer.dart'; +import 'package:eatvio_app/main.dart' as app; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; + +import '../common_cases/skip_sign_in.dart'; +import '../common_cases/skip_welcome_screen.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + setUpAll(() async { + await AppInitializer.initialize(buildType: AppBuildType.tests); + }); + + testWidgets('qwe', (WidgetTester tester) async { + await tester.pumpWidget(const app.MyApp()); + await tester.pumpAndSettle(const Duration(seconds: 3)); + await skipWelcomeScreen(tester); + await skipSignIn(tester); + + final blogPostCreationFinder = find.byKey(AppKeys.feedScreenBlogPostCreationButton); + + expect(blogPostCreationFinder, findsOneWidget, reason: 'Blog post creation button should be found.'); + + await tester.tap(blogPostCreationFinder); + + await tester.pumpAndSettle(); + }); +} diff --git a/lib/app_keys.dart b/lib/app_keys.dart index 3e732506..6c497417 100644 --- a/lib/app_keys.dart +++ b/lib/app_keys.dart @@ -1,13 +1,22 @@ import 'package:flutter/material.dart'; -class AppKeys { - +class AppKeys { // Auth Screen static const hiddenLogoButtonAuthScreen = ValueKey('hiddenLogoButtonAuthScreen'); static const emailTextFieldAuthScreen = ValueKey('emailTextFieldAuthScreen'); static const passwordTextFieldAuthScreen = ValueKey('passwordTextFieldAuthScreen'); static const signInButtonAuthScreen = ValueKey('signInButtonAuthScreen'); - // Welcome Screen + // Welcome Screen static const welcomeScreenButton = ValueKey('welcomeScreenButton'); + + // Feed Screen + static const feedScreenBlogPostCreationButton = ValueKey('feedScreenBlogPostCreationButton'); + + // BlogPostCreateScreen + static const blogPostCreateScreenTitleTextField = ValueKey('blogPostCreateScreenTitleTextField'); + static const blogPostCreateScreenContentTextField = ValueKey('blogPostCreateScreenContentTextField'); + static const blogPostCreateScreenVideoLinkTextField = ValueKey('blogPostCreateScreenVideoLinkTextField'); + static const blogPostCreateScreenCreateButton = ValueKey('blogPostCreateScreenCreateButton'); + static const imageWidget = ValueKey('imageWidget'); } diff --git a/lib/features/blog_post_create/presentation/pages/blog_post_create_screen.dart b/lib/features/blog_post_create/presentation/pages/blog_post_create_screen.dart index 40ad3dfa..da1dfa24 100644 --- a/lib/features/blog_post_create/presentation/pages/blog_post_create_screen.dart +++ b/lib/features/blog_post_create/presentation/pages/blog_post_create_screen.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:io'; +import 'package:eatvio_app/app_keys.dart'; import 'package:eatvio_app/core/app_config.dart'; import 'package:eatvio_app/core/app_router.dart'; import 'package:eatvio_app/core/permission_handler/permission_handler.dart'; @@ -153,6 +154,7 @@ class _BlogPostCreateScreenState extends State { floatingActionButton: SizedBox( width: MediaQuery.of(context).size.width - 32, child: FloatingActionButton.extended( + key: AppKeys.blogPostCreateScreenCreateButton, heroTag: 'createBlogPost', highlightElevation: 0, elevation: 0, @@ -225,12 +227,14 @@ class _BlogPostCreateScreenState extends State { const Text('Заголовок'), const SizedBox(height: 8), CustomTextFormField( + key: AppKeys.blogPostCreateScreenTitleTextField, controller: titleController, ), const SizedBox(height: 16), const Text('Описание'), const SizedBox(height: 8), CustomTextFormField( + key: AppKeys.blogPostCreateScreenContentTextField, controller: descriptionController, maxLines: 6, minLines: 4, @@ -244,6 +248,7 @@ class _BlogPostCreateScreenState extends State { if (image == null && widget.feedBlogPostModel?.image == null) const SizedBox(height: 8), if (image == null && widget.feedBlogPostModel?.image == null) CustomTextFormField( + key: AppKeys.blogPostCreateScreenVideoLinkTextField, controller: videoUrlController, ), const SizedBox(height: 80), diff --git a/lib/features/feed/presentation/pages/feed_screen.dart b/lib/features/feed/presentation/pages/feed_screen.dart index 796b4a3b..e664d78f 100644 --- a/lib/features/feed/presentation/pages/feed_screen.dart +++ b/lib/features/feed/presentation/pages/feed_screen.dart @@ -1,4 +1,5 @@ import 'package:easy_debounce/easy_debounce.dart'; +import 'package:eatvio_app/app_keys.dart'; import 'package:eatvio_app/core/const.dart'; import 'package:eatvio_app/core/views/cubit/views_cubit.dart'; import 'package:eatvio_app/core/widgets/add_item_button.dart'; @@ -215,7 +216,7 @@ class _FeedScreenContentState extends State { 3 when !hidePlans => AddItemButton( onTap: state.profile?.roles.contains('consultant') ?? false ? () => GoRouter.of(context).pushNamed(CreatePlanScreen.name) : null, ), - _ => const AddItemButton(), + _ => const AddItemButton(key: AppKeys.feedScreenBlogPostCreationButton), }, ], ),