Files
seanime-docker/seanime-2.9.10/internal/library/scanner/media_fetcher_test.go
2025-09-20 14:08:38 +01:00

274 lines
7.8 KiB
Go

package scanner
import (
"seanime/internal/api/anilist"
"seanime/internal/api/metadata"
"seanime/internal/library/anime"
"seanime/internal/platforms/anilist_platform"
"seanime/internal/test_utils"
"seanime/internal/util"
"seanime/internal/util/limiter"
"testing"
"github.com/samber/lo"
"github.com/stretchr/testify/assert"
)
func TestNewMediaFetcher(t *testing.T) {
test_utils.InitTestProvider(t, test_utils.Anilist())
anilistClient := anilist.TestGetMockAnilistClient()
logger := util.NewLogger()
anilistPlatform := anilist_platform.NewAnilistPlatform(anilistClient, logger)
metadataProvider := metadata.GetMockProvider(t)
completeAnimeCache := anilist.NewCompleteAnimeCache()
anilistRateLimiter := limiter.NewAnilistLimiter()
dir := "E:/Anime"
tests := []struct {
name string
paths []string
enhanced bool
disableAnimeCollection bool
}{
{
name: "86 - Eighty Six Part 1 & 2",
paths: []string{
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 20v2 (1080p) [30072859].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 21v2 (1080p) [4B1616A5].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 22v2 (1080p) [58BF43B4].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 23v2 (1080p) [D94B4894].mkv",
},
enhanced: false,
disableAnimeCollection: false,
},
{
name: "86 - Eighty Six Part 1 & 2",
paths: []string{
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 20v2 (1080p) [30072859].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 21v2 (1080p) [4B1616A5].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 22v2 (1080p) [58BF43B4].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 23v2 (1080p) [D94B4894].mkv",
},
enhanced: true,
disableAnimeCollection: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
scanLogger, err := NewConsoleScanLogger()
if err != nil {
t.Fatal("expected result, got error:", err.Error())
}
// +---------------------+
// | Local Files |
// +---------------------+
var lfs []*anime.LocalFile
for _, path := range tt.paths {
lf := anime.NewLocalFile(path, dir)
lfs = append(lfs, lf)
}
// +---------------------+
// | MediaFetcher |
// +---------------------+
mf, err := NewMediaFetcher(t.Context(), &MediaFetcherOptions{
Enhanced: tt.enhanced,
Platform: anilistPlatform,
LocalFiles: lfs,
CompleteAnimeCache: completeAnimeCache,
MetadataProvider: metadataProvider,
Logger: util.NewLogger(),
AnilistRateLimiter: anilistRateLimiter,
ScanLogger: scanLogger,
DisableAnimeCollection: tt.disableAnimeCollection,
})
if err != nil {
t.Fatal("expected result, got error:", err.Error())
}
mc := NewMediaContainer(&MediaContainerOptions{
AllMedia: mf.AllMedia,
ScanLogger: scanLogger,
})
for _, m := range mc.NormalizedMedia {
t.Log(m.GetTitleSafe())
}
})
}
}
func TestNewEnhancedMediaFetcher(t *testing.T) {
anilistClient := anilist.TestGetMockAnilistClient()
logger := util.NewLogger()
anilistPlatform := anilist_platform.NewAnilistPlatform(anilistClient, logger)
metaProvider := metadata.GetMockProvider(t)
completeAnimeCache := anilist.NewCompleteAnimeCache()
anilistRateLimiter := limiter.NewAnilistLimiter()
dir := "E:/Anime"
tests := []struct {
name string
paths []string
enhanced bool
}{
{
name: "86 - Eighty Six Part 1 & 2",
paths: []string{
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 20v2 (1080p) [30072859].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 21v2 (1080p) [4B1616A5].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 22v2 (1080p) [58BF43B4].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 23v2 (1080p) [D94B4894].mkv",
},
enhanced: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
scanLogger, err := NewScanLogger("./logs")
if err != nil {
t.Fatal("expected result, got error:", err.Error())
}
// +---------------------+
// | Local Files |
// +---------------------+
var lfs []*anime.LocalFile
for _, path := range tt.paths {
lf := anime.NewLocalFile(path, dir)
lfs = append(lfs, lf)
}
// +---------------------+
// | MediaFetcher |
// +---------------------+
mf, err := NewMediaFetcher(t.Context(), &MediaFetcherOptions{
Enhanced: tt.enhanced,
Platform: anilistPlatform,
LocalFiles: lfs,
CompleteAnimeCache: completeAnimeCache,
MetadataProvider: metaProvider,
Logger: util.NewLogger(),
AnilistRateLimiter: anilistRateLimiter,
ScanLogger: scanLogger,
})
if err != nil {
t.Fatal("expected result, got error:", err.Error())
}
mc := NewMediaContainer(&MediaContainerOptions{
AllMedia: mf.AllMedia,
ScanLogger: scanLogger,
})
for _, m := range mc.NormalizedMedia {
t.Log(m.GetTitleSafe())
}
})
}
}
func TestFetchMediaFromLocalFiles(t *testing.T) {
anilistClient := anilist.TestGetMockAnilistClient()
logger := util.NewLogger()
anilistPlatform := anilist_platform.NewAnilistPlatform(anilistClient, logger)
metaProvider := metadata.GetMockProvider(t)
completeAnimeCache := anilist.NewCompleteAnimeCache()
anilistRateLimiter := limiter.NewAnilistLimiter()
tests := []struct {
name string
paths []string
expectedMediaId []int
}{
{
name: "86 - Eighty Six Part 1 & 2",
paths: []string{
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 20v2 (1080p) [30072859].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 21v2 (1080p) [4B1616A5].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 22v2 (1080p) [58BF43B4].mkv",
"E:/Anime/[SubsPlease] 86 - Eighty Six (01-23) (1080p) [Batch]/[SubsPlease] 86 - Eighty Six - 23v2 (1080p) [D94B4894].mkv",
},
expectedMediaId: []int{116589, 131586}, // 86 - Eighty Six Part 1 & 2
},
}
dir := "E:/Anime"
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
scanLogger, err := NewScanLogger("./logs")
if err != nil {
t.Fatal("expected result, got error:", err.Error())
}
// +---------------------+
// | Local Files |
// +---------------------+
var lfs []*anime.LocalFile
for _, path := range tt.paths {
lf := anime.NewLocalFile(path, dir)
lfs = append(lfs, lf)
}
// +--------------------------+
// | FetchMediaFromLocalFiles |
// +--------------------------+
media, ok := FetchMediaFromLocalFiles(
t.Context(),
anilistPlatform,
lfs,
completeAnimeCache,
metaProvider,
anilistRateLimiter,
scanLogger,
)
if !ok {
t.Fatal("could not fetch media from local files")
}
ids := lo.Map(media, func(k *anilist.CompleteAnime, _ int) int {
return k.ID
})
// Test if all expected media IDs are present
for _, id := range tt.expectedMediaId {
assert.Contains(t, ids, id)
}
t.Log("Media IDs:")
for _, m := range media {
t.Log(m.GetTitleSafe())
}
})
}
}