Merge remote-tracking branch 'upstream/main'

This commit is contained in:
misha
2025-12-25 16:36:23 +03:00
41 changed files with 3705 additions and 3478 deletions

View File

@@ -1,153 +1,157 @@
import 'package:eatvio_app/core/constants/app_constants.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('AppConstants', () {
group('Sizes', () {
test('has correct padding values', () {
expect(AppConstants.defaultPadding, 16.0);
expect(AppConstants.smallPadding, 8.0);
expect(AppConstants.largePadding, 24.0);
expect(AppConstants.extraLargePadding, 32.0);
});
test('has correct border radius values', () {
expect(AppConstants.defaultBorderRadius, 8.0);
expect(AppConstants.smallBorderRadius, 4.0);
expect(AppConstants.largeBorderRadius, 16.0);
});
test('has correct button height values', () {
expect(AppConstants.defaultButtonHeight, 48.0);
expect(AppConstants.smallButtonHeight, 36.0);
expect(AppConstants.largeButtonHeight, 56.0);
});
test('has correct content width values', () {
expect(AppConstants.maxContentWidth, 400.0);
expect(AppConstants.minContentWidth, 280.0);
});
});
group('Animations', () {
test('has correct animation durations', () {
expect(AppConstants.defaultAnimationDuration, const Duration(milliseconds: 300));
expect(AppConstants.fastAnimationDuration, const Duration(milliseconds: 150));
expect(AppConstants.slowAnimationDuration, const Duration(milliseconds: 500));
});
});
group('Timeouts', () {
test('has correct timeout durations', () {
expect(AppConstants.defaultTimeout, const Duration(seconds: 30));
expect(AppConstants.shortTimeout, const Duration(seconds: 10));
expect(AppConstants.longTimeout, const Duration(minutes: 2));
});
});
group('Limits', () {
test('has correct size limits', () {
expect(AppConstants.maxImageSize, 5 * 1024 * 1024);
expect(AppConstants.maxVideoSize, 100 * 1024 * 1024);
});
test('has correct text length limits', () {
expect(AppConstants.maxTextLength, 1000);
expect(AppConstants.maxTitleLength, 100);
expect(AppConstants.maxDescriptionLength, 500);
});
});
group('Pagination', () {
test('has correct page sizes', () {
expect(AppConstants.defaultPageSize, 20);
expect(AppConstants.smallPageSize, 10);
expect(AppConstants.largePageSize, 50);
});
});
group('Formats', () {
test('has supported image formats', () {
expect(AppConstants.supportedImageFormats, contains('jpg'));
expect(AppConstants.supportedImageFormats, contains('jpeg'));
expect(AppConstants.supportedImageFormats, contains('png'));
expect(AppConstants.supportedImageFormats, contains('webp'));
});
test('has supported video formats', () {
expect(AppConstants.supportedVideoFormats, contains('mp4'));
expect(AppConstants.supportedVideoFormats, contains('mov'));
expect(AppConstants.supportedVideoFormats, contains('avi'));
});
});
group('Regex', () {
test('has email regex', () {
expect(AppConstants.emailRegex, isA<String>());
expect(AppConstants.emailRegex.isNotEmpty, isTrue);
});
test('has phone regex', () {
expect(AppConstants.phoneRegex, isA<String>());
expect(AppConstants.phoneRegex.isNotEmpty, isTrue);
});
test('has URL regex', () {
expect(AppConstants.urlRegex, isA<String>());
expect(AppConstants.urlRegex.isNotEmpty, isTrue);
});
});
group('Messages', () {
test('has error messages', () {
expect(AppConstants.defaultErrorMessage, isA<String>());
expect(AppConstants.networkErrorMessage, isA<String>());
expect(AppConstants.timeoutErrorMessage, isA<String>());
expect(AppConstants.unknownErrorMessage, isA<String>());
});
});
group('Keys', () {
test('has SharedPreferences keys', () {
expect(AppConstants.welcomeScreenShownKey, isA<String>());
expect(AppConstants.userTokenKey, isA<String>());
expect(AppConstants.userDataKey, isA<String>());
expect(AppConstants.settingsKey, isA<String>());
});
});
group('API Endpoints', () {
test('has API endpoints', () {
expect(AppConstants.apiVersion, '/api');
expect(AppConstants.authEndpoint, '/auth');
expect(AppConstants.usersEndpoint, '/users');
expect(AppConstants.postsEndpoint, '/posts');
expect(AppConstants.commentsEndpoint, '/comments');
});
});
});
}
import 'package:eatvio_app/core/constants/app_constants.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('AppConstants', () {
group('Sizes', () {
test('has correct padding values', () {
expect(AppConstants.defaultPadding, 16.0);
expect(AppConstants.smallPadding, 8.0);
expect(AppConstants.largePadding, 24.0);
expect(AppConstants.extraLargePadding, 32.0);
});
test('has correct border radius values', () {
expect(AppConstants.defaultBorderRadius, 8.0);
expect(AppConstants.smallBorderRadius, 4.0);
expect(AppConstants.largeBorderRadius, 16.0);
});
test('has correct button height values', () {
expect(AppConstants.defaultButtonHeight, 48.0);
expect(AppConstants.smallButtonHeight, 36.0);
expect(AppConstants.largeButtonHeight, 56.0);
});
test('has correct content width values', () {
expect(AppConstants.maxContentWidth, 400.0);
expect(AppConstants.minContentWidth, 280.0);
});
});
group('Animations', () {
test('has correct animation durations', () {
expect(AppConstants.defaultAnimationDuration, const Duration(milliseconds: 300));
expect(AppConstants.fastAnimationDuration, const Duration(milliseconds: 150));
expect(AppConstants.slowAnimationDuration, const Duration(milliseconds: 500));
});
});
group('Timeouts', () {
test('has correct timeout durations', () {
expect(AppConstants.defaultTimeout, const Duration(seconds: 30));
expect(AppConstants.shortTimeout, const Duration(seconds: 10));
expect(AppConstants.longTimeout, const Duration(minutes: 2));
});
});
group('Limits', () {
test('has correct size limits', () {
expect(AppConstants.maxImageSize, 5 * 1024 * 1024);
expect(AppConstants.maxVideoSize, 100 * 1024 * 1024);
});
test('has correct text length limits', () {
expect(AppConstants.maxTextLength, 1000);
expect(AppConstants.maxTitleLength, 100);
expect(AppConstants.maxDescriptionLength, 500);
});
});
group('Pagination', () {
test('has correct page sizes', () {
expect(AppConstants.defaultPageSize, 20);
expect(AppConstants.smallPageSize, 10);
expect(AppConstants.largePageSize, 50);
});
});
group('Formats', () {
test('has supported image formats', () {
expect(AppConstants.supportedImageFormats, contains('jpg'));
expect(AppConstants.supportedImageFormats, contains('jpeg'));
expect(AppConstants.supportedImageFormats, contains('png'));
expect(AppConstants.supportedImageFormats, contains('webp'));
});
test('has supported video formats', () {
expect(AppConstants.supportedVideoFormats, contains('mp4'));
expect(AppConstants.supportedVideoFormats, contains('mov'));
expect(AppConstants.supportedVideoFormats, contains('avi'));
});
});
group('Regex', () {
test('has email regex', () {
expect(AppConstants.emailRegex, isA<String>());
expect(AppConstants.emailRegex.isNotEmpty, isTrue);
});
test('has phone regex', () {
expect(AppConstants.phoneRegex, isA<String>());
expect(AppConstants.phoneRegex.isNotEmpty, isTrue);
});
test('has URL regex', () {
expect(AppConstants.urlRegex, isA<String>());
expect(AppConstants.urlRegex.isNotEmpty, isTrue);
});
});
group('Messages', () {
test('has error messages', () {
expect(AppConstants.defaultErrorMessage, isA<String>());
expect(AppConstants.networkErrorMessage, isA<String>());
expect(AppConstants.timeoutErrorMessage, isA<String>());
expect(AppConstants.unknownErrorMessage, isA<String>());
});
});
group('Keys', () {
test('has SharedPreferences keys', () {
expect(AppConstants.welcomeScreenShownKey, isA<String>());
expect(AppConstants.userTokenKey, isA<String>());
expect(AppConstants.userDataKey, isA<String>());
expect(AppConstants.settingsKey, isA<String>());
});
});
group('API Endpoints', () {
test('has API endpoints', () {
expect(AppConstants.apiVersion, '/api');
expect(AppConstants.authEndpoint, '/auth');
expect(AppConstants.usersEndpoint, '/users');
expect(AppConstants.postsEndpoint, '/posts');
expect(AppConstants.commentsEndpoint, '/comments');
});
});
});
}

