import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:file_picker/file_picker.dart'; import 'package:ikar/core/utils/save_file_as.dart'; import 'package:ikar/core/utils/media_saver.dart'; class _Picker extends FilePicker { final String? directory; _Picker(this.directory); @override Future getDirectoryPath({String? dialogTitle, bool lockParentWindow = false, String? initialDirectory}) async => directory; } void main() { TestWidgetsFlutterBinding.ensureInitialized(); test('save as preserves an existing file and copies bytes to a new name', () async { final dir = await Directory.systemTemp.createTemp('qlyra_export_'); addTearDown(() async { FilePicker.platform = _Picker(null); await dir.delete(recursive: true); }); FilePicker.platform = _Picker(dir.path); final source = File('${dir.path}/source.bin'); await source.writeAsBytes([1, 2, 3]); final existing = File('${dir.path}/export.bin'); await existing.writeAsBytes([9]); final result = await saveFileAs(source: source, fileName: 'export.bin', dialogTitle: 'Save'); expect(result.saved, isTrue); expect(await File(result.path!).readAsBytes(), [1, 2, 3]); expect(await existing.readAsBytes(), [9]); FilePicker.platform = _Picker(null); final cancelled = await saveFileAs(source: source, fileName: 'export.bin', dialogTitle: 'Save'); expect(cancelled.cancelled, isTrue); expect(cancelled.saved, isFalse); }); test('missing local media reports failure', () async { final dir = await Directory.systemTemp.createTemp('qlyra_missing_'); addTearDown(() => dir.delete(recursive: true)); final result = await saveLocalMedia(File('${dir.path}/missing.mp4'), saveName: 'video.mp4', kind: SaveMediaKind.video); expect(result.ok, isFalse); }); }