Add Calcul ratio test
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import { NormalizedTorrent, TorrentState } from '@ctrl/shared-torrent';
|
import { NormalizedTorrent, TorrentState } from '@ctrl/shared-torrent';
|
||||||
import { describe, expect, it } from 'vitest';
|
import { describe, expect, it } from 'vitest';
|
||||||
|
|
||||||
import { ITorrent, filterTorrents } from './TorrentTile';
|
import { ITorrent, filterTorrents, getTorrentsRatio } from './TorrentTile';
|
||||||
|
|
||||||
describe('TorrentTile', () => {
|
describe('TorrentTile', () => {
|
||||||
it('filter torrents when stale', () => {
|
it('filter torrents when stale', () => {
|
||||||
@@ -20,13 +20,15 @@ describe('TorrentTile', () => {
|
|||||||
labelFilter: [],
|
labelFilter: [],
|
||||||
labelFilterIsWhitelist: false,
|
labelFilterIsWhitelist: false,
|
||||||
displayCompletedTorrents: true,
|
displayCompletedTorrents: true,
|
||||||
|
displayActiveTorrents: true,
|
||||||
|
speedLimitOfActiveTorrents: 10,
|
||||||
displayStaleTorrents: false,
|
displayStaleTorrents: false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const torrents: NormalizedTorrent[] = [
|
const torrents: NormalizedTorrent[] = [
|
||||||
constructTorrent('ABC', 'Nice Torrent', false, 672),
|
constructTorrent('ABC', 'Nice Torrent', false, 672, 672),
|
||||||
constructTorrent('HH', 'I am completed', true, 0),
|
constructTorrent('HH', 'I am completed', true, 0, 0),
|
||||||
constructTorrent('HH', 'I am stale', false, 0),
|
constructTorrent('HH', 'I am stale', false, 0, 0),
|
||||||
];
|
];
|
||||||
|
|
||||||
// act
|
// act
|
||||||
@@ -55,13 +57,15 @@ describe('TorrentTile', () => {
|
|||||||
labelFilter: [],
|
labelFilter: [],
|
||||||
labelFilterIsWhitelist: false,
|
labelFilterIsWhitelist: false,
|
||||||
displayCompletedTorrents: true,
|
displayCompletedTorrents: true,
|
||||||
|
displayActiveTorrents: true,
|
||||||
|
speedLimitOfActiveTorrents: 10,
|
||||||
displayStaleTorrents: true,
|
displayStaleTorrents: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const torrents: NormalizedTorrent[] = [
|
const torrents: NormalizedTorrent[] = [
|
||||||
constructTorrent('ABC', 'Nice Torrent', false, 672),
|
constructTorrent('ABC', 'Nice Torrent', false, 672, 672),
|
||||||
constructTorrent('HH', 'I am completed', true, 0),
|
constructTorrent('HH', 'I am completed', true, 0, 0),
|
||||||
constructTorrent('HH', 'I am stale', false, 0),
|
constructTorrent('HH', 'I am stale', false, 0, 0),
|
||||||
];
|
];
|
||||||
|
|
||||||
// act
|
// act
|
||||||
@@ -74,7 +78,7 @@ describe('TorrentTile', () => {
|
|||||||
expect(filtered.includes(torrents[2])).toBe(true);
|
expect(filtered.includes(torrents[2])).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('filter when completed', () => {
|
it('filter when completed without active torrent', () => {
|
||||||
// arrange
|
// arrange
|
||||||
const widget: ITorrent = {
|
const widget: ITorrent = {
|
||||||
id: 'abc',
|
id: 'abc',
|
||||||
@@ -90,13 +94,15 @@ describe('TorrentTile', () => {
|
|||||||
labelFilter: [],
|
labelFilter: [],
|
||||||
labelFilterIsWhitelist: false,
|
labelFilterIsWhitelist: false,
|
||||||
displayCompletedTorrents: false,
|
displayCompletedTorrents: false,
|
||||||
|
displayActiveTorrents: false,
|
||||||
|
speedLimitOfActiveTorrents: 10,
|
||||||
displayStaleTorrents: true,
|
displayStaleTorrents: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const torrents: NormalizedTorrent[] = [
|
const torrents: NormalizedTorrent[] = [
|
||||||
constructTorrent('ABC', 'Nice Torrent', false, 672),
|
constructTorrent('ABC', 'Nice Torrent', false, 672, 672),
|
||||||
constructTorrent('HH', 'I am completed', true, 0),
|
constructTorrent('HH', 'I am completed', true, 0, 672),
|
||||||
constructTorrent('HH', 'I am stale', false, 0),
|
constructTorrent('HH', 'I am stale', false, 0, 0),
|
||||||
];
|
];
|
||||||
|
|
||||||
// act
|
// act
|
||||||
@@ -109,6 +115,47 @@ describe('TorrentTile', () => {
|
|||||||
expect(filtered.at(1)).toBe(torrents[2]);
|
expect(filtered.at(1)).toBe(torrents[2]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('filter when completed with active torrent', () => {
|
||||||
|
// arrange
|
||||||
|
const widget: ITorrent = {
|
||||||
|
id: 'abc',
|
||||||
|
area: {
|
||||||
|
type: 'sidebar',
|
||||||
|
properties: {
|
||||||
|
location: 'left',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
shape: {},
|
||||||
|
type: 'torrents-status',
|
||||||
|
properties: {
|
||||||
|
labelFilter: [],
|
||||||
|
labelFilterIsWhitelist: false,
|
||||||
|
displayCompletedTorrents: false,
|
||||||
|
displayActiveTorrents: true,
|
||||||
|
speedLimitOfActiveTorrents: 10,
|
||||||
|
displayStaleTorrents: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const torrents: NormalizedTorrent[] = [
|
||||||
|
constructTorrent('ABC', 'Nice Torrent', false, 672, 672),
|
||||||
|
constructTorrent('HH', 'I am completed and uploading less than 10 ko/s (10239 ≈ 9.99ko/s)', true, 0, 10239),
|
||||||
|
constructTorrent('HH', 'I am completed and uploading more than 10 ko/s (10241 ≈ 10.01ko/s)', true, 0, 10241),
|
||||||
|
constructTorrent('HH', 'I am completed', true, 0, 0),
|
||||||
|
constructTorrent('HH', 'I am stale', false, 0, 0),
|
||||||
|
];
|
||||||
|
|
||||||
|
// act
|
||||||
|
const filtered = filterTorrents(widget, torrents);
|
||||||
|
|
||||||
|
// assert
|
||||||
|
expect(filtered.length).toBe(3);
|
||||||
|
expect(filtered.at(0)).toBe(torrents[0]);
|
||||||
|
expect(filtered.includes(torrents[1])).toBe(false);
|
||||||
|
expect(filtered.at(1)).toBe(torrents[2]);
|
||||||
|
expect(filtered.includes(torrents[3])).toBe(false);
|
||||||
|
expect(filtered.at(2)).toBe(torrents[4]);
|
||||||
|
});
|
||||||
|
|
||||||
it('filter by label when whitelist', () => {
|
it('filter by label when whitelist', () => {
|
||||||
// arrange
|
// arrange
|
||||||
const widget: ITorrent = {
|
const widget: ITorrent = {
|
||||||
@@ -125,13 +172,15 @@ describe('TorrentTile', () => {
|
|||||||
labelFilter: ['music', 'movie'],
|
labelFilter: ['music', 'movie'],
|
||||||
labelFilterIsWhitelist: true,
|
labelFilterIsWhitelist: true,
|
||||||
displayCompletedTorrents: true,
|
displayCompletedTorrents: true,
|
||||||
|
displayActiveTorrents: true,
|
||||||
|
speedLimitOfActiveTorrents: 10,
|
||||||
displayStaleTorrents: true,
|
displayStaleTorrents: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const torrents: NormalizedTorrent[] = [
|
const torrents: NormalizedTorrent[] = [
|
||||||
constructTorrent('1', 'A sick drop', false, 672, 'music'),
|
constructTorrent('1', 'A sick drop', false, 672, 672, 'music'),
|
||||||
constructTorrent('2', 'I cried', true, 0, 'movie'),
|
constructTorrent('2', 'I cried', true, 0, 0, 'movie'),
|
||||||
constructTorrent('3', 'Great Animations', false, 0, 'anime'),
|
constructTorrent('3', 'Great Animations', false, 0, 0, 'anime'),
|
||||||
];
|
];
|
||||||
|
|
||||||
// act
|
// act
|
||||||
@@ -160,13 +209,15 @@ describe('TorrentTile', () => {
|
|||||||
labelFilter: ['music', 'movie'],
|
labelFilter: ['music', 'movie'],
|
||||||
labelFilterIsWhitelist: false,
|
labelFilterIsWhitelist: false,
|
||||||
displayCompletedTorrents: false,
|
displayCompletedTorrents: false,
|
||||||
|
displayActiveTorrents: false,
|
||||||
|
speedLimitOfActiveTorrents: 10,
|
||||||
displayStaleTorrents: true,
|
displayStaleTorrents: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const torrents: NormalizedTorrent[] = [
|
const torrents: NormalizedTorrent[] = [
|
||||||
constructTorrent('ABC', 'Nice Torrent', false, 672, 'anime'),
|
constructTorrent('ABC', 'Nice Torrent', false, 672, 672, 'anime'),
|
||||||
constructTorrent('HH', 'I am completed', true, 0, 'movie'),
|
constructTorrent('HH', 'I am completed', true, 0, 0, 'movie'),
|
||||||
constructTorrent('HH', 'I am stale', false, 0, 'tv'),
|
constructTorrent('HH', 'I am stale', false, 0, 0, 'tv'),
|
||||||
];
|
];
|
||||||
|
|
||||||
// act
|
// act
|
||||||
@@ -178,13 +229,53 @@ describe('TorrentTile', () => {
|
|||||||
expect(filtered.includes(torrents[1])).toBe(false);
|
expect(filtered.includes(torrents[1])).toBe(false);
|
||||||
expect(filtered.at(1)).toBe(torrents[2]);
|
expect(filtered.at(1)).toBe(torrents[2]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('calcul ratio with and without torrent', () => {
|
||||||
|
// arrange
|
||||||
|
const widget: ITorrent = {
|
||||||
|
id: 'abc',
|
||||||
|
area: {
|
||||||
|
type: 'sidebar',
|
||||||
|
properties: {
|
||||||
|
location: 'left',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
shape: {},
|
||||||
|
type: 'torrents-status',
|
||||||
|
properties: {
|
||||||
|
labelFilter: [],
|
||||||
|
labelFilterIsWhitelist: false,
|
||||||
|
displayCompletedTorrents: false,
|
||||||
|
displayActiveTorrents: false,
|
||||||
|
speedLimitOfActiveTorrents: 10,
|
||||||
|
displayStaleTorrents: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const torrents: NormalizedTorrent[] = [
|
||||||
|
constructTorrent('HH', 'I am completed', true, 0, 672),
|
||||||
|
];
|
||||||
|
|
||||||
|
// act
|
||||||
|
const filtered = filterTorrents(widget, torrents);
|
||||||
|
const ratioGlobal = getTorrentsRatio(widget, torrents, false);
|
||||||
|
const ratioWithFilter = getTorrentsRatio(widget, torrents, true);
|
||||||
|
|
||||||
|
// assert
|
||||||
|
expect(filtered.length).toBe(0);
|
||||||
|
expect(filtered.includes(torrents[1])).toBe(false);
|
||||||
|
expect(ratioGlobal).toBe(378535535/23024335);
|
||||||
|
expect(ratioWithFilter).toBe(-1); //infinite ratio
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const constructTorrent = (
|
const constructTorrent = (
|
||||||
id: string,
|
id: string,
|
||||||
name: string,
|
name: string,
|
||||||
isCompleted: boolean,
|
isCompleted: boolean,
|
||||||
downloadSpeed: number,
|
downloadSpeed: number, // Bytes per second in @ctrl/shared-torrent
|
||||||
|
uploadSpeed: number, // Bytes per second in @ctrl/shared-torrent
|
||||||
label?: string
|
label?: string
|
||||||
): NormalizedTorrent => ({
|
): NormalizedTorrent => ({
|
||||||
id,
|
id,
|
||||||
@@ -208,6 +299,6 @@ const constructTorrent = (
|
|||||||
totalSize: 839539535,
|
totalSize: 839539535,
|
||||||
totalSelected: 0,
|
totalSelected: 0,
|
||||||
totalUploaded: 378535535,
|
totalUploaded: 378535535,
|
||||||
uploadSpeed: 8349,
|
uploadSpeed,
|
||||||
label,
|
label,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user