111 lines
4.2 KiB
Go
111 lines
4.2 KiB
Go
package torrent_analyzer
|
|
|
|
import (
|
|
"seanime/internal/api/anilist"
|
|
"seanime/internal/api/metadata"
|
|
"seanime/internal/platforms/anilist_platform"
|
|
"seanime/internal/test_utils"
|
|
"seanime/internal/util"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// TestSelectFilesFromSeason tests the selection of the accurate season files from a list of files from all seasons.
|
|
func TestSelectFilesFromSeason(t *testing.T) {
|
|
test_utils.InitTestProvider(t, test_utils.Anilist())
|
|
|
|
logger := util.NewLogger()
|
|
anilistClient := anilist.TestGetMockAnilistClient()
|
|
anilistPlatform := anilist_platform.NewAnilistPlatform(anilistClient, logger)
|
|
metadataProvider := metadata.GetMockProvider(t)
|
|
|
|
tests := []struct {
|
|
name string
|
|
mediaId int // The media ID of the season
|
|
filepaths []string // All filepaths from all seasons
|
|
expectedIndices []int // The indices of the selected files
|
|
}{
|
|
{
|
|
name: "Kakegurui xx",
|
|
filepaths: []string{
|
|
"Kakegurui [BD][1080p][HEVC 10bit x265][Dual Audio][Tenrai-Sensei]/Season 1/Kakegurui - S01E01 - The Woman Called Yumeko Jabami.mkv", // should be selected
|
|
"Kakegurui [BD][1080p][HEVC 10bit x265][Dual Audio][Tenrai-Sensei]/Season 2/Kakegurui xx - S02E01 - The Woman Called Yumeko Jabami.mkv",
|
|
},
|
|
mediaId: 98314,
|
|
expectedIndices: []int{0},
|
|
},
|
|
{
|
|
name: "Kimi ni Todoke Season 2",
|
|
filepaths: []string{
|
|
"[Judas] Kimi ni Todoke (Seasons 1-2) [BD 1080p][HEVC x265 10bit][Eng-Subs]/[Judas] Kimi ni Todoke S1/[Judas] Kimi ni Todoke - S01E01.mkv",
|
|
"[Judas] Kimi ni Todoke (Seasons 1-2) [BD 1080p][HEVC x265 10bit][Eng-Subs]/[Judas] Kimi ni Todoke S1/[Judas] Kimi ni Todoke - S01E02.mkv",
|
|
"[Judas] Kimi ni Todoke (Seasons 1-2) [BD 1080p][HEVC x265 10bit][Eng-Subs]/[Judas] Kimi ni Todoke S2/[Judas] Kimi ni Todoke - S02E01.mkv", // should be selected
|
|
"[Judas] Kimi ni Todoke (Seasons 1-2) [BD 1080p][HEVC x265 10bit][Eng-Subs]/[Judas] Kimi ni Todoke S2/[Judas] Kimi ni Todoke - S02E02.mkv", // should be selected
|
|
},
|
|
mediaId: 9656,
|
|
expectedIndices: []int{2, 3},
|
|
},
|
|
{
|
|
name: "Spy x Family Part 2",
|
|
filepaths: []string{
|
|
"[SubsPlease] Spy x Family (01-25) (1080p) [Batch]/[SubsPlease] Spy x Family - 10v2 (1080p) [F9F5C62B].mkv",
|
|
"[SubsPlease] Spy x Family (01-25) (1080p) [Batch]/[SubsPlease] Spy x Family - 11v2 (1080p) [F9F5C62B].mkv",
|
|
"[SubsPlease] Spy x Family (01-25) (1080p) [Batch]/[SubsPlease] Spy x Family - 12v2 (1080p) [F9F5C62B].mkv",
|
|
"[SubsPlease] Spy x Family (01-25) (1080p) [Batch]/[SubsPlease] Spy x Family - 13v2 (1080p) [F9F5C62B].mkv", // should be selected
|
|
"[SubsPlease] Spy x Family (01-25) (1080p) [Batch]/[SubsPlease] Spy x Family - 14v2 (1080p) [F9F5C62B].mkv", // should be selected
|
|
"[SubsPlease] Spy x Family (01-25) (1080p) [Batch]/[SubsPlease] Spy x Family - 15v2 (1080p) [F9F5C62B].mkv", // should be selected
|
|
},
|
|
mediaId: 142838,
|
|
expectedIndices: []int{3, 4, 5},
|
|
},
|
|
{
|
|
name: "Mushoku Tensei: Jobless Reincarnation Season 2 Part 2",
|
|
filepaths: []string{
|
|
"[EMBER] Mushoku Tensei S2 - 13.mkv", // should be selected
|
|
"[EMBER] Mushoku Tensei S2 - 14.mkv", // should be selected
|
|
"[EMBER] Mushoku Tensei S2 - 15.mkv", // should be selected
|
|
"[EMBER] Mushoku Tensei S2 - 16.mkv", // should be selected
|
|
},
|
|
mediaId: 166873,
|
|
expectedIndices: []int{0, 1, 2, 3},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
// Get media
|
|
media, err := anilistPlatform.GetAnimeWithRelations(t.Context(), tt.mediaId)
|
|
if err != nil {
|
|
t.Fatal("expected result, got error:", err.Error())
|
|
}
|
|
|
|
analyzer := NewAnalyzer(&NewAnalyzerOptions{
|
|
Logger: logger,
|
|
Filepaths: tt.filepaths,
|
|
Media: media,
|
|
Platform: anilistPlatform,
|
|
MetadataProvider: metadataProvider,
|
|
ForceMatch: false,
|
|
})
|
|
|
|
// AnalyzeTorrentFiles
|
|
analysis, err := analyzer.AnalyzeTorrentFiles()
|
|
if assert.NoError(t, err) {
|
|
|
|
selectedFilesMap := analysis.GetCorrespondingMainFiles()
|
|
selectedIndices := analysis.GetIndices(selectedFilesMap)
|
|
|
|
// Check selected files
|
|
assert.ElementsMatch(t, tt.expectedIndices, selectedIndices)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|