Files
fin-tracker/app/test/settings_page_test.dart
Dmitry a559d6de3e feat(app): смена сервера API и очистка данных устройства при выходе
Адрес бэкенда хранится в shared_preferences и читается до runApp; switchApiBaseUrl сбрасывает токены и кэш старого сервера. Выход стирает refresh-токен и sqlite-кэш ответов. Экран настроек переделан под разделы.
2026-09-19 22:14:14 +03:00

76 lines
2.7 KiB
Dart

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<void> _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);
});
}