View File

@@ -1,88 +1,92 @@
import 'package:eatvio_app/core/cubit/state_utils.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('StateUtils', () {
test('isLoading returns true for loading state', () {
expect(StateUtils.isLoading('loading'), isTrue);
expect(StateUtils.isLoading('Loading'), isTrue);
expect(StateUtils.isLoading('StateLoading'), isTrue);
expect(StateUtils.isLoading('state_loading'), isTrue);
});
test('isLoading returns false for non-loading state', () {
expect(StateUtils.isLoading('loaded'), isFalse);
expect(StateUtils.isLoading('error'), isFalse);
expect(StateUtils.isLoading('success'), isFalse);
});
test('isLoaded returns true for loaded state', () {
expect(StateUtils.isLoaded('loaded'), isTrue);
expect(StateUtils.isLoaded('Loaded'), isTrue);
expect(StateUtils.isLoaded('StateLoaded'), isTrue);
expect(StateUtils.isLoaded('state_loaded'), isTrue);
});
test('isLoaded returns false for non-loaded state', () {
expect(StateUtils.isLoaded('loading'), isFalse);
expect(StateUtils.isLoaded('error'), isFalse);
expect(StateUtils.isLoaded('initial'), isFalse);
});
test('isError returns true for error state', () {
expect(StateUtils.isError('error'), isTrue);
expect(StateUtils.isError('Error'), isTrue);
expect(StateUtils.isError('StateError'), isTrue);
expect(StateUtils.isError('state_error'), isTrue);
});
test('isError returns false for non-error state', () {
expect(StateUtils.isError('loading'), isFalse);
expect(StateUtils.isError('loaded'), isFalse);
expect(StateUtils.isError('success'), isFalse);
});
test('getErrorMessage returns null for non-error state', () {
expect(StateUtils.getErrorMessage('loading'), isNull);
expect(StateUtils.getErrorMessage('loaded'), isNull);
expect(StateUtils.getErrorMessage('success'), isNull);
});
test('getErrorMessage extracts error message from error state', () {
const errorState = 'error: Something went wrong';
final message = StateUtils.getErrorMessage(errorState);
expect(message, isNotNull);
expect(message, contains('Something'));
});
test('getErrorMessage handles various error state formats', () {
expect(StateUtils.getErrorMessage('error: test'), isNotNull);
expect(StateUtils.getErrorMessage('Error: test message'), isNotNull);
});
});
}
import 'package:eatvio_app/core/cubit/state_utils.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('StateUtils', () {
test('isLoading returns true for loading state', () {
expect(StateUtils.isLoading('loading'), isTrue);
expect(StateUtils.isLoading('Loading'), isTrue);
expect(StateUtils.isLoading('StateLoading'), isTrue);
expect(StateUtils.isLoading('state_loading'), isTrue);
});
test('isLoading returns false for non-loading state', () {
expect(StateUtils.isLoading('loaded'), isFalse);
expect(StateUtils.isLoading('error'), isFalse);
expect(StateUtils.isLoading('success'), isFalse);
});
test('isLoaded returns true for loaded state', () {
expect(StateUtils.isLoaded('loaded'), isTrue);
expect(StateUtils.isLoaded('Loaded'), isTrue);
expect(StateUtils.isLoaded('StateLoaded'), isTrue);
expect(StateUtils.isLoaded('state_loaded'), isTrue);
});
test('isLoaded returns false for non-loaded state', () {
expect(StateUtils.isLoaded('loading'), isFalse);
expect(StateUtils.isLoaded('error'), isFalse);
expect(StateUtils.isLoaded('initial'), isFalse);
});
test('isError returns true for error state', () {
expect(StateUtils.isError('error'), isTrue);
expect(StateUtils.isError('Error'), isTrue);
expect(StateUtils.isError('StateError'), isTrue);
expect(StateUtils.isError('state_error'), isTrue);
});
test('isError returns false for non-error state', () {
expect(StateUtils.isError('loading'), isFalse);
expect(StateUtils.isError('loaded'), isFalse);
expect(StateUtils.isError('success'), isFalse);
});
test('getErrorMessage returns null for non-error state', () {
expect(StateUtils.getErrorMessage('loading'), isNull);
expect(StateUtils.getErrorMessage('loaded'), isNull);
expect(StateUtils.getErrorMessage('success'), isNull);
});
test('getErrorMessage extracts error message from error state', () {
const errorState = 'error: Something went wrong';
final message = StateUtils.getErrorMessage(errorState);
expect(message, isNotNull);
expect(message, contains('Something'));
});
test('getErrorMessage handles various error state formats', () {
expect(StateUtils.getErrorMessage('error: test'), isNotNull);
expect(StateUtils.getErrorMessage('Error: test message'), isNotNull);
});
});
}

