mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-29 19:01:29 +00:00
86 lines
3.9 KiB
PHP
86 lines
3.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit;
|
|
|
|
use App\Services\NameFixing\NzbSplitUnwrapper;
|
|
use PHPUnit\Framework\Attributes\DataProvider;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class NzbSplitUnwrapperTest extends TestCase
|
|
{
|
|
/**
|
|
* @return array<string, array{0: string, 1: string}>
|
|
*/
|
|
public static function wrappedReleaseProvider(): array
|
|
{
|
|
return [
|
|
'winter olympics closing ceremony' => [
|
|
'WinterOlympics2026__NZBSPLIT__0456f274737cea074abd86a89144cc7b__NZBSPLIT__Winter_Olympic_Games_Milano_Cortina_2026_Closing_Ceremony_1080p25_WEB-DL_(MultiAudio).7z.065',
|
|
'Winter.Olympic.Games.Milano.Cortina.2026.Closing.Ceremony.1080p25.WEB-DL.(MultiAudio)',
|
|
],
|
|
'winter olympics with yenc tail' => [
|
|
'WinterOlympics2026__NZBSPLIT__0456f274737cea074abd86a89144cc7b__NZBSPLIT__Winter_Olympic_Games_Milano_Cortina_2026_Closing_Ceremony_1080p25_WEB-DL_(MultiAudio).7z.065" yEnc(1',
|
|
'Winter.Olympic.Games.Milano.Cortina.2026.Closing.Ceremony.1080p25.WEB-DL.(MultiAudio)',
|
|
],
|
|
'mlb reds rays' => [
|
|
'MLB__NZBSPLIT__f5054661a1d468cc6a8712de8217c1c9__NZBSPLIT__MLB_2026_Cincinnati_Reds_vs_Tampa_Bay_Rays_20_04_720pEN60fps.7z.075',
|
|
'MLB.2026.Cincinnati.Reds.vs.Tampa.Bay.Rays.20.04.720pEN60fps',
|
|
],
|
|
'nba playoffs wolves nuggets' => [
|
|
'NBA__NZBSPLIT__9b1e889d7fb8d8a63c21217266069c71__NZBSPLIT__NBA_2026_Playoffs_Minnesota_Timberwolves_vs_Denver_Nuggets_Game_2_20_04_1080pEN60fps_NBC.7z.074',
|
|
'NBA.2026.Playoffs.Minnesota.Timberwolves.vs.Denver.Nuggets.Game.2.20.04.1080pEN60fps.NBC',
|
|
],
|
|
'nba abc feed' => [
|
|
'NBA__NZBSPLIT__bdab31d6f79989608009e7e8eadcbe66__NZBSPLIT__NBA_20260419_PHI_BOS_1080p60_ABC.7z.073',
|
|
'NBA.20260419.PHI.BOS.1080p60.ABC',
|
|
],
|
|
'mlb blue jays diamondbacks' => [
|
|
'MLB__NZBSPLIT__bc07883ca7b3c29e5cca57b8ebef3ef7__NZBSPLIT__MLB_2026_Toronto_Maple_Leafs_vs_Arizona_Diamondbacks_19_04_720pEN60fps_SN1.7z.028',
|
|
'MLB.2026.Toronto.Maple.Leafs.vs.Arizona.Diamondbacks.19.04.720pEN60fps.SN1',
|
|
],
|
|
'mlb padres dodgers' => [
|
|
'MLB__NZBSPLIT__9a0239e72a5201f889929a81eac53d9a__NZBSPLIT__MLB_2026_San_Diego_Padres_vs_Los_Angeles_Angels_19_04_720pEN60fps.7z.057',
|
|
'MLB.2026.San.Diego.Padres.vs.Los.Angeles.Angels.19.04.720pEN60fps',
|
|
],
|
|
'multipart rar' => [
|
|
'TV__NZBSPLIT__1234567890abcdef__NZBSPLIT__Some_Show_2026_Episode_01_1080p_WEB-DL.part01.rar',
|
|
'Some.Show.2026.Episode.01.1080p.WEB-DL',
|
|
],
|
|
'scene rxx archive' => [
|
|
'MOVIE__NZBSPLIT__1234567890abcdef__NZBSPLIT__Some_Movie_2026_1080p_WEB-DL-GROUP.r05',
|
|
'Some.Movie.2026.1080p.WEB-DL-GROUP',
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array<string, array{0: string}>
|
|
*/
|
|
public static function invalidWrappedReleaseProvider(): array
|
|
{
|
|
return [
|
|
'missing marker' => ['Regular.Release.Name.2026.1080p.WEB-DL'],
|
|
'non hex hash' => ['NBA__NZBSPLIT__not-a-hex-hash__NZBSPLIT__NBA_2026_Finals_Game_1_1080p.7z.001'],
|
|
'short hash' => ['NBA__NZBSPLIT__abc1234__NZBSPLIT__NBA_2026_Finals_Game_1_1080p.7z.001'],
|
|
];
|
|
}
|
|
|
|
#[DataProvider('wrappedReleaseProvider')]
|
|
public function test_unwrap_returns_embedded_release_name(string $wrapped, string $expected): void
|
|
{
|
|
$unwrapper = new NzbSplitUnwrapper;
|
|
|
|
$this->assertSame($expected, $unwrapper->unwrap($wrapped));
|
|
}
|
|
|
|
#[DataProvider('invalidWrappedReleaseProvider')]
|
|
public function test_unwrap_returns_null_for_invalid_or_non_wrapped_input(string $wrapped): void
|
|
{
|
|
$unwrapper = new NzbSplitUnwrapper;
|
|
|
|
$this->assertNull($unwrapper->unwrap($wrapped));
|
|
}
|
|
}
|