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

134 lines
3.8 KiB
Go

package filesystem
import (
"fmt"
"os"
"path/filepath"
"seanime/internal/util"
"testing"
"github.com/stretchr/testify/assert"
)
func TestSeparateFilePathS(t *testing.T) {
tests := []struct {
path string
potentialPrefixes []string
expected *SeparatedFilePath
}{
{
path: "/path/to/file.mkv",
potentialPrefixes: []string{"/path/to", "/path"},
expected: &SeparatedFilePath{Filename: "file.mkv", Dirnames: []string{}},
},
{
path: "/path/TO/to/file.mkv",
potentialPrefixes: []string{"/path"},
expected: &SeparatedFilePath{Filename: "file.mkv", Dirnames: []string{"TO", "to"}},
},
{
path: "/path/to/file2.mkv",
potentialPrefixes: []string{},
expected: &SeparatedFilePath{Filename: "file2.mkv", Dirnames: []string{"path", "to"}},
},
{
path: "/mnt/Anime/Bungou Stray Dogs/Bungou Stray Dogs 5th Season/[SubsPlease] Bungou Stray Dogs - 61 (1080p) [F609B947].mkv",
potentialPrefixes: []string{"/mnt/Anime", "/mnt/Anime/", "/mnt", "/var/"},
expected: &SeparatedFilePath{Filename: "[SubsPlease] Bungou Stray Dogs - 61 (1080p) [F609B947].mkv", Dirnames: []string{"Bungou Stray Dogs", "Bungou Stray Dogs 5th Season"}},
},
}
for _, tt := range tests {
t.Run(tt.path, func(t *testing.T) {
fmt.Println("Here")
res := SeparateFilePathS(tt.path, tt.potentialPrefixes)
assert.Equal(t, tt.expected.Filename, res.Filename)
assert.Equal(t, tt.expected.Dirnames, res.Dirnames)
})
}
}
// Test with symlinks
func TestGetVideoFilePathsFromDir_WithSymlinks(t *testing.T) {
tmpDir := t.TempDir()
libDir := filepath.Join(tmpDir, "library")
externalLibDir := t.TempDir()
os.Mkdir(libDir, 0755)
// Create files in the external directory
createFile(t, filepath.Join(externalLibDir, "external_video1.mkv"))
createFile(t, filepath.Join(externalLibDir, "external_video2.mp4"))
// Create directories and files
dir1 := filepath.Join(libDir, "Anime1")
os.Mkdir(dir1, 0755)
createFile(t, filepath.Join(dir1, "Anime1_1.mkv"))
createFile(t, filepath.Join(dir1, "Anime1_2.mp4"))
dir2 := filepath.Join(libDir, "Anime2")
os.Mkdir(dir2, 0755)
createFile(t, filepath.Join(dir2, "Anime2_1.mkv"))
// Create a symlink to the external directory
symlinkPath := filepath.Join(libDir, "symlink_to_external")
if err := os.Symlink(externalLibDir, symlinkPath); err != nil {
t.Fatalf("Failed to create symlink: %s", err)
}
// Create a recursive symlink to the library directory
symlinkToLibPath := filepath.Join(externalLibDir, "symlink_to_library")
if err := os.Symlink(libDir, symlinkToLibPath); err != nil {
t.Fatalf("Failed to create symlink: %s", err)
}
// Expected files
expectedPaths := []string{
filepath.Join(dir1, "Anime1_1.mkv"),
filepath.Join(dir1, "Anime1_2.mp4"),
filepath.Join(dir2, "Anime2_1.mkv"),
filepath.Join(externalLibDir, "external_video1.mkv"),
filepath.Join(externalLibDir, "external_video2.mp4"),
}
filePaths, err := GetMediaFilePathsFromDirS(libDir)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
util.Spew(filePaths)
// Check results
for _, expected := range expectedPaths {
found := false
for _, path := range filePaths {
// if path == expected {
// found = true
// break
// }
// Compare the paths using stdlib
info1, err := os.Stat(path)
if err != nil {
t.Fatalf("Failed to get file info for %s: %s", path, err)
}
info2, err := os.Stat(expected)
if err != nil {
t.Fatalf("Failed to get file info for %s: %s", expected, err)
}
if os.SameFile(info1, info2) {
found = true
break
}
}
if !found {
t.Errorf("Expected file path %s not found in result", expected)
}
}
}
func createFile(t *testing.T, path string) {
file, err := os.Create(path)
if err != nil {
t.Fatalf("Failed to create file: %s", err)
}
defer file.Close()
}