Implement 4-step mosaic flow, robust project autosave, and JSON export
This commit is contained in:
32
test/project_codec_test.dart
Normal file
32
test/project_codec_test.dart
Normal 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
24
test/widget_test.dart
Normal 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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user