View File

@@ -1,102 +1,106 @@
import 'package:eatvio_app/core/data/selectionPopupModel/selection_popup_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('SelectionPopupModel', () {
test('creates model with all parameters', () {
const model = SelectionPopupModel(
id: 1,
title: 'Test Title',
value: 'Test Value',
isSelected: true,
);
expect(model.id, 1);
expect(model.title, 'Test Title');
expect(model.value, 'Test Value');
expect(model.isSelected, true);
});
test('creates model with default isSelected value', () {
const model = SelectionPopupModel(
title: 'Test Title',
value: 'Test Value',
);
expect(model.isSelected, false);
});
test('creates model with null id', () {
const model = SelectionPopupModel(
id: null,
title: 'Test Title',
value: 'Test Value',
);
expect(model.id, null);
expect(model.title, 'Test Title');
});
test('creates model with different value types', () {
const model1 = SelectionPopupModel(
title: 'Test',
value: 123,
);
const model2 = SelectionPopupModel(
title: 'Test',
value: 'String Value',
);
const model3 = SelectionPopupModel(
title: 'Test',
value: true,
);
expect(model1.value, 123);
expect(model2.value, 'String Value');
expect(model3.value, true);
});
test('can be compared', () {
const model1 = SelectionPopupModel(
id: 1,
title: 'Test',
value: 'Value',
);
const model2 = SelectionPopupModel(
id: 1,
title: 'Test',
value: 'Value',
);
expect(model1 == model2, true);
});
});
}
import 'package:eatvio_app/core/data/selectionPopupModel/selection_popup_model.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('SelectionPopupModel', () {
test('creates model with all parameters', () {
const model = SelectionPopupModel(
id: 1,
title: 'Test Title',
value: 'Test Value',
isSelected: true,
);
expect(model.id, 1);
expect(model.title, 'Test Title');
expect(model.value, 'Test Value');
expect(model.isSelected, true);
});
test('creates model with default isSelected value', () {
const model = SelectionPopupModel(
title: 'Test Title',
value: 'Test Value',
);
expect(model.isSelected, false);
});
test('creates model with null id', () {
const model = SelectionPopupModel(
id: null,
title: 'Test Title',
value: 'Test Value',
);
expect(model.id, null);
expect(model.title, 'Test Title');
});
test('creates model with different value types', () {
const model1 = SelectionPopupModel(
title: 'Test',
value: 123,
);
const model2 = SelectionPopupModel(
title: 'Test',
value: 'String Value',
);
const model3 = SelectionPopupModel(
title: 'Test',
value: true,
);
expect(model1.value, 123);
expect(model2.value, 'String Value');
expect(model3.value, true);
});
test('can be compared', () {
const model1 = SelectionPopupModel(
id: 1,
title: 'Test',
value: 'Value',
);
const model2 = SelectionPopupModel(
id: 1,
title: 'Test',
value: 'Value',
);
expect(model1 == model2, true);
});
});
}

View File

@@ -1,51 +1,55 @@
import 'package:eatvio_app/core/prefs_keys.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('PrefsKeys', () {
test('has all expected values', () {
expect(PrefsKeys.values.length, 4);
expect(PrefsKeys.values, contains(PrefsKeys.hasAnonymousTokenBeenSent));
expect(PrefsKeys.values, contains(PrefsKeys.welcomeScreenWasShowed));
expect(PrefsKeys.values, contains(PrefsKeys.registrationDate));
expect(PrefsKeys.values, contains(PrefsKeys.marketingBottomSheetHasBeenShown));
});
test('can be compared', () {
expect(PrefsKeys.hasAnonymousTokenBeenSent == PrefsKeys.hasAnonymousTokenBeenSent, true);
expect(PrefsKeys.hasAnonymousTokenBeenSent == PrefsKeys.welcomeScreenWasShowed, false);
});
test('has correct name property', () {
expect(PrefsKeys.hasAnonymousTokenBeenSent.name, 'hasAnonymousTokenBeenSent');
expect(PrefsKeys.welcomeScreenWasShowed.name, 'welcomeScreenWasShowed');
expect(PrefsKeys.registrationDate.name, 'registrationDate');
expect(PrefsKeys.marketingBottomSheetHasBeenShown.name, 'marketingBottomSheetHasBeenShown');
});
});
}
import 'package:eatvio_app/core/prefs_keys.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('PrefsKeys', () {
test('has all expected values', () {
expect(PrefsKeys.values.length, 4);
expect(PrefsKeys.values, contains(PrefsKeys.hasAnonymousTokenBeenSent));
expect(PrefsKeys.values, contains(PrefsKeys.welcomeScreenWasShowed));
expect(PrefsKeys.values, contains(PrefsKeys.registrationDate));
expect(PrefsKeys.values, contains(PrefsKeys.marketingBottomSheetHasBeenShown));
});
test('can be compared', () {
expect(PrefsKeys.hasAnonymousTokenBeenSent == PrefsKeys.hasAnonymousTokenBeenSent, true);
expect(PrefsKeys.hasAnonymousTokenBeenSent == PrefsKeys.welcomeScreenWasShowed, false);
});
test('has correct name property', () {
expect(PrefsKeys.hasAnonymousTokenBeenSent.name, 'hasAnonymousTokenBeenSent');
expect(PrefsKeys.welcomeScreenWasShowed.name, 'welcomeScreenWasShowed');
expect(PrefsKeys.registrationDate.name, 'registrationDate');
expect(PrefsKeys.marketingBottomSheetHasBeenShown.name, 'marketingBottomSheetHasBeenShown');
});
});
}

View File

