mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-11 15:56:37 +08:00
fix: harden bot accounts and download handling
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/glebarez/sqlite"
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/ShukeBta/MediaStationGo/internal/model"
|
||||
"github.com/ShukeBta/MediaStationGo/internal/repository"
|
||||
)
|
||||
|
||||
func TestDownloadClientCreateNormalizesHostAndClearsDefault(t *testing.T) {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.AutoMigrate(&model.DownloadClient{}, &model.Setting{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
repos := repository.New(db)
|
||||
svc := NewDownloadClientService(zap.NewNop(), repos)
|
||||
|
||||
first, err := svc.Create(t.Context(), DownloadClientInput{
|
||||
Name: "qB old",
|
||||
Type: "qbittorrent",
|
||||
Host: "http://127.0.0.1:8080/",
|
||||
IsDefault: true,
|
||||
Enabled: true,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
second, err := svc.Create(t.Context(), DownloadClientInput{
|
||||
Name: "qB NAS",
|
||||
Type: "qbittorrent",
|
||||
Host: "172.17.0.1:8085",
|
||||
IsDefault: true,
|
||||
Enabled: true,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if second.Host != "http://172.17.0.1:8085" {
|
||||
t.Fatalf("host = %q, want normalized http URL", second.Host)
|
||||
}
|
||||
refreshedFirst, err := repos.DownloadClient.FindByID(t.Context(), first.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if refreshedFirst == nil || refreshedFirst.IsDefault {
|
||||
t.Fatalf("old default should be cleared, got %#v", refreshedFirst)
|
||||
}
|
||||
refreshedSecond, err := repos.DownloadClient.FindByID(t.Context(), second.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if refreshedSecond == nil || !refreshedSecond.IsDefault {
|
||||
t.Fatalf("new default should be active, got %#v", refreshedSecond)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDownloadClientRejectsUnsupportedHostScheme(t *testing.T) {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.AutoMigrate(&model.DownloadClient{}, &model.Setting{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
svc := NewDownloadClientService(zap.NewNop(), repository.New(db))
|
||||
|
||||
if _, err := svc.Create(t.Context(), DownloadClientInput{
|
||||
Name: "bad",
|
||||
Type: "qbittorrent",
|
||||
Host: "ftp://127.0.0.1:8080",
|
||||
Enabled: true,
|
||||
}); err == nil {
|
||||
t.Fatal("expected unsupported scheme error")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user