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(MemoryStorageService()); controller = Get.put(HomeController()); }); tearDown(() => Get.reset()); Future 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); }); }