add import export and items

This commit is contained in:
atseirjo
2026-10-28 08:10:55 +01:00
parent 07a1bb02fd
commit 4a1731f986
22 changed files with 1118 additions and 106 deletions
+103
View File
@@ -3,6 +3,7 @@ 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/helper/storage_keys.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';
@@ -114,4 +115,106 @@ void main() {
);
expect(tester.takeException(), isNull);
});
testWidgets('Custom material can be typed, selected and removed on a phone', (
tester,
) async {
await showHome(tester, const Size(320, 640));
final field = find.byWidgetPredicate(
(widget) =>
widget is TextFormField &&
widget.controller == controller.materialController,
);
await tester.ensureVisible(field);
await tester.enterText(field, 'PA12');
await tester.testTextInput.receiveAction(TextInputAction.done);
await tester.ensureVisible(find.text('Art hinzufügen'));
await tester.tap(find.text('Art hinzufügen'));
await tester.pumpAndSettle();
expect(controller.materialien, contains('PA12'));
await Scrollable.ensureVisible(
tester.element(find.byTooltip('Material auswählen')),
alignment: 0.5,
);
await tester.pumpAndSettle();
await tester.tap(find.byTooltip('Material auswählen'));
await tester.pumpAndSettle();
await tester.tap(find.text('PETG').last);
await tester.pumpAndSettle();
expect(controller.materialController.text, 'PETG');
await tester.ensureVisible(find.text('Arten verwalten'));
await tester.tap(find.text('Arten verwalten'));
await tester.pumpAndSettle();
await tester.scrollUntilVisible(
find.byTooltip('PA12 aus Liste entfernen'),
180,
scrollable: find.descendant(
of: find.byType(AlertDialog),
matching: find.byType(Scrollable),
),
);
await tester.tap(find.byTooltip('PA12 aus Liste entfernen'));
await tester.pumpAndSettle();
expect(controller.materialien, isNot(contains('PA12')));
expect(tester.takeException(), isNull);
await tester.tap(find.text('Schließen'));
await tester.pumpAndSettle();
final reloaded = Get.put(HomeController(), tag: 'materials-reload');
expect(reloaded.materialien, isNot(contains('PA12')));
});
testWidgets('Saving adds custom material and removal preserves purchases', (
tester,
) async {
await showHome(tester, const Size(1280, 900));
controller.haendlerController.text = 'Shop';
controller.markeController.text = 'Marke';
controller.farbeController.text = 'Rot';
controller.preisController.text = '20';
controller.gewichtController.text = '1000';
controller.materialController.text = ' PA12 ';
await controller.saveFilament();
expect(controller.filamente.single.material, 'PA12');
final reloaded = Get.put(HomeController(), tag: 'custom-reload');
expect(reloaded.materialien, contains('PA12'));
await controller.removeMaterial('PA12');
await controller.editFilament(controller.filamente.single);
await tester.pumpAndSettle();
expect(controller.materialController.text, 'PA12');
expect(controller.materialien, isNot(contains('PA12')));
expect(controller.filamente.single.material, 'PA12');
expect(tester.takeException(), isNull);
});
test(
'An empty material list survives reload and failed writes keep the list',
() async {
final storage = Get.find<GetStorageService>() as MemoryStorageService;
controller.materialController.text = 'pa12';
expect(await controller.addMaterial(), isTrue);
controller.materialController.text = ' PA12 ';
expect(await controller.addMaterial(), isTrue);
expect(
controller.materialien.where((item) => item.toLowerCase() == 'pa12'),
hasLength(1),
);
storage.failWrites = true;
expect(await controller.removeMaterial('pa12'), isFalse);
expect(controller.materialien, contains('pa12'));
expect(controller.materialMessage.value, isNotNull);
storage.failWrites = false;
for (final value in controller.materialien.toList()) {
await controller.removeMaterial(value);
}
final reloaded = Get.put(HomeController(), tag: 'empty-reload');
expect(reloaded.materialien, isEmpty);
expect(reloaded.materialController.text, isEmpty);
expect(
storage.getModelList(StorageKeys.materialien).single['werte'],
isEmpty,
);
},
);
}