Files
seanime-docker/seanime-2.9.10/internal/debrid/client/download_test.go
2025-09-20 14:08:38 +01:00

111 lines
2.5 KiB
Go

package debrid_client
import (
"context"
"fmt"
"github.com/stretchr/testify/require"
"os"
"seanime/internal/database/db"
"seanime/internal/database/models"
"seanime/internal/debrid/debrid"
"seanime/internal/test_utils"
"seanime/internal/util"
"testing"
"time"
)
func TestTorBoxDownload(t *testing.T) {
test_utils.InitTestProvider(t)
logger := util.NewLogger()
database, err := db.NewDatabase(test_utils.ConfigData.Path.DataDir, test_utils.ConfigData.Database.Name, logger)
require.NoError(t, err)
repo := GetMockRepository(t, database)
err = repo.InitializeProvider(&models.DebridSettings{
Enabled: true,
Provider: "torbox",
ApiKey: test_utils.ConfigData.Provider.TorBoxApiKey,
})
require.NoError(t, err)
tempDestinationDir := t.TempDir()
fmt.Println(tempDestinationDir)
//
// Test download
//
torrentItemId := "116389"
err = database.InsertDebridTorrentItem(&models.DebridTorrentItem{
TorrentItemID: torrentItemId,
Destination: tempDestinationDir,
Provider: "torbox",
MediaId: 0, // Not yet used
})
require.NoError(t, err)
// Get the provider
provider, err := repo.GetProvider()
require.NoError(t, err)
// Get the torrents from the provider
torrentItems, err := provider.GetTorrents()
require.NoError(t, err)
// Get the torrent item from the database
dbTorrentItem, err := database.GetDebridTorrentItemByTorrentItemId(torrentItemId)
// Select the torrent item from the provider
var torrentItem *debrid.TorrentItem
for _, item := range torrentItems {
if item.ID == dbTorrentItem.TorrentItemID {
torrentItem = item
}
}
require.NotNil(t, torrentItem)
// Check if the torrent is ready
require.Truef(t, torrentItem.IsReady, "Torrent is not ready")
// Remove the item from the database
err = database.DeleteDebridTorrentItemByDbId(dbTorrentItem.ID)
require.NoError(t, err)
// Download the torrent
err = repo.downloadTorrentItem(dbTorrentItem.TorrentItemID, torrentItem.Name, dbTorrentItem.Destination)
require.NoError(t, err)
time.Sleep(time.Millisecond * 500)
// Wait for the download to finish
loop:
for {
select {
case <-time.After(time.Second * 1):
isEmpty := true
repo.ctxMap.Range(func(key string, value context.CancelFunc) bool {
isEmpty = false
return true
})
if isEmpty {
break loop
}
}
}
// Check if the file exists
entries, err := os.ReadDir(tempDestinationDir)
require.NoError(t, err)
fmt.Println("=== Downloaded files ===")
for _, entry := range entries {
util.Spew(entry.Name())
}
require.NotEmpty(t, entries)
}