@@ -1,77 +1,81 @@
import 'package:eatvio_app/core/internet_connection_cubit/internet_connection_state.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('InternetConnectionState', () {
test('creates state with default isInternetAvailable value', () {
final state = InternetConnectionState();
expect(state.isInternetAvailable, true);
});
test('creates state with isInternetAvailable set to false', () {
final state = InternetConnectionState(
isInternetAvailable: false,
);
expect(state.isInternetAvailable, false);
});
test('creates state with isInternetAvailable set to true', () {
final state = InternetConnectionState(
isInternetAvailable: true,
);
expect(state.isInternetAvailable, true);
});
test('can be compared', () {
final state1 = InternetConnectionState(
isInternetAvailable: true,
);
final state2 = InternetConnectionState(
isInternetAvailable: true,
);
expect(state1 == state2, true);
});
test('different states are not equal', () {
final state1 = InternetConnectionState(
isInternetAvailable: true,
);
final state2 = InternetConnectionState(
isInternetAvailable: false,
);
expect(state1 == state2, false);
});
});
}
import 'package:eatvio_app/core/internet_connection_cubit/internet_connection_state.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('InternetConnectionState', () {
test('creates state with default isInternetAvailable value', () {
final state = InternetConnectionState();
expect(state.isInternetAvailable, true);
});
test('creates state with isInternetAvailable set to false', () {
final state = InternetConnectionState(
isInternetAvailable: false,
);
expect(state.isInternetAvailable, false);
});
test('creates state with isInternetAvailable set to true', () {
final state = InternetConnectionState(
isInternetAvailable: true,
);
expect(state.isInternetAvailable, true);
});
test('can be compared', () {
final state1 = InternetConnectionState(
isInternetAvailable: true,
);
final state2 = InternetConnectionState(
isInternetAvailable: true,
);
expect(state1 == state2, true);
});
test('different states are not equal', () {
final state1 = InternetConnectionState(
isInternetAvailable: true,
);
final state2 = InternetConnectionState(
isInternetAvailable: false,
);
expect(state1 == state2, false);
});
});
}

View File

@@ -1,47 +1,51 @@
import 'package:eatvio_app/core/prefs_keys.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('PrefsKeys', () {
test('все значения enum определены', () {
expect(PrefsKeys.values.length, 4);
expect(PrefsKeys.values, contains(PrefsKeys.hasAnonymousTokenBeenSent));
expect(PrefsKeys.values, contains(PrefsKeys.welcomeScreenWasShowed));
expect(PrefsKeys.values, contains(PrefsKeys.registrationDate));
expect(PrefsKeys.values, contains(PrefsKeys.marketingBottomSheetHasBeenShown));
});
test('имена ключей корректны', () {
expect(PrefsKeys.hasAnonymousTokenBeenSent.name, 'hasAnonymousTokenBeenSent');
expect(PrefsKeys.welcomeScreenWasShowed.name, 'welcomeScreenWasShowed');
expect(PrefsKeys.registrationDate.name, 'registrationDate');
expect(PrefsKeys.marketingBottomSheetHasBeenShown.name, 'marketingBottomSheetHasBeenShown');
});
});
}
import 'package:eatvio_app/core/prefs_keys.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('PrefsKeys', () {
test('все значения enum определены', () {
expect(PrefsKeys.values.length, 4);
expect(PrefsKeys.values, contains(PrefsKeys.hasAnonymousTokenBeenSent));
expect(PrefsKeys.values, contains(PrefsKeys.welcomeScreenWasShowed));
expect(PrefsKeys.values, contains(PrefsKeys.registrationDate));
expect(PrefsKeys.values, contains(PrefsKeys.marketingBottomSheetHasBeenShown));
});
test('имена ключей корректны', () {
expect(PrefsKeys.hasAnonymousTokenBeenSent.name, 'hasAnonymousTokenBeenSent');
expect(PrefsKeys.welcomeScreenWasShowed.name, 'welcomeScreenWasShowed');
expect(PrefsKeys.registrationDate.name, 'registrationDate');
expect(PrefsKeys.marketingBottomSheetHasBeenShown.name, 'marketingBottomSheetHasBeenShown');
});
});
}

View File

@@ -1,44 +1,48 @@
import 'package:eatvio_app/core/routing/main_navigation_routes.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:go_router/go_router.dart';
void main() {
group('MainNavigationRoutes', () {
test('createRoutes возвращает список маршрутов', () {
final routes = MainNavigationRoutes.createRoutes();
expect(routes, isNotEmpty);
expect(routes, isA<List<RouteBase>>());
});
test('createRoutes содержит ShellRoute', () {
final routes = MainNavigationRoutes.createRoutes();
expect(routes.first, isA<ShellRoute>());
});
});
}
import 'package:eatvio_app/core/routing/main_navigation_routes.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:go_router/go_router.dart';
void main() {
group('MainNavigationRoutes', () {
test('createRoutes возвращает список маршрутов', () {
final routes = MainNavigationRoutes.createRoutes();
expect(routes, isNotEmpty);
expect(routes, isA<List<RouteBase>>());
});
test('createRoutes содержит ShellRoute', () {
final routes = MainNavigationRoutes.createRoutes();
expect(routes.first, isA<ShellRoute>());
});
});
}

View File

