111 lines
2.5 KiB
Go
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)
|
|
}
|