Implement 4-step mosaic flow, robust project autosave, and JSON export

This commit is contained in:
gary
2026-02-24 21:30:33 +01:00
parent 814705cac6
commit ab7aa625e6
4 changed files with 500 additions and 283 deletions

View File

@@ -0,0 +1,32 @@
import 'dart:typed_data';
import 'package:flutter_test/flutter_test.dart';
import 'package:korken_mosaic/project_codec.dart';
void main() {
test('MosaicProjectData json roundtrip keeps values', () {
final original = MosaicProjectData(
useCapSize: true,
gridWidth: '50',
gridHeight: '40',
capSize: '10',
fidelityStructure: 0.3,
ditheringStrength: 0.2,
edgeEmphasis: 0.4,
colorVariation: 0.5,
selectedPreset: 'realistisch',
sourceImageBytes: Uint8List.fromList([1, 2, 3]),
savedAt: DateTime.parse('2026-01-01T12:00:00Z'),
);
final decoded = MosaicProjectData.fromJson(original.toJson());
expect(decoded.useCapSize, isTrue);
expect(decoded.gridWidth, '50');
expect(decoded.gridHeight, '40');
expect(decoded.capSize, '10');
expect(decoded.selectedPreset, 'realistisch');
expect(decoded.sourceImageBytes, isNotNull);
expect(decoded.sourceImageBytes!, [1, 2, 3]);
});
}

24
test/widget_test.dart Normal file
View File

@@ -0,0 +1,24 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:korken_mosaic/main.dart';
void main() {
testWidgets('shows 4-step workflow and can navigate to result step',
(WidgetTester tester) async {
await tester.pumpWidget(const KorkenMosaicApp());
expect(find.text('1) Bild'), findsOneWidget);
expect(find.text('2) Größe'), findsOneWidget);
expect(find.text('3) Farben'), findsOneWidget);
expect(find.text('4) Ergebnis'), findsOneWidget);
await tester.tap(find.text('Weiter'));
await tester.pumpAndSettle();
await tester.tap(find.text('Weiter'));
await tester.pumpAndSettle();
await tester.tap(find.text('Weiter'));
await tester.pumpAndSettle();
expect(find.byKey(const Key('generate-btn')), findsOneWidget);
expect(find.text('Export JSON'), findsOneWidget);
});
}