137 lines
4.8 KiB
Dart
137 lines
4.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/anwendung_controller.dart';
|
|
import 'package:ertl_filament_verwaltung/controller/bauteil_controller.dart';
|
|
import 'package:ertl_filament_verwaltung/controller/home_controller.dart';
|
|
import 'package:ertl_filament_verwaltung/helper/storage_keys.dart';
|
|
import 'package:ertl_filament_verwaltung/main.dart';
|
|
import 'package:ertl_filament_verwaltung/models/bauteil_model.dart';
|
|
import 'package:ertl_filament_verwaltung/models/kauf_filament_model.dart';
|
|
import 'package:ertl_filament_verwaltung/pages/anwendung_view.dart';
|
|
import 'package:ertl_filament_verwaltung/pages/bauteil_view.dart';
|
|
import 'package:ertl_filament_verwaltung/pages/export_view.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/widgets/bauteil_card.dart';
|
|
import 'package:ertl_filament_verwaltung/widgets/filament_card.dart';
|
|
|
|
import 'helpers/memory_storage_service.dart';
|
|
|
|
void main() {
|
|
setUp(() {
|
|
Get.testMode = true;
|
|
final storage = MemoryStorageService();
|
|
storage.tables[StorageKeys.filamente] = [
|
|
KaufFilamentModel(
|
|
filamentId: 'filament',
|
|
kaufdatum: DateTime(2026),
|
|
haendler: 'Ein Händler mit einem besonders langen Namen',
|
|
marke: 'Eine besonders lange Filamentmarke',
|
|
material: 'Benutzerdefiniertes Material mit langem Namen',
|
|
preis: 12345.67,
|
|
farbe: 'Ein lang beschriebener Farbton',
|
|
gewicht: '1000',
|
|
).toJson(),
|
|
];
|
|
storage.tables[StorageKeys.bauteile] = [
|
|
BauteilModel(
|
|
bauteilId: 'part',
|
|
erstelltAm: DateTime(2026),
|
|
name: 'Ein besonders lang benanntes Bauteil',
|
|
verwendung: 'Eine ausführliche Beschreibung der Verwendung',
|
|
druckdauerMinuten: 120,
|
|
gewichtGramm: 40,
|
|
abfallGramm: 10,
|
|
filamente: [
|
|
const BauteilFilamentModel(
|
|
filamentId: 'filament',
|
|
verbrauchGramm: 50,
|
|
),
|
|
],
|
|
).toJson(),
|
|
];
|
|
Get.put<GetStorageService>(storage);
|
|
});
|
|
tearDown(() => Get.reset());
|
|
|
|
Future<void> resize(WidgetTester tester, double width) async {
|
|
tester.view.physicalSize = Size(width, 640);
|
|
await tester.pumpAndSettle();
|
|
expect(tester.takeException(), isNull, reason: 'Width $width');
|
|
}
|
|
|
|
for (final route in [
|
|
HomeView.routeName,
|
|
BauteilView.routeName,
|
|
'${AnwendungView.routeName}/filament',
|
|
ExportView.routeName,
|
|
]) {
|
|
testWidgets(
|
|
'$route survives resizing across desktop and narrow browser widths',
|
|
(tester) async {
|
|
tester.view.physicalSize = const Size(1280, 640);
|
|
tester.view.devicePixelRatio = 1;
|
|
addTearDown(tester.view.resetPhysicalSize);
|
|
addTearDown(tester.view.resetDevicePixelRatio);
|
|
await tester.pumpWidget(const MyApp());
|
|
await tester.pumpAndSettle();
|
|
if (route != HomeView.routeName) {
|
|
Get.toNamed(route);
|
|
await tester.pumpAndSettle();
|
|
}
|
|
if (route == BauteilView.routeName) {
|
|
Get.find<BauteilController>().toggleFilament('filament', true);
|
|
}
|
|
if (route.startsWith(AnwendungView.routeName)) {
|
|
Get.find<AnwendungController>().sonstigesController.text = 'Entwurf';
|
|
}
|
|
for (final width in [
|
|
900.0,
|
|
899.0,
|
|
600.0,
|
|
360.0,
|
|
320.0,
|
|
240.0,
|
|
320.0,
|
|
1280.0,
|
|
]) {
|
|
await resize(tester, width);
|
|
expect(Get.currentRoute, route);
|
|
if (route == HomeView.routeName || route == BauteilView.routeName) {
|
|
final card = route == HomeView.routeName
|
|
? find.byType(FilamentCard)
|
|
: find.byType(BauteilCard);
|
|
final scroll = route == HomeView.routeName
|
|
? Get.find<HomeController>().pageScrollController
|
|
: Get.find<BauteilController>().scrollController;
|
|
scroll.jumpTo(scroll.position.maxScrollExtent);
|
|
await tester.pumpAndSettle();
|
|
expect(card, findsOneWidget);
|
|
expect(
|
|
tester.takeException(),
|
|
isNull,
|
|
reason: 'Card at width $width',
|
|
);
|
|
scroll.jumpTo(0);
|
|
await tester.pumpAndSettle();
|
|
}
|
|
}
|
|
if (route.startsWith(AnwendungView.routeName)) {
|
|
expect(
|
|
Get.find<AnwendungController>().sonstigesController.text,
|
|
'Entwurf',
|
|
);
|
|
}
|
|
if (route == BauteilView.routeName) {
|
|
expect(
|
|
Get.find<BauteilController>().selectedFilamente,
|
|
contains('filament'),
|
|
);
|
|
}
|
|
},
|
|
);
|
|
}
|
|
}
|