201 lines
4.8 KiB
Go
201 lines
4.8 KiB
Go
package debrid_client
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/stretchr/testify/require"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func PrintPathStructure(path string, indent string) error {
|
|
entries, err := os.ReadDir(path)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to read directory %s: %w", path, err)
|
|
}
|
|
|
|
for _, entry := range entries {
|
|
fmt.Println(indent + entry.Name())
|
|
|
|
if entry.IsDir() {
|
|
newIndent := indent + " "
|
|
newPath := filepath.Join(path, entry.Name())
|
|
if err := PrintPathStructure(newPath, newIndent); err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func TestCreateTempDir(t *testing.T) {
|
|
|
|
files := []string{
|
|
"/12345/Anime/Ep1.mkv",
|
|
"/12345/Anime/Ep2.mkv",
|
|
}
|
|
|
|
root := "./root"
|
|
for _, file := range files {
|
|
path := filepath.Join(root, file)
|
|
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
|
|
t.Fatalf("failed to create directory: %v", err)
|
|
}
|
|
if err := os.WriteFile(path, []byte("dummy content"), 0644); err != nil {
|
|
t.Fatalf("failed to create file %s: %v", path, err)
|
|
}
|
|
}
|
|
defer os.RemoveAll(root)
|
|
|
|
err := PrintPathStructure(root, "")
|
|
require.NoError(t, err)
|
|
|
|
}
|
|
|
|
func TestMoveContentsTo(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
files []string
|
|
dest string
|
|
expected string
|
|
expectErr bool
|
|
}{
|
|
{
|
|
name: "Case 1: Move folder with files",
|
|
files: []string{
|
|
"/Anime/Ep1.mkv",
|
|
"/Anime/Ep2.mkv",
|
|
},
|
|
dest: "./dest",
|
|
expected: "./dest/Anime",
|
|
expectErr: false,
|
|
},
|
|
{
|
|
name: "Case 2: Move folder with single hash directory",
|
|
files: []string{
|
|
"/12345/Anime/Ep1.mkv",
|
|
"/12345/Anime/Ep2.mkv",
|
|
},
|
|
dest: "./dest",
|
|
expected: "./dest/Anime",
|
|
expectErr: false,
|
|
},
|
|
{
|
|
name: "Case 3: Move single file",
|
|
files: []string{
|
|
"/12345/Anime/Ep1.mkv",
|
|
},
|
|
dest: "./dest",
|
|
expected: "./dest/Ep1.mkv",
|
|
expectErr: false,
|
|
},
|
|
{
|
|
name: "Case 5: Source directory does not exist",
|
|
files: []string{},
|
|
dest: "./dest",
|
|
expected: "",
|
|
expectErr: true,
|
|
},
|
|
{
|
|
name: "Case 6: Move single file with hash directory",
|
|
files: []string{
|
|
"/12345/Anime/Ep1.mkv",
|
|
},
|
|
dest: "./dest",
|
|
expected: "./dest/Ep1.mkv",
|
|
},
|
|
{
|
|
name: "Case 7",
|
|
files: []string{
|
|
"Ep1.mkv",
|
|
},
|
|
dest: "./dest",
|
|
expected: "./dest/Ep1.mkv",
|
|
},
|
|
{
|
|
name: "Case 8",
|
|
files: []string{
|
|
"Ep1.mkv",
|
|
"Ep2.mkv",
|
|
},
|
|
dest: "./dest",
|
|
expected: "./dest/Ep2.mkv",
|
|
},
|
|
{
|
|
name: "Case 9",
|
|
files: []string{
|
|
"/12345/Anime/Anime 1/Ep1.mkv",
|
|
"/12345/Anime/Anime 1/Ep2.mkv",
|
|
"/12345/Anime/Anime 2/Ep1.mkv",
|
|
"/12345/Anime/Anime 2/Ep2.mkv",
|
|
"/12345/Anime 2/Anime 3/Ep1.mkv",
|
|
"/12345/Anime 2/Anime 3/Ep2.mkv",
|
|
},
|
|
dest: "./dest",
|
|
expected: "./dest/12345",
|
|
expectErr: false,
|
|
},
|
|
{
|
|
name: "Case 10",
|
|
files: []string{
|
|
"/Users/r/Downloads/b6aa416f662a2df83c6f5f79da95004ced59b8ef/Tsue to Tsurugi no Wistoria S01 1080p WEBRip DD+ x265-EMBER/[EMBER] Tsue to Tsurugi no Wistoria - 01.mkv",
|
|
"/Users/r/Downloads/b6aa416f662a2df83c6f5f79da95004ced59b8ef/Tsue to Tsurugi no Wistoria S01 1080p WEBRip DD+ x265-EMBER/[EMBER] Tsue to Tsurugi no Wistoria - 02.mkv",
|
|
},
|
|
dest: "./dest",
|
|
expected: "./dest/Tsue to Tsurugi no Wistoria S01 1080p WEBRip DD+ x265-EMBER",
|
|
expectErr: false,
|
|
},
|
|
{
|
|
name: "Case 11",
|
|
files: []string{
|
|
"/Users/rahim/Downloads/80431b4f9a12f4e06616062d3d3973b9ef99b5e6/[SubsPlease] Bocchi the Rock! - 01 (1080p) [E04F4EFB]/[SubsPlease] Bocchi the Rock! - 01 (1080p) [E04F4EFB].mkv",
|
|
},
|
|
dest: "./dest",
|
|
expected: "./dest/[SubsPlease] Bocchi the Rock! - 01 (1080p) [E04F4EFB].mkv",
|
|
expectErr: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Create the source directory structure
|
|
root := "./root"
|
|
for _, file := range tt.files {
|
|
path := filepath.Join(root, file)
|
|
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
|
|
t.Fatalf("failed to create directory: %v", err)
|
|
}
|
|
if err := os.WriteFile(path, []byte("dummy content"), 0644); err != nil {
|
|
t.Fatalf("failed to create file %s: %v", path, err)
|
|
}
|
|
}
|
|
defer os.RemoveAll(root) // Cleanup temp dir after test
|
|
|
|
PrintPathStructure(root, "")
|
|
println("-----------------------------")
|
|
|
|
// Create the destination directory
|
|
if err := os.MkdirAll(tt.dest, 0755); err != nil {
|
|
t.Fatalf("failed to create dest directory: %v", err)
|
|
}
|
|
defer os.RemoveAll(tt.dest) // Cleanup dest after test
|
|
|
|
// Move the contents
|
|
err := moveContentsTo(root, tt.dest)
|
|
|
|
if (err != nil) != tt.expectErr {
|
|
t.Errorf("unexpected error: %v", err)
|
|
}
|
|
|
|
if !tt.expectErr {
|
|
if _, err := os.Stat(tt.expected); os.IsNotExist(err) {
|
|
t.Errorf("expected directory or file does not exist: %s", tt.expected)
|
|
}
|
|
|
|
PrintPathStructure(tt.dest, "")
|
|
}
|
|
})
|
|
}
|
|
}
|