Files
ertl_filament_verwaltung/test/widget_test.dart
T
2026-10-27 15:00:16 +01:00

118 lines
3.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:get/get.dart';
import 'package:ertl_filament_verwaltung/controller/home_controller.dart';
import 'package:ertl_filament_verwaltung/models/kauf_filament_model.dart';
import 'package:ertl_filament_verwaltung/pages/home_view.dart';
import 'package:ertl_filament_verwaltung/services/get_storage_services.dart';
import 'package:ertl_filament_verwaltung/theme/app_theme.dart';
import 'package:ertl_filament_verwaltung/widgets/filament_card.dart';
import 'package:ertl_filament_verwaltung/widgets/filament_form.dart';
import 'helpers/memory_storage_service.dart';
void main() {
late HomeController controller;
setUp(() {
Get.testMode = true;
Get.put<GetStorageService>(MemoryStorageService());
controller = Get.put(HomeController());
});
tearDown(() => Get.reset());
Future<void> showHome(WidgetTester tester, Size size) async {
tester.view.physicalSize = size;
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
await tester.pumpWidget(
GetMaterialApp(theme: AppTheme.light, home: const HomeView()),
);
await tester.pumpAndSettle();
}
KaufFilamentModel sample() => KaufFilamentModel(
filamentId: 'sample',
kaufdatum: DateTime(2026, 10, 27),
haendler: 'Filament Shop',
marke: 'Testmarke',
material: 'PLA+',
preis: 24.90,
farbe: 'Ozeanblau',
gewicht: '1000',
);
testWidgets('Desktop shows both panes and edits PLA+', (tester) async {
controller.filamente.add(sample());
await showHome(tester, const Size(1280, 900));
expect(
tester.getTopLeft(find.byType(FilamentCard)).dx,
greaterThan(tester.getTopRight(find.byType(FilamentForm)).dx),
);
expect(find.text('1000 g'), findsOneWidget);
expect(find.text('Testmarke'), findsOneWidget);
await tester.tap(find.byTooltip('Filament verwalten'));
await tester.pumpAndSettle();
await tester.tap(find.text('Bearbeiten'));
await tester.pumpAndSettle();
expect(find.text('Filament bearbeiten'), findsOneWidget);
expect(controller.markeController.text, 'Testmarke');
expect(controller.material.value, 'PLA+');
expect(tester.takeException(), isNull);
});
testWidgets('Small phone scrolls to save and shows the purchase', (
tester,
) async {
await showHome(tester, const Size(320, 640));
controller.haendlerController.text = 'Filament Shop';
controller.markeController.text = 'Testmarke';
controller.farbeController.text = 'Ozeanblau';
controller.preisController.text = '24,90';
controller.gewichtController.text = '1000';
await tester.scrollUntilVisible(
find.text('Filament speichern'),
200,
scrollable: find.byType(Scrollable).first,
);
await tester.pumpAndSettle();
await tester.tap(find.text('Filament speichern'));
await tester.pumpAndSettle();
expect(controller.filamente, hasLength(1));
await tester.scrollUntilVisible(
find.byType(FilamentCard),
200,
scrollable: find.byType(Scrollable).first,
);
await tester.pumpAndSettle();
expect(find.text('Testmarke'), findsOneWidget);
expect(find.text('1000 g'), findsOneWidget);
expect(tester.takeException(), isNull);
});
testWidgets('Empty inventory is accessible on a narrow screen', (
tester,
) async {
await showHome(tester, const Size(320, 640));
await tester.scrollUntilVisible(
find.text('Hier beginnt dein Bestand'),
200,
scrollable: find.byType(Scrollable).first,
);
await tester.pumpAndSettle();
expect(
find.text('Hier beginnt dein Bestand').hitTestable(),
findsOneWidget,
);
expect(tester.takeException(), isNull);
});
}