Files
ReelShort/test/mine/server_endpoint_setting_test.dart
T

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();
}