@@ -1,127 +1,131 @@
import 'package:eatvio_app/core/routing/route_constants.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('RouteConstants', () {
test('has all auth routes defined', () {
expect(RouteConstants.authScreen, '/auth-screen');
expect(RouteConstants.registrationScreen, 'registration-screen');
expect(RouteConstants.registrationScreenV2, 'registration-screen-v2');
expect(RouteConstants.forgetPasswordScreen, 'forget-password-screen');
expect(RouteConstants.scanQRCodeScreen, 'scan-qr-code-screen');
expect(RouteConstants.verifyScreen, '/verify-screen');
expect(RouteConstants.verifyEmailScreen, '/verify-email-screen');
expect(RouteConstants.registerViaSocialScreen, '/register-via-social-screen');
});
test('has all main navigation routes defined', () {
expect(RouteConstants.myProfileScreen, '/my-profile-screen');
expect(RouteConstants.feedScreen, '/feed-screen');
expect(RouteConstants.diaryScreen, '/diary-screen');
expect(RouteConstants.consultationsScreen, '/consultations-screen');
expect(RouteConstants.chatSelectScreen, '/chat-select-screen');
expect(RouteConstants.notificationsScreen, '/notifications-screen');
expect(RouteConstants.menuScreen, '/menu-screen');
});
test('has all content routes defined', () {
expect(RouteConstants.aboutPlanScreen, '/about-plan-screen');
expect(RouteConstants.aboutRecipesScreen, '/about-recipes-screen');
expect(RouteConstants.aboutDietScreen, '/about-diet-screen');
expect(RouteConstants.blogPostScreen, '/blog-post-screen');
expect(RouteConstants.blogPostCreateScreen, '/blog-post-create-screen');
});
test('has all profile routes defined', () {
expect(RouteConstants.profileScreen, '/profile-screen');
expect(RouteConstants.subsScreen, '/subs-screen');
});
test('has all settings routes defined', () {
expect(RouteConstants.settingsScreen, '/settings-screen');
expect(RouteConstants.generalInfoScreen, 'general-info-screen');
expect(RouteConstants.otherInfoScreen, 'other-info-screen');
expect(RouteConstants.physicalActivityScreen, 'physical-activity-screen');
expect(RouteConstants.physicalFormScreen, 'physical-form-screen');
expect(RouteConstants.pressureScreen, 'pressure-screen');
expect(RouteConstants.changePasswordScreen, 'change-password-screen');
expect(RouteConstants.changeEmailScreen, 'change-email-screen');
});
test('has all consultant routes defined', () {
expect(RouteConstants.becomeConsultantScreen, '/become-consultant-screen');
expect(RouteConstants.stepperBecomeConsultantScreen, '/stepper-become-consultant-screen');
expect(RouteConstants.consultantRatingScreen, '/consultant-rating-screen');
});
test('has all other routes defined', () {
expect(RouteConstants.welcomeScreen, '/welcome-screen');
expect(RouteConstants.updateScreen, '/update-screen');
expect(RouteConstants.calendarScreen, '/calendar-screen');
expect(RouteConstants.supportScreen, '/support-screen');
expect(RouteConstants.photoViewScreen, '/photo-view-screen');
expect(RouteConstants.chatScreen, '/chat-screen');
expect(RouteConstants.emptyChatScreen, '/empty-chat-screen');
expect(RouteConstants.glossaryScreen, '/glossary-screen');
expect(RouteConstants.blockedUsersScreen, '/blocked-users-screen');
expect(RouteConstants.notificationsSettingsScreen, '/notifications-settings-screen');
});
test('has all finance routes defined', () {
expect(RouteConstants.userFinanceScreen, '/user-finance-screen');
expect(RouteConstants.cardSettingsScreen, '/card-settings-screen');
expect(RouteConstants.orderInfoScreen, '/order-info-screen');
expect(RouteConstants.paymentScreen, '/payment-screen');
});
test('has all content creation routes defined', () {
expect(RouteConstants.recipeCreateScreen, '/recipe-create-screen');
expect(RouteConstants.createDietScreen, '/create-diet-screen');
expect(RouteConstants.dietPreviewScreen, '/diet-preview-screen');
expect(RouteConstants.createPlanScreen, '/create-plan-screen');
expect(RouteConstants.myDietsScreen, '/my-diets-screen');
expect(RouteConstants.myPlansScreen, '/my-plans-screen');
expect(RouteConstants.myRecipesScreen, '/my-recipes-screen');
});
test('has all user details routes defined', () {
expect(RouteConstants.userDetailsScreen, '/user-details-screen');
expect(RouteConstants.userDiaryScreen, '/user-diary-screen');
});
test('has dev tools route defined', () {
expect(RouteConstants.devToolsScreen, '/dev-tools-screen');
});
test('has all archive routes defined', () {
expect(RouteConstants.consultationsArchiveScreen, '/consultations-archive-screen');
expect(RouteConstants.consultantFinancesScreen, '/consultant-finances-screen');
expect(RouteConstants.userPurchasesScreen, '/user-purchases-screen');
});
});
}
import 'package:eatvio_app/core/routing/route_constants.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('RouteConstants', () {
test('has all auth routes defined', () {
expect(RouteConstants.authScreen, '/auth-screen');
expect(RouteConstants.registrationScreen, 'registration-screen');
expect(RouteConstants.registrationScreenV2, 'registration-screen-v2');
expect(RouteConstants.forgetPasswordScreen, 'forget-password-screen');
expect(RouteConstants.scanQRCodeScreen, 'scan-qr-code-screen');
expect(RouteConstants.verifyScreen, '/verify-screen');
expect(RouteConstants.verifyEmailScreen, '/verify-email-screen');
expect(RouteConstants.registerViaSocialScreen, '/register-via-social-screen');
});
test('has all main navigation routes defined', () {
expect(RouteConstants.myProfileScreen, '/my-profile-screen');
expect(RouteConstants.feedScreen, '/feed-screen');
expect(RouteConstants.diaryScreen, '/diary-screen');
expect(RouteConstants.consultationsScreen, '/consultations-screen');
expect(RouteConstants.chatSelectScreen, '/chat-select-screen');
expect(RouteConstants.notificationsScreen, '/notifications-screen');
expect(RouteConstants.menuScreen, '/menu-screen');
});
test('has all content routes defined', () {
expect(RouteConstants.aboutPlanScreen, '/about-plan-screen');
expect(RouteConstants.aboutRecipesScreen, '/about-recipes-screen');
expect(RouteConstants.aboutDietScreen, '/about-diet-screen');
expect(RouteConstants.blogPostScreen, '/blog-post-screen');
expect(RouteConstants.blogPostCreateScreen, '/blog-post-create-screen');
});
test('has all profile routes defined', () {
expect(RouteConstants.profileScreen, '/profile-screen');
expect(RouteConstants.subsScreen, '/subs-screen');
});
test('has all settings routes defined', () {
expect(RouteConstants.settingsScreen, '/settings-screen');
expect(RouteConstants.generalInfoScreen, 'general-info-screen');
expect(RouteConstants.otherInfoScreen, 'other-info-screen');
expect(RouteConstants.physicalActivityScreen, 'physical-activity-screen');
expect(RouteConstants.physicalFormScreen, 'physical-form-screen');
expect(RouteConstants.pressureScreen, 'pressure-screen');
expect(RouteConstants.changePasswordScreen, 'change-password-screen');
expect(RouteConstants.changeEmailScreen, 'change-email-screen');
});
test('has all consultant routes defined', () {
expect(RouteConstants.becomeConsultantScreen, '/become-consultant-screen');
expect(RouteConstants.stepperBecomeConsultantScreen, '/stepper-become-consultant-screen');
expect(RouteConstants.consultantRatingScreen, '/consultant-rating-screen');
});
test('has all other routes defined', () {
expect(RouteConstants.welcomeScreen, '/welcome-screen');
expect(RouteConstants.updateScreen, '/update-screen');
expect(RouteConstants.calendarScreen, '/calendar-screen');
expect(RouteConstants.supportScreen, '/support-screen');
expect(RouteConstants.photoViewScreen, '/photo-view-screen');
expect(RouteConstants.chatScreen, '/chat-screen');
expect(RouteConstants.emptyChatScreen, '/empty-chat-screen');
expect(RouteConstants.glossaryScreen, '/glossary-screen');
expect(RouteConstants.blockedUsersScreen, '/blocked-users-screen');
expect(RouteConstants.notificationsSettingsScreen, '/notifications-settings-screen');
});
test('has all finance routes defined', () {
expect(RouteConstants.userFinanceScreen, '/user-finance-screen');
expect(RouteConstants.cardSettingsScreen, '/card-settings-screen');
expect(RouteConstants.orderInfoScreen, '/order-info-screen');
expect(RouteConstants.paymentScreen, '/payment-screen');
});
test('has all content creation routes defined', () {
expect(RouteConstants.recipeCreateScreen, '/recipe-create-screen');
expect(RouteConstants.createDietScreen, '/create-diet-screen');
expect(RouteConstants.dietPreviewScreen, '/diet-preview-screen');
expect(RouteConstants.createPlanScreen, '/create-plan-screen');
expect(RouteConstants.myDietsScreen, '/my-diets-screen');
expect(RouteConstants.myPlansScreen, '/my-plans-screen');
expect(RouteConstants.myRecipesScreen, '/my-recipes-screen');
});
test('has all user details routes defined', () {
expect(RouteConstants.userDetailsScreen, '/user-details-screen');
expect(RouteConstants.userDiaryScreen, '/user-diary-screen');
});
test('has dev tools route defined', () {
expect(RouteConstants.devToolsScreen, '/dev-tools-screen');
});
test('has all archive routes defined', () {
expect(RouteConstants.consultationsArchiveScreen, '/consultations-archive-screen');
expect(RouteConstants.consultantFinancesScreen, '/consultant-finances-screen');
expect(RouteConstants.userPurchasesScreen, '/user-purchases-screen');
});
});
}

