43 lines
1.5 KiB
Dart
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);
|
|
});
|
|
}
|