Files
hartmann-foto_documentation/hartmann-foto-documentation-frontend/test/main_test.dart
2026-01-27 14:09:12 +01:00

147 lines
4.9 KiB
Dart

import 'dart:ui' show PointerDeviceKind;
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:fotodocumentation/main.dart';
import 'package:fotodocumentation/utils/di_container.dart';
import 'package:fotodocumentation/utils/login_credentials.dart';
import 'package:fotodocumentation/utils/main_utils.dart';
import 'testing/test_utils.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
DiContainer.instance.initState();
DiContainer.instance.put(LoginCredentials, getDefaultLoginCredentials());
group('FotoDocumentationApp', () {
testWidgets('renders MaterialApp with router', (WidgetTester tester) async {
setScreenSize(tester, 1024, 1024);
await tester.pumpWidget(
FotoDocumentationApp(theme: ThemeData.light()),
);
await tester.pumpAndSettle();
// Verify MaterialApp.router is used
expect(find.byType(MaterialApp), findsOneWidget);
});
testWidgets('has correct app title', (WidgetTester tester) async {
setScreenSize(tester, 1024, 1024);
await tester.pumpWidget(
FotoDocumentationApp(theme: ThemeData.light()),
);
await tester.pumpAndSettle();
// Find the MaterialApp and verify its title
final materialApp = tester.widget<MaterialApp>(find.byType(MaterialApp));
expect(materialApp.title, equals('Hartmann Foto App'));
});
testWidgets('uses custom scroll behavior', (WidgetTester tester) async {
setScreenSize(tester, 1024, 1024);
await tester.pumpWidget(
FotoDocumentationApp(theme: ThemeData.light()),
);
await tester.pumpAndSettle();
// Find the MaterialApp and verify its scrollBehavior type
final materialApp = tester.widget<MaterialApp>(find.byType(MaterialApp));
expect(materialApp.scrollBehavior, isA<MyCustomScrollBehavior>());
});
testWidgets('supports German locale', (WidgetTester tester) async {
setScreenSize(tester, 1024, 1024);
await tester.pumpWidget(
FotoDocumentationApp(theme: ThemeData.light()),
);
await tester.pumpAndSettle();
// Find the MaterialApp and verify German is in supported locales
final materialApp = tester.widget<MaterialApp>(find.byType(MaterialApp));
expect(materialApp.supportedLocales, contains(const Locale('de')));
});
testWidgets('has localization delegates configured', (WidgetTester tester) async {
setScreenSize(tester, 1024, 1024);
await tester.pumpWidget(
FotoDocumentationApp(theme: ThemeData.light()),
);
await tester.pumpAndSettle();
// Find the MaterialApp and verify localization delegates are set
final materialApp = tester.widget<MaterialApp>(find.byType(MaterialApp));
expect(materialApp.localizationsDelegates, isNotNull);
expect(materialApp.localizationsDelegates!.length, equals(4));
});
testWidgets('applies provided theme', (WidgetTester tester) async {
setScreenSize(tester, 1024, 1024);
final customTheme = ThemeData(
primarySwatch: Colors.blue,
brightness: Brightness.light,
);
await tester.pumpWidget(
FotoDocumentationApp(theme: customTheme),
);
await tester.pumpAndSettle();
// Find the MaterialApp and verify the theme is applied
final materialApp = tester.widget<MaterialApp>(find.byType(MaterialApp));
expect(materialApp.theme, equals(customTheme));
});
testWidgets('applies dark theme when provided', (WidgetTester tester) async {
setScreenSize(tester, 1024, 1024);
final darkTheme = ThemeData.dark();
await tester.pumpWidget(
FotoDocumentationApp(theme: darkTheme),
);
await tester.pumpAndSettle();
// Find the MaterialApp and verify the dark theme is applied
final materialApp = tester.widget<MaterialApp>(find.byType(MaterialApp));
expect(materialApp.theme, equals(darkTheme));
});
testWidgets('uses router config', (WidgetTester tester) async {
setScreenSize(tester, 1024, 1024);
await tester.pumpWidget(
FotoDocumentationApp(theme: ThemeData.light()),
);
await tester.pumpAndSettle();
// Find the MaterialApp and verify routerConfig is set
final materialApp = tester.widget<MaterialApp>(find.byType(MaterialApp));
expect(materialApp.routerConfig, isNotNull);
});
});
group('MyCustomScrollBehavior', () {
test('includes touch pointer device', () {
final scrollBehavior = MyCustomScrollBehavior();
expect(scrollBehavior.dragDevices, contains(PointerDeviceKind.touch));
});
test('includes mouse pointer device', () {
final scrollBehavior = MyCustomScrollBehavior();
expect(scrollBehavior.dragDevices, contains(PointerDeviceKind.mouse));
});
test('extends MaterialScrollBehavior', () {
final scrollBehavior = MyCustomScrollBehavior();
expect(scrollBehavior, isA<MaterialScrollBehavior>());
});
});
}