View File

@@ -1,51 +1,55 @@
import 'package:eatvio_app/core/routing/settings_routes.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:go_router/go_router.dart';
void main() {
group('SettingsRoutes', () {
test('createRoutes возвращает список маршрутов', () {
final routes = SettingsRoutes.createRoutes();
expect(routes, isNotEmpty);
expect(routes, isA<List<RouteBase>>());
});
test('createRoutes содержит маршрут settingsScreen', () {
final routes = SettingsRoutes.createRoutes();
final settingsRoute = routes.first as GoRoute;
expect(settingsRoute.path, '/settings-screen');
});
test('createRoutes содержит вложенные маршруты', () {
final routes = SettingsRoutes.createRoutes();
final settingsRoute = routes.first as GoRoute;
expect(settingsRoute.routes, isNotEmpty);
});
});
}
import 'package:eatvio_app/core/routing/settings_routes.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:go_router/go_router.dart';
void main() {
group('SettingsRoutes', () {
test('createRoutes возвращает список маршрутов', () {
final routes = SettingsRoutes.createRoutes();
expect(routes, isNotEmpty);
expect(routes, isA<List<RouteBase>>());
});
test('createRoutes содержит маршрут settingsScreen', () {
final routes = SettingsRoutes.createRoutes();
final settingsRoute = routes.first as GoRoute;
expect(settingsRoute.path, '/settings-screen');
});
test('createRoutes содержит вложенные маршруты', () {
final routes = SettingsRoutes.createRoutes();
final settingsRoute = routes.first as GoRoute;
expect(settingsRoute.routes, isNotEmpty);
});
});
}

View File

@@ -1,45 +1,49 @@
import 'package:eatvio_app/core/views/cubit/views_state.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ViewsCubitState', () {
test('creates initial state', () {
final state = ViewsCubitState();
expect(state, isA<ViewsCubitState>());
});
test('can create multiple instances', () {
final state1 = ViewsCubitState();
final state2 = ViewsCubitState();
expect(state1, isA<ViewsCubitState>());
expect(state2, isA<ViewsCubitState>());
});
});
}
import 'package:eatvio_app/core/views/cubit/views_state.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ViewsCubitState', () {
test('creates initial state', () {
final state = ViewsCubitState();
expect(state, isA<ViewsCubitState>());
});
test('can create multiple instances', () {
final state1 = ViewsCubitState();
final state2 = ViewsCubitState();
expect(state1, isA<ViewsCubitState>());
expect(state2, isA<ViewsCubitState>());
});
});
}

View File

@@ -1,35 +1,31 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/add_item_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:go_router/go_router.dart';
void main() {
group('AddItemButton smoke', () {
Widget wrap(Widget child) {
return MaterialApp.router(
theme: ThemeHelper().themeData(),
routerConfig: GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => Scaffold(body: child),
),
GoRoute(
path: '/blog-post-create',
name: 'blogPostCreateScreen',
builder: (context, state) => const SizedBox.shrink(),
),
],
),
);
}
testWidgets('renders add item button', (tester) async {
await tester.pumpWidget(wrap(const AddItemButton()));
await tester.pump();
expect(find.byType(AddItemButton), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/add_item_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:go_router/go_router.dart';
void main() {
group('AddItemButton smoke', () {
Widget wrap(Widget child) {
return MaterialApp.router(
theme: ThemeHelper().themeData(),
routerConfig: GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => Scaffold(body: child),
),
GoRoute(path: '/blog-post-create', name: 'blogPostCreateScreen', builder: (context, state) => const SizedBox.shrink()),
],
),
);
}
testWidgets('renders add item button', (tester) async {
await tester.pumpWidget(wrap(const AddItemButton()));
await tester.pump();
expect(find.byType(AddItemButton), findsOneWidget);
});
});
}

View File

