Files
ReelShort/test/download/download_storage_test.dart
T

43 lines
1.5 KiB
Dart

// 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<int>.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 = <double>[];
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);
});
}