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 including catalog snapshot', () { 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]), catalogSnapshot: const [ MosaicPaletteSnapshotEntry(name: 'White', colorValue: 0xFFF2F2F2), MosaicPaletteSnapshotEntry(name: 'Blue', colorValue: 0xFF3F6FD8), ], 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]); expect(decoded.catalogSnapshot.length, 2); expect(decoded.catalogSnapshot.first.name, 'White'); expect(decoded.catalogSnapshot.last.colorValue, 0xFF3F6FD8); }); test('MosaicProjectData defaults to empty snapshot when old project has none', () { final decoded = MosaicProjectData.fromJson({ 'useCapSize': false, 'gridWidth': '40', 'gridHeight': '30', 'capSize': '12', 'selectedPreset': 'ausgewogen', 'savedAt': '2026-01-01T12:00:00Z', }); expect(decoded.catalogSnapshot, isEmpty); expect(decoded.sourceImageBytes, isNull); }); }