@@ -1,31 +1,31 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/animated_option_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('AnimatedOptionButton smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders animated option button', (tester) async {
await tester.pumpWidget(wrap(AnimatedOptionButton(text: 'Option 1', isSelected: false, onTap: () {})));
await tester.pump();
expect(find.byType(AnimatedOptionButton), findsOneWidget);
expect(find.text('Option 1'), findsOneWidget);
});
testWidgets('renders animated option button as selected', (tester) async {
await tester.pumpWidget(wrap(AnimatedOptionButton(text: 'Option 2', isSelected: true, onTap: () {})));
await tester.pump();
expect(find.byType(AnimatedOptionButton), findsOneWidget);
expect(find.text('Option 2'), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/animated_option_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('AnimatedOptionButton smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders animated option button', (tester) async {
await tester.pumpWidget(wrap(AnimatedOptionButton(text: 'Option 1', isSelected: false, onTap: () {})));
await tester.pump();
expect(find.byType(AnimatedOptionButton), findsOneWidget);
expect(find.text('Option 1'), findsOneWidget);
});
testWidgets('renders animated option button as selected', (tester) async {
await tester.pumpWidget(wrap(AnimatedOptionButton(text: 'Option 2', isSelected: true, onTap: () {})));
await tester.pump();
expect(find.byType(AnimatedOptionButton), findsOneWidget);
expect(find.text('Option 2'), findsOneWidget);
});
});
}

View File

@@ -1,70 +1,74 @@
import 'package:eatvio_app/core/widgets/base_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('BaseButton', () {
testWidgets('renders as SizedBox.shrink', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: BaseButton(
text: 'Test Button',
onPressed: () {},
),
),
),
);
expect(find.byType(BaseButton), findsOneWidget);
expect(find.byType(SizedBox), findsWidgets);
});
testWidgets('accepts all parameters', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: BaseButton(
text: 'Test Button',
onPressed: () {},
buttonStyle: const ButtonStyle(),
buttonTextStyle: const TextStyle(),
isDisabled: false,
height: 50.0,
width: 100.0,
margin: const EdgeInsets.all(10),
alignment: Alignment.center,
),
),
),
);
expect(find.byType(BaseButton), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/widgets/base_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('BaseButton', () {
testWidgets('renders as SizedBox.shrink', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: BaseButton(
text: 'Test Button',
onPressed: () {},
),
),
),
);
expect(find.byType(BaseButton), findsOneWidget);
expect(find.byType(SizedBox), findsWidgets);
});
testWidgets('accepts all parameters', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: BaseButton(
text: 'Test Button',
onPressed: () {},
buttonStyle: const ButtonStyle(),
buttonTextStyle: const TextStyle(),
isDisabled: false,
height: 50.0,
width: 100.0,
margin: const EdgeInsets.all(10),
alignment: Alignment.center,
),
),
),
);
expect(find.byType(BaseButton), findsOneWidget);
});
});
}

View File

@@ -1,152 +1,156 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/bottom_sheet_with_blur.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('showBottomSheetWithBlur', () {
testWidgets('shows bottom sheet with blur', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('shows bottom sheet without blur when hasBlur is false', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
hasBlur: false,
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('accepts custom height', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
height: 300.0,
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('can be dismissed', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
await tester.tapAt(const Offset(0, 0));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsNothing);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/bottom_sheet_with_blur.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('showBottomSheetWithBlur', () {
testWidgets('shows bottom sheet with blur', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('shows bottom sheet without blur when hasBlur is false', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
hasBlur: false,
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('accepts custom height', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
height: 300.0,
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('can be dismissed', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
await tester.tapAt(const Offset(0, 0));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsNothing);
});
});
}

View File

@@ -1,31 +1,31 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/cpfc_container.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('CpfcContainer smoke', () {
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 cpfc container', (tester) async {
await tester.pumpWidget(wrap(const CpfcContainer(calories: 2000.0, proteins: 150.0, fats: 80.0, carbohydrates: 250.0)));
await tester.pump();
expect(find.byType(CpfcContainer), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/cpfc_container.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('CpfcContainer smoke', () {
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 cpfc container', (tester) async {
await tester.pumpWidget(wrap(const CpfcContainer(calories: 2000.0, proteins: 150.0, fats: 80.0, carbohydrates: 250.0)));
await tester.pump();
expect(find.byType(CpfcContainer), findsOneWidget);
});
});
}

View File

@@ -1,37 +1,160 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/custom_search_bar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('CustomSearchBar smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders custom search bar', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {})));
await tester.pump();
expect(find.byType(CustomSearchBar), findsOneWidget);
expect(find.byType(TextFormField), findsOneWidget);
});
testWidgets('renders custom search bar with icon', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {}, enableIcon: true)));
await tester.pump();
expect(find.byIcon(Icons.search), findsOneWidget);
});
testWidgets('renders custom search bar without icon', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {}, enableIcon: false)));
await tester.pump();
expect(find.byIcon(Icons.search), findsNothing);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/custom_search_bar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('CustomSearchBar smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders custom search bar', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {})));
await tester.pump();
expect(find.byType(CustomSearchBar), findsOneWidget);
expect(find.byType(TextFormField), findsOneWidget);
});
testWidgets('renders custom search bar with icon', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {}, enableIcon: true)));
await tester.pump();
expect(find.byIcon(Icons.search), findsOneWidget);
});
testWidgets('renders custom search bar without icon', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {}, enableIcon: false)));
await tester.pump();
expect(find.byIcon(Icons.search), findsNothing);
});
testWidgets('calls onChanged when text is entered', (tester) async {
final controller = TextEditingController();
String? changedValue;
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {
changedValue = value;
},
),
),
),
);
await tester.enterText(find.byType(TextFormField), 'test');
await tester.pump();
expect(changedValue, 'test');
});
testWidgets('displays hint text', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {},
),
),
),
);
expect(find.text('Поиск'), findsOneWidget);
});
testWidgets('accepts custom width', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {},
width: 200.0,
),
),
),
);
expect(find.byType(CustomSearchBar), findsOneWidget);
});
testWidgets('accepts custom backgroundColor', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {},
backgroundColor: Colors.red,
),
),
),
);
expect(find.byType(CustomSearchBar), findsOneWidget);
});
testWidgets('accepts custom borderRadius', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {},
borderRadius: 20.0,
),
),
),
);
expect(find.byType(CustomSearchBar), findsOneWidget);
});
});
}

