blob: 746ac01ee3c36ff7679deea648aecc96f47ed484 [file] [log] [blame]
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:{{projectName}}/src/app.dart';
import 'package:{{projectName}}/src/sample_feature/sample_item_details_view.dart';
import 'package:{{projectName}}/src/settings/settings_controller.dart';
import 'package:{{projectName}}/src/settings/settings_service.dart';
import 'package:{{projectName}}/src/settings/settings_view.dart';
void main() {
group('ListDetailApp', () {
testWidgets('displays a list of items', (WidgetTester tester) async {
final service = SettingsService();
final controller = SettingsController(service);
await controller.loadSettings();
await tester.pumpWidget(MyApp(settingsController: controller));
expect(find.byType(ListTile), findsNWidgets(3));
});
testWidgets('navigates to an item page', (WidgetTester tester) async {
final service = SettingsService();
final controller = SettingsController(service);
await controller.loadSettings();
await tester.pumpWidget(MyApp(settingsController: controller));
await tester.tap(find.byType(ListTile).first);
await tester.pumpAndSettle();
expect(find.byType(SampleItemDetailsView), findsOneWidget);
});
testWidgets('changes the app theme', (WidgetTester tester) async {
final service = SettingsService();
final controller = SettingsController(service);
// Navigate to Settings
await controller.loadSettings();
await tester.pumpWidget(MyApp(settingsController: controller));
await tester.tap(find.byType(IconButton));
await tester.pumpAndSettle();
// Verify defaults in place
expect(controller.themeMode, ThemeMode.system);
expect(find.byType(SettingsView), findsOneWidget);
expect(findApp(ThemeMode.system), findsOneWidget);
// Change to Dark Theme
await tester.tap(find.text('System Theme'));
await tester.pumpAndSettle();
await tester.tap(find.text('Dark Theme').last);
await tester.pumpAndSettle();
// Verify Dark Theme rendered
expect(controller.themeMode, ThemeMode.dark);
expect(findApp(ThemeMode.dark), findsOneWidget);
// Change to Light Theme
await tester.tap(find.text('Dark Theme'));
await tester.pumpAndSettle();
await tester.tap(find.text('Light Theme').last);
await tester.pumpAndSettle();
// Verify light theme enabled
expect(controller.themeMode, ThemeMode.light);
expect(findApp(ThemeMode.light), findsOneWidget);
});
});
}
Finder findApp(ThemeMode themeMode) => find.byWidgetPredicate(
(widget) => widget is MaterialApp && widget.themeMode == themeMode,
);