fix(downloads): prevent subscription readding deleted torrents

This commit is contained in:
ShukeBta
2026-06-07 19:20:10 +08:00
parent a5d061afa6
commit 88ee6d6bb7
7 changed files with 372 additions and 5 deletions
+88
View File
@@ -80,3 +80,91 @@ func TestDownloadClientRejectsUnsupportedHostScheme(t *testing.T) {
t.Fatal("expected unsupported scheme error")
}
}
func TestDownloadClientDeleteClearsLegacyQBitConnectionWhenNoDefault(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)
for key, value := range map[string]string{
"qbittorrent.url": "http://127.0.0.1:8080",
"qbittorrent.username": "admin",
"qbittorrent.password": "admin",
} {
if err := repos.Setting.Set(t.Context(), key, value); err != nil {
t.Fatal(err)
}
}
svc := NewDownloadClientService(zap.NewNop(), repos)
row, err := svc.Create(t.Context(), DownloadClientInput{
Name: "qB",
Type: "qbittorrent",
Host: "http://127.0.0.1:8080",
IsDefault: true,
Enabled: true,
})
if err != nil {
t.Fatal(err)
}
if err := svc.Delete(t.Context(), row.ID); err != nil {
t.Fatal(err)
}
for _, key := range []string{"qbittorrent.url", "qbittorrent.username", "qbittorrent.password"} {
value, err := repos.Setting.Get(t.Context(), key)
if err != nil {
t.Fatal(err)
}
if value != "" {
t.Fatalf("%s = %q, want cleared", key, value)
}
}
}
func TestDownloadClientUpdateClearsLegacyQBitConnectionWhenDefaultDisabled(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)
if err := repos.Setting.Set(t.Context(), "qbittorrent.url", "http://127.0.0.1:8080"); err != nil {
t.Fatal(err)
}
svc := NewDownloadClientService(zap.NewNop(), repos)
row, err := svc.Create(t.Context(), DownloadClientInput{
Name: "qB",
Type: "qbittorrent",
Host: "http://127.0.0.1:8080",
IsDefault: true,
Enabled: true,
})
if err != nil {
t.Fatal(err)
}
if _, err := svc.Update(t.Context(), row.ID, DownloadClientInput{
Name: "qB",
Type: "qbittorrent",
Host: "http://127.0.0.1:8080",
IsDefault: false,
Enabled: false,
}); err != nil {
t.Fatal(err)
}
value, err := repos.Setting.Get(t.Context(), "qbittorrent.url")
if err != nil {
t.Fatal(err)
}
if value != "" {
t.Fatalf("qbittorrent.url = %q, want cleared", value)
}
}