View File

@@ -1,44 +1,44 @@
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/core/widgets/item_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ItemWidget smoke', () {
setUpAll(() async {
dotenv.loadFromString(envString: 'DEV_BASE_URL=http://localhost\nBASE_URL=http://localhost');
});
setUp(() async {
await sl.reset();
sl.registerLazySingleton<AppConfig>(() => AppConfig(buildType: AppBuildType.tests)..setBaseUrl('http://localhost'));
});
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders item widget', (tester) async {
await tester.pumpWidget(wrap(const ItemWidget(text: 'Test Item')));
await tester.pumpAndSettle();
expect(find.byType(ItemWidget), findsOneWidget);
expect(find.text('Test Item'), findsOneWidget);
});
testWidgets('renders item widget reversed', (tester) async {
await tester.pumpWidget(wrap(const ItemWidget(text: 'Test Item', reversed: true)));
await tester.pumpAndSettle();
expect(find.byType(ItemWidget), findsOneWidget);
expect(find.text('Test Item'), findsOneWidget);
});
});
}
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/core/widgets/item_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ItemWidget smoke', () {
setUpAll(() async {
dotenv.loadFromString(envString: 'DEV_BASE_URL=http://localhost\nBASE_URL=http://localhost');
});
setUp(() async {
await sl.reset();
sl.registerLazySingleton<AppConfig>(() => AppConfig(buildType: AppBuildType.tests)..setBaseUrl('http://localhost'));
});
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders item widget', (tester) async {
await tester.pumpWidget(wrap(const ItemWidget(text: 'Test Item')));
await tester.pumpAndSettle();
expect(find.byType(ItemWidget), findsOneWidget);
expect(find.text('Test Item'), findsOneWidget);
});
testWidgets('renders item widget reversed', (tester) async {
await tester.pumpWidget(wrap(const ItemWidget(text: 'Test Item', reversed: true)));
await tester.pumpAndSettle();
expect(find.byType(ItemWidget), findsOneWidget);
expect(find.text('Test Item'), findsOneWidget);
});
});
}

View File

@@ -1,22 +1,22 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/loader.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('Loader smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders loader', (tester) async {
await tester.pumpWidget(wrap(const Loader()));
await tester.pump();
expect(find.byType(Loader), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/loader.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('Loader smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders loader', (tester) async {
await tester.pumpWidget(wrap(const Loader()));
await tester.pump();
expect(find.byType(Loader), findsOneWidget);
});
});
}

View File

@@ -1,37 +1,37 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/main_background_bouble.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('MainBackgroundBouble smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders main background bouble', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
expect(find.text('Test'), findsOneWidget);
});
testWidgets('renders main background bouble with error', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(hasError: true, child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
});
testWidgets('renders main background bouble with shadow', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(enableShadow: true, child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/main_background_bouble.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('MainBackgroundBouble smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders main background bouble', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
expect(find.text('Test'), findsOneWidget);
});
testWidgets('renders main background bouble with error', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(hasError: true, child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
});
testWidgets('renders main background bouble with shadow', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(enableShadow: true, child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
});
});
}

View File

@@ -1,93 +1,97 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/marketing_bottom_sheet.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('MarketingBottomSheet', () {
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Scaffold(
body: child,
),
);
}
testWidgets('displays marketing bottom sheet', (tester) async {
await tester.pumpWidget(
createTestWidget(
const MarketingBottomSheet(),
),
);
expect(find.byType(MarketingBottomSheet), findsOneWidget);
});
testWidgets('shows marketing bottom sheet via function', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showMarketingBottomSheet(context);
},
child: const Text('Show'),
),
);
},
),
),
);
await tester.tap(find.text('Show'));
await tester.pumpAndSettle();
expect(find.byType(MarketingBottomSheet), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/marketing_bottom_sheet.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('MarketingBottomSheet', () {
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Scaffold(
body: child,
),
);
}
testWidgets('displays marketing bottom sheet', (tester) async {
await tester.pumpWidget(
createTestWidget(
const MarketingBottomSheet(),
),
);
expect(find.byType(MarketingBottomSheet), findsOneWidget);
});
testWidgets('shows marketing bottom sheet via function', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showMarketingBottomSheet(context);
},
child: const Text('Show'),
),
);
},
),
),
);
await tester.tap(find.text('Show'));
await tester.pumpAndSettle();
expect(find.byType(MarketingBottomSheet), findsOneWidget);
});
});
}

View File

@@ -1,82 +1,86 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/option_widget.dart';
import 'package:eatvio_app/features/feed/models/plan_pagination_model.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('OptionWidget', () {
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Scaffold(body: child),
);
}
testWidgets('returns SizedBox.shrink when option is null', (tester) async {
await tester.pumpWidget(createTestWidget(const OptionWidget(option: null, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
expect(find.byType(SizedBox), findsWidgets);
});
testWidgets('displays option widget with option', (tester) async {
const option = PacketOptions(items: ['Item 1', 'Item 2'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: false);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
expect(find.text('Short'), findsOneWidget);
expect(find.text('Description'), findsOneWidget);
});
testWidgets('displays option widget with personal diet', (tester) async {
const option = PacketOptions(items: ['Item 1'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: true);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
});
testWidgets('hides duration when disableDuration is true', (tester) async {
const option = PacketOptions(items: ['Item 1'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: false);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7, disableDuration: true)));
expect(find.byType(OptionWidget), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/option_widget.dart';
import 'package:eatvio_app/features/feed/models/plan_pagination_model.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('OptionWidget', () {
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Scaffold(body: child),
);
}
testWidgets('returns SizedBox.shrink when option is null', (tester) async {
await tester.pumpWidget(createTestWidget(const OptionWidget(option: null, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
expect(find.byType(SizedBox), findsWidgets);
});
testWidgets('displays option widget with option', (tester) async {
const option = PacketOptions(items: ['Item 1', 'Item 2'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: false);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
expect(find.text('Short'), findsOneWidget);
expect(find.text('Description'), findsOneWidget);
});
testWidgets('displays option widget with personal diet', (tester) async {
const option = PacketOptions(items: ['Item 1'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: true);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
});
testWidgets('hides duration when disableDuration is true', (tester) async {
const option = PacketOptions(items: ['Item 1'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: false);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7, disableDuration: true)));
expect(find.byType(OptionWidget), findsOneWidget);
});
});
}