import 'package:flutter_test/flutter_test.dart'; import 'package:receipity/services/backup_format.dart'; void main() { test('round-trips a backup document', () { const original = BackupDocument( version: 2, exportedAt: '2026-08-29T12:00:00.000', darkMode: true, supermarkets: [ {'id': 1, 'name': 'Jumbo', 'color': 0xFFEEC21B, 'sort_order': 0}, ], products: [ { 'id': 1, 'name': 'Milk', 'normalized_name': 'MILK', 'last_price': 1.5, 'times_seen': 2, 'favourite': 1, 'image_path': 'products/product_1.jpg', 'supermarket': 'Jumbo', 'notes': 'Organic', 'created_at': '2026-08-29T12:00:00.000', 'updated_at': '2026-08-29T12:00:00.000', }, ], shops: [ { 'id': 8, 'supermarket': 'Jumbo', 'shopped_at': '2026-08-29T12:00:00.000', 'receipt_image_path': 'receipts/shop_8.jpg', 'total': 1.5, 'created_at': '2026-08-29T12:00:00.000', }, ], shopItems: [ { 'id': 1, 'shop_id': 8, 'product_id': 1, 'name': 'Milk', 'price': 1.5, 'quantity': 1, 'unit_price': 1.5, }, ], shoppingLists: [ { 'id': 1, 'name': 'Weekly', 'created_at': '2026-08-29T12:00:00.000', 'updated_at': '2026-08-29T12:00:00.000', }, ], shoppingListItems: [ { 'id': 1, 'list_id': 1, 'product_id': 1, 'name': 'Milk', 'checked': 0, 'sort_order': 0, }, ], images: {'products/product_1.jpg': 'abc123'}, ); final parsed = BackupDocument.parse(original.encode()); expect(parsed.darkMode, isTrue); expect(parsed.products.single['name'], 'Milk'); expect(parsed.shops.single['id'], 8); expect(parsed.shopItems.single['product_id'], 1); expect(parsed.shoppingLists.single['name'], 'Weekly'); expect(parsed.shoppingListItems.single['name'], 'Milk'); expect(parsed.images['products/product_1.jpg'], 'abc123'); }); test('accepts a version 1 backup without shopping lists', () { const json = ''' { "format": "receipity-backup", "version": 1, "exportedAt": "2026-08-29T12:00:00.000", "darkMode": false, "supermarkets": [], "products": [], "shops": [], "shopItems": [], "images": {} } '''; final parsed = BackupDocument.parse(json); expect(parsed.version, 1); expect(parsed.shoppingLists, isEmpty); expect(parsed.shoppingListItems, isEmpty); }); test('rejects a file that is not a Receipity backup', () { expect( () => BackupDocument.parse('{"hello":"world"}'), throwsFormatException, ); }); test('maps stored photo paths to backup keys', () { expect( backupImageKey('/data/app_flutter/products/product_12.jpg'), 'products/product_12.jpg', ); expect( backupImageKey('/data/app_flutter/receipts/shop_3.jpg'), 'receipts/shop_3.jpg', ); expect(backupImageKey(null), isNull); }); }