import 'package:fintracker_api/fintracker_api.dart'; import 'package:fintracker_app/core/api/common_providers.dart'; import 'package:fintracker_app/features/settings/settings_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences/shared_preferences.dart'; Future _pump(WidgetTester tester, double width) async { SharedPreferences.setMockInitialValues({}); tester.view.physicalSize = Size(width, 900); tester.view.devicePixelRatio = 1; addTearDown(tester.view.reset); await tester.pumpWidget( ProviderScope( overrides: [ meProvider.overrideWith( (ref) async => UserOut(email: 'ada@example.com', id: 1), ), ], child: const MaterialApp(home: Scaffold(body: SettingsPage())), ), ); await tester.pumpAndSettle(); } void main() { testWidgets('tabs along the top, the tab\'s sections in a menu on the left', ( tester, ) async { await _pump(tester, 1200); for (final tab in ['Аккаунт', 'Отображение', 'Сервер']) { expect(find.text(tab), findsOneWidget, reason: tab); } // the first tab opens on its first section expect(find.text('Приватные данные'), findsOneWidget); expect(find.text('Безопасность'), findsOneWidget); expect(find.text('ada@example.com'), findsOneWidget); await tester.tap(find.text('Безопасность')); await tester.pumpAndSettle(); expect(find.text('Выйти'), findsOneWidget); expect(find.text('ada@example.com'), findsNothing); }); testWidgets('switching the tab resets to its first section', (tester) async { await _pump(tester, 1200); await tester.tap(find.text('Безопасность')); await tester.pumpAndSettle(); await tester.tap(find.text('Сервер')); await tester.pumpAndSettle(); expect(find.text('Адрес API'), findsWidgets); expect(find.text('О приложении'), findsOneWidget); expect(find.text('Изменить'), findsOneWidget); await tester.tap(find.text('Отображение')); await tester.pumpAndSettle(); expect(find.text('Тёмная'), findsOneWidget); }); testWidgets('a narrow surface turns the menu into chips above the panel', ( tester, ) async { await _pump(tester, 500); expect(find.byType(ChoiceChip), findsNWidgets(2)); expect(find.text('ada@example.com'), findsOneWidget); await tester.tap(find.widgetWithText(ChoiceChip, 'Безопасность')); await tester.pumpAndSettle(); expect(find.text('Выйти'), findsOneWidget); }); }