// Author: fruit.com.cn import 'dart:io'; import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:fruitshorts/core/data/services/download_storage.dart'; void main() { test('should_write_media_file_and_report_progress_when_download_completes', () async { final directory = await Directory.systemTemp.createTemp('fruit-download-'); final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0); final payload = Uint8List.fromList(List.generate(4096, (i) => i % 251)); server.listen((request) async { request.response.headers.contentLength = payload.length; request.response.add(payload); await request.response.close(); }); addTearDown(() async { await server.close(force: true); await directory.delete(recursive: true); }); final storage = FileDownloadStorage(directoryProvider: () async => directory); final progress = []; final media = await storage.download( episodeId: 'ep-1', url: 'http://127.0.0.1:${server.port}/episode.mp4', onProgress: (received, total) => progress.add(total == 0 ? 0 : received / total), ); expect(File(media.filePath).existsSync(), isTrue); expect(media.bytes, payload.length); expect(progress.last, 1.0); final localPath = await storage.localPathFor('ep-1'); expect(localPath, isNotNull); expect(File(localPath!).existsSync(), isTrue); await storage.delete('ep-1'); expect(await storage.localPathFor('ep-1'), isNull); }); }