Адрес бэкенда хранится в shared_preferences и читается до runApp; switchApiBaseUrl сбрасывает токены и кэш старого сервера. Выход стирает refresh-токен и sqlite-кэш ответов. Экран настроек переделан под разделы.
76 lines
2.7 KiB
Dart
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);
|
|
});
|
|
}
|