package download import ( "github.com/GopeedLab/gopeed/internal/logger" "github.com/GopeedLab/gopeed/pkg/base" "os" "testing" ) func TestDownloader_InstallExtensionByFolder(t *testing.T) { setupDownloader(func(downloader *Downloader) { if _, err := downloader.InstallExtensionByFolder("./testdata/extensions/basic", false); err != nil { t.Fatal(err) } rr, err := downloader.Resolve(&base.Request{ URL: "https://github.com/test", }) if err != nil { t.Fatal(err) } if len(rr.Res.Files) == 1 { t.Fatal("resolve error") } }) } func TestDownloader_InstallExtensionByFolderDevMode(t *testing.T) { setupDownloader(func(downloader *Downloader) { if _, err := downloader.InstallExtensionByFolder("./testdata/extensions/basic", true); err != nil { t.Fatal(err) } rr, err := downloader.Resolve(&base.Request{ URL: "https://github.com/test", }) if err != nil { t.Fatal(err) } if len(rr.Res.Files) == 1 { t.Fatal("resolve error") } }) } func TestDownloader_InstallExtensionByGit(t *testing.T) { setupDownloader(func(downloader *Downloader) { if _, err := downloader.InstallExtensionByGit("https://github.com/GopeedLab/gopeed-extension-samples#github-release-sample"); err != nil { t.Fatal(err) } rr, err := downloader.Resolve(&base.Request{ URL: "https://github.com/GopeedLab/gopeed/releases", }) if err != nil { t.Fatal(err) } if len(rr.Res.Files) == 1 { t.Fatal("resolve error") } }) } func TestDownloader_InstallExtensionByGitSimple(t *testing.T) { setupDownloader(func(downloader *Downloader) { if _, err := downloader.InstallExtensionByGit("github.com/GopeedLab/gopeed-extension-samples#github-release-sample"); err != nil { t.Fatal(err) } rr, err := downloader.Resolve(&base.Request{ URL: "https://github.com/GopeedLab/gopeed/releases", }) if err != nil { t.Fatal(err) } if len(rr.Res.Files) == 1 { t.Fatal("resolve error") } }) } func TestDownloader_InstallExtensionByGitFull(t *testing.T) { setupDownloader(func(downloader *Downloader) { if _, err := downloader.InstallExtensionByGit("https://github.com/GopeedLab/gopeed-extension-samples.git#github-release-sample"); err != nil { t.Fatal(err) } rr, err := downloader.Resolve(&base.Request{ URL: "https://github.com/GopeedLab/gopeed/releases", }) if err != nil { t.Fatal(err) } if len(rr.Res.Files) == 1 { t.Fatal("resolve error") } }) } func TestDownloader_UpgradeExtension(t *testing.T) { setupDownloader(func(downloader *Downloader) { installedExt, err := downloader.InstallExtensionByFolder("./testdata/extensions/update", false) if err != nil { t.Fatal(err) } extensions := downloader.GetExtensions() if len(extensions) == 0 { t.Fatal("extension not installed") } oldVersion := installedExt.Version // fetch new version from git newVersion, err := downloader.UpgradeCheckExtension(installedExt.Identity) if err != nil { t.Fatal(err) } if newVersion == "" { t.Fatal("new version not found") } // update extension if err = downloader.UpgradeExtension(installedExt.Identity); err != nil { t.Fatal(err) } upgradeExt := downloader.getExtension(installedExt.Identity) if upgradeExt.Version == oldVersion { t.Fatal("extension update fail") } rr, err := downloader.Resolve(&base.Request{ URL: "https://github.com/GopeedLab/gopeed/releases", }) if err != nil { t.Fatal(err) } if len(rr.Res.Files) == 1 { t.Fatal("resolve error") } }) } func TestDownloader_Extension_Settings(t *testing.T) { setupDownloader(func(downloader *Downloader) { if _, err := downloader.InstallExtensionByFolder("./testdata/extensions/settings_empty", false); err != nil { t.Fatal(err) } rr, err := downloader.Resolve(&base.Request{ URL: "https://github.com/test", }) if err != nil { t.Fatal(err) } if len(rr.Res.Files) == 1 { t.Fatal("settings parse error") } }) setupDownloader(func(downloader *Downloader) { installedExt, err := downloader.InstallExtensionByFolder("./testdata/extensions/settings_all", false) if err != nil { t.Fatal(err) } downloader.UpdateExtensionSettings(installedExt.Identity, map[string]any{ "stringValued": "valued", "numberValued": 1.1, "booleanValued": true, }) rr, err := downloader.Resolve(&base.Request{ URL: "https://github.com/test", }) if err != nil { t.Fatal(err) } if len(rr.Res.Files) == 1 { t.Fatal("settings parse error") } }) } func TestDownloader_ExtensionStorage(t *testing.T) { setupDownloader(func(downloader *Downloader) { if _, err := downloader.InstallExtensionByFolder("./testdata/extensions/storage", false); err != nil { t.Fatal(err) } rr, err := downloader.Resolve(&base.Request{ URL: "https://github.com/test", }) if err != nil { t.Fatal(err) } if len(rr.Res.Files) == 1 { t.Fatal("resolve error") } }) } func TestDownloader_SwitchExtension(t *testing.T) { setupDownloader(func(downloader *Downloader) { installedExt, err := downloader.InstallExtensionByFolder("./testdata/extensions/basic", false) if err != nil { t.Fatal(err) } if installedExt.Disabled == true { t.Fatal("extension disabled") } if err = downloader.SwitchExtension(installedExt.Identity, false); err != nil { t.Fatal(err) } if installedExt.Disabled == false { t.Fatal("extension enabled") } }) } func TestDownloader_DeleteExtension(t *testing.T) { setupDownloader(func(downloader *Downloader) { installedExt, err := downloader.InstallExtensionByFolder("./testdata/extensions/settings_all", false) if err != nil { t.Fatal(err) } extensions := downloader.GetExtensions() if err := downloader.DeleteExtension(installedExt.Identity); err != nil { t.Fatal(err) } extensions = downloader.GetExtensions() if len(extensions) != 0 { t.Fatal("extension delete fail") } }) } func TestDownloader_Extension_OnResolve(t *testing.T) { setupDownloader(func(downloader *Downloader) { installedExt, err := downloader.InstallExtensionByFolder("./testdata/extensions/settings_all", false) if err != nil { t.Fatal(err) } if err := downloader.DeleteExtension(installedExt.Identity); err != nil { t.Fatal(err) } extensions := downloader.GetExtensions() if len(extensions) != 0 { t.Fatal("extension delete fail") } }) } func TestDownloader_Extension_Logger(t *testing.T) { logger := logger.NewLogger(false, "") il := newInstanceLogger(&Extension{ Name: "test", }, logger) il.Debug("msg1", "msg2") il.Info("msg1", "msg2") il.Warn("msg1", "msg2") il.Error("msg1", "msg2") } func setupDownloader(fn func(downloader *Downloader)) { defaultDownloader.Setup() defaultDownloader.cfg.StorageDir = ".test_storage" defaultDownloader.cfg.DownloadDir = ".test_download" defer func() { defaultDownloader.Clear() os.RemoveAll(defaultDownloader.cfg.StorageDir) os.RemoveAll(defaultDownloader.cfg.DownloadDir) }() fn(defaultDownloader) }