102 lines
3.3 KiB
Dart
102 lines
3.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart';
|
|
import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart';
|
|
|
|
import 'package:fruitshorts/core/config/locale_controller.dart';
|
|
import 'package:fruitshorts/core/config/server_endpoint.dart';
|
|
import 'package:fruitshorts/core/data/models/drama.dart';
|
|
import 'package:fruitshorts/core/data/repositories/watch_history_repository.dart';
|
|
import 'package:fruitshorts/l10n/app_localizations.dart';
|
|
import 'package:fruitshorts/pages/mine/mine_logic.dart';
|
|
|
|
const _drama = Drama(
|
|
id: 'drama-1',
|
|
title: 'The Signal',
|
|
synopsis: 'synopsis',
|
|
posterUrl: '/files/1.jpg',
|
|
);
|
|
|
|
void main() {
|
|
setUp(() {
|
|
SharedPreferencesAsyncPlatform.instance =
|
|
InMemorySharedPreferencesAsync.empty();
|
|
});
|
|
|
|
testWidgets('should_show_server_address_when_debug_entry_is_enabled', (
|
|
tester,
|
|
) async {
|
|
await _pumpSettings(tester, showServerSetting: true);
|
|
expect(find.byKey(const Key('server-endpoint-setting')), findsOneWidget);
|
|
expect(find.text('Server address'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('should_hide_server_address_when_debug_entry_is_disabled', (
|
|
tester,
|
|
) async {
|
|
await _pumpSettings(tester, showServerSetting: false);
|
|
expect(find.byKey(const Key('server-endpoint-setting')), findsNothing);
|
|
expect(find.text('Server address'), findsNothing);
|
|
});
|
|
|
|
testWidgets('should_reject_invalid_server_address_without_saving', (
|
|
tester,
|
|
) async {
|
|
await _pumpSettings(tester, showServerSetting: true);
|
|
await tester.tap(find.byKey(const Key('server-endpoint-setting')));
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(find.text('Restart the app to apply.'), findsOneWidget);
|
|
await tester.enterText(
|
|
find.byKey(const Key('server-endpoint-input')),
|
|
'ftp://invalid',
|
|
);
|
|
await tester.tap(find.byKey(const Key('server-endpoint-save')));
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(find.text('Enter a valid http(s) server address.'), findsOneWidget);
|
|
expect(
|
|
await SharedPreferencesAsync().getString(ServerEndpoint.preferenceKey),
|
|
isNull,
|
|
);
|
|
});
|
|
}
|
|
|
|
Future<void> _pumpSettings(
|
|
WidgetTester tester, {
|
|
required bool showServerSetting,
|
|
}) async {
|
|
final logic = MineLogic(
|
|
history: InMemoryWatchHistoryRepository(),
|
|
drama: _drama,
|
|
initialSection: 0,
|
|
);
|
|
addTearDown(logic.dispose);
|
|
await tester.pumpWidget(
|
|
ChangeNotifierProvider(
|
|
create: (_) => LocaleController(),
|
|
child: MaterialApp(
|
|
locale: const Locale('en'),
|
|
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
|
supportedLocales: AppLocalizations.supportedLocales,
|
|
home: Builder(
|
|
builder: (context) => Scaffold(
|
|
body: TextButton(
|
|
key: const Key('open-settings'),
|
|
onPressed: () => logic.showLanguage(
|
|
context,
|
|
showServerSetting: showServerSetting,
|
|
),
|
|
child: const Text('Open settings'),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
await tester.tap(find.byKey(const Key('open-settings')));
|
|
await tester.pumpAndSettle();
|
|
}
|