mirror of
https://gitlab.com/foxixus/neomovies_mobile.git
synced 2025-10-28 03:18:49 +05:00
196 lines
5.8 KiB
Dart
196 lines
5.8 KiB
Dart
|
|
import 'package:flutter_test/flutter_test.dart';
|
||
|
|
import 'package:neomovies_mobile/data/models/torrent_info.dart';
|
||
|
|
|
||
|
|
void main() {
|
||
|
|
group('TorrentInfo', () {
|
||
|
|
test('fromAndroidJson creates valid TorrentInfo', () {
|
||
|
|
final json = {
|
||
|
|
'infoHash': 'test_hash',
|
||
|
|
'name': 'Test Torrent',
|
||
|
|
'totalSize': 1024000000,
|
||
|
|
'progress': 0.5,
|
||
|
|
'downloadSpeed': 1024000,
|
||
|
|
'uploadSpeed': 512000,
|
||
|
|
'numSeeds': 10,
|
||
|
|
'numPeers': 5,
|
||
|
|
'state': 'DOWNLOADING',
|
||
|
|
'savePath': '/test/path',
|
||
|
|
'files': [
|
||
|
|
{
|
||
|
|
'path': 'test.mp4',
|
||
|
|
'size': 1024000000,
|
||
|
|
'priority': 4,
|
||
|
|
'progress': 0.5,
|
||
|
|
}
|
||
|
|
],
|
||
|
|
'pieceLength': 16384,
|
||
|
|
'numPieces': 62500,
|
||
|
|
'addedTime': 1640995200000,
|
||
|
|
};
|
||
|
|
|
||
|
|
final torrentInfo = TorrentInfo.fromAndroidJson(json);
|
||
|
|
|
||
|
|
expect(torrentInfo.infoHash, equals('test_hash'));
|
||
|
|
expect(torrentInfo.name, equals('Test Torrent'));
|
||
|
|
expect(torrentInfo.totalSize, equals(1024000000));
|
||
|
|
expect(torrentInfo.progress, equals(0.5));
|
||
|
|
expect(torrentInfo.downloadSpeed, equals(1024000));
|
||
|
|
expect(torrentInfo.uploadSpeed, equals(512000));
|
||
|
|
expect(torrentInfo.numSeeds, equals(10));
|
||
|
|
expect(torrentInfo.numPeers, equals(5));
|
||
|
|
expect(torrentInfo.state, equals('DOWNLOADING'));
|
||
|
|
expect(torrentInfo.savePath, equals('/test/path'));
|
||
|
|
expect(torrentInfo.files.length, equals(1));
|
||
|
|
expect(torrentInfo.files.first.path, equals('test.mp4'));
|
||
|
|
expect(torrentInfo.files.first.size, equals(1024000000));
|
||
|
|
expect(torrentInfo.files.first.priority, equals(FilePriority.NORMAL));
|
||
|
|
});
|
||
|
|
|
||
|
|
test('isDownloading returns true for DOWNLOADING state', () {
|
||
|
|
final torrent = TorrentInfo(
|
||
|
|
infoHash: 'test',
|
||
|
|
name: 'test',
|
||
|
|
totalSize: 100,
|
||
|
|
progress: 0.5,
|
||
|
|
downloadSpeed: 1000,
|
||
|
|
uploadSpeed: 500,
|
||
|
|
numSeeds: 5,
|
||
|
|
numPeers: 3,
|
||
|
|
state: 'DOWNLOADING',
|
||
|
|
savePath: '/test',
|
||
|
|
files: [],
|
||
|
|
);
|
||
|
|
|
||
|
|
expect(torrent.isDownloading, isTrue);
|
||
|
|
expect(torrent.isPaused, isFalse);
|
||
|
|
expect(torrent.isSeeding, isFalse);
|
||
|
|
expect(torrent.isCompleted, isFalse);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('isCompleted returns true for progress >= 1.0', () {
|
||
|
|
final torrent = TorrentInfo(
|
||
|
|
infoHash: 'test',
|
||
|
|
name: 'test',
|
||
|
|
totalSize: 100,
|
||
|
|
progress: 1.0,
|
||
|
|
downloadSpeed: 0,
|
||
|
|
uploadSpeed: 500,
|
||
|
|
numSeeds: 5,
|
||
|
|
numPeers: 3,
|
||
|
|
state: 'SEEDING',
|
||
|
|
savePath: '/test',
|
||
|
|
files: [],
|
||
|
|
);
|
||
|
|
|
||
|
|
expect(torrent.isCompleted, isTrue);
|
||
|
|
expect(torrent.isSeeding, isTrue);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('videoFiles returns only video files', () {
|
||
|
|
final torrent = TorrentInfo(
|
||
|
|
infoHash: 'test',
|
||
|
|
name: 'test',
|
||
|
|
totalSize: 100,
|
||
|
|
progress: 1.0,
|
||
|
|
downloadSpeed: 0,
|
||
|
|
uploadSpeed: 0,
|
||
|
|
numSeeds: 0,
|
||
|
|
numPeers: 0,
|
||
|
|
state: 'COMPLETED',
|
||
|
|
savePath: '/test',
|
||
|
|
files: [
|
||
|
|
TorrentFileInfo(
|
||
|
|
path: 'movie.mp4',
|
||
|
|
size: 1000000,
|
||
|
|
priority: FilePriority.NORMAL,
|
||
|
|
),
|
||
|
|
TorrentFileInfo(
|
||
|
|
path: 'subtitle.srt',
|
||
|
|
size: 10000,
|
||
|
|
priority: FilePriority.NORMAL,
|
||
|
|
),
|
||
|
|
TorrentFileInfo(
|
||
|
|
path: 'episode.mkv',
|
||
|
|
size: 2000000,
|
||
|
|
priority: FilePriority.NORMAL,
|
||
|
|
),
|
||
|
|
],
|
||
|
|
);
|
||
|
|
|
||
|
|
final videoFiles = torrent.videoFiles;
|
||
|
|
expect(videoFiles.length, equals(2));
|
||
|
|
expect(videoFiles.any((file) => file.path == 'movie.mp4'), isTrue);
|
||
|
|
expect(videoFiles.any((file) => file.path == 'episode.mkv'), isTrue);
|
||
|
|
expect(videoFiles.any((file) => file.path == 'subtitle.srt'), isFalse);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('mainVideoFile returns largest video file', () {
|
||
|
|
final torrent = TorrentInfo(
|
||
|
|
infoHash: 'test',
|
||
|
|
name: 'test',
|
||
|
|
totalSize: 100,
|
||
|
|
progress: 1.0,
|
||
|
|
downloadSpeed: 0,
|
||
|
|
uploadSpeed: 0,
|
||
|
|
numSeeds: 0,
|
||
|
|
numPeers: 0,
|
||
|
|
state: 'COMPLETED',
|
||
|
|
savePath: '/test',
|
||
|
|
files: [
|
||
|
|
TorrentFileInfo(
|
||
|
|
path: 'small.mp4',
|
||
|
|
size: 1000000,
|
||
|
|
priority: FilePriority.NORMAL,
|
||
|
|
),
|
||
|
|
TorrentFileInfo(
|
||
|
|
path: 'large.mkv',
|
||
|
|
size: 5000000,
|
||
|
|
priority: FilePriority.NORMAL,
|
||
|
|
),
|
||
|
|
TorrentFileInfo(
|
||
|
|
path: 'medium.avi',
|
||
|
|
size: 3000000,
|
||
|
|
priority: FilePriority.NORMAL,
|
||
|
|
),
|
||
|
|
],
|
||
|
|
);
|
||
|
|
|
||
|
|
final mainFile = torrent.mainVideoFile;
|
||
|
|
expect(mainFile?.path, equals('large.mkv'));
|
||
|
|
expect(mainFile?.size, equals(5000000));
|
||
|
|
});
|
||
|
|
|
||
|
|
test('formattedTotalSize formats bytes correctly', () {
|
||
|
|
final torrent = TorrentInfo(
|
||
|
|
infoHash: 'test',
|
||
|
|
name: 'test',
|
||
|
|
totalSize: 1073741824, // 1 GB
|
||
|
|
progress: 0.0,
|
||
|
|
downloadSpeed: 0,
|
||
|
|
uploadSpeed: 0,
|
||
|
|
numSeeds: 0,
|
||
|
|
numPeers: 0,
|
||
|
|
state: 'PAUSED',
|
||
|
|
savePath: '/test',
|
||
|
|
files: [],
|
||
|
|
);
|
||
|
|
|
||
|
|
expect(torrent.formattedTotalSize, equals('1.0GB'));
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
group('FilePriority', () {
|
||
|
|
test('fromValue returns correct priority', () {
|
||
|
|
expect(FilePriority.fromValue(0), equals(FilePriority.DONT_DOWNLOAD));
|
||
|
|
expect(FilePriority.fromValue(4), equals(FilePriority.NORMAL));
|
||
|
|
expect(FilePriority.fromValue(7), equals(FilePriority.HIGH));
|
||
|
|
expect(FilePriority.fromValue(999), equals(FilePriority.NORMAL)); // Default
|
||
|
|
});
|
||
|
|
|
||
|
|
test('comparison operators work correctly', () {
|
||
|
|
expect(FilePriority.HIGH > FilePriority.NORMAL, isTrue);
|
||
|
|
expect(FilePriority.NORMAL > FilePriority.DONT_DOWNLOAD, isTrue);
|
||
|
|
expect(FilePriority.DONT_DOWNLOAD < FilePriority.HIGH, isTrue);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|