From be3121ffd34a1113f294f48e5d64f24048e43150 Mon Sep 17 00:00:00 2001 From: Romain Bertrand Date: Mon, 5 Jan 2026 13:01:50 +0100 Subject: [PATCH] tests: add some functional tests for releases --- tests/functional/functional_test.go | 84 +++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/tests/functional/functional_test.go b/tests/functional/functional_test.go index 5d662dd..7fed7a1 100644 --- a/tests/functional/functional_test.go +++ b/tests/functional/functional_test.go @@ -1,3 +1,4 @@ +//go:build functional // +build functional package functional @@ -7,6 +8,7 @@ import ( "fmt" "os" "testing" + "time" "code.gitea.io/sdk/gitea" ) @@ -620,3 +622,85 @@ func TestCLIRepoClone(t *testing.T) { t.Logf("Successfully cloned repository to %s via CLI", clonePath) } + +// TestCLIReleaseCreateUploadDelete verifies release create/upload/delete via CLI. +func TestCLIReleaseCreateUploadDelete(t *testing.T) { + env := NewTestEnv(t) + + tag := fmt.Sprintf("fgj-test-%d", time.Now().UnixNano()) + title := "FGJ CLI Release Test" + notes := "Release created by functional tests" + + tmpDir := t.TempDir() + assetPath := fmt.Sprintf("%s/asset.txt", tmpDir) + if err := os.WriteFile(assetPath, []byte("fgj release asset"), 0600); err != nil { + t.Fatalf("failed to create asset file: %v", err) + } + + result := env.RunCLI( + "--hostname", env.Hostname, + "release", "create", tag, + "-t", title, + "-n", notes, + assetPath, + ) + if result.ExitCode != 0 { + t.Fatalf("release create failed with exit code %d: %s", result.ExitCode, result.Stderr) + } + + release, _, err := env.Client.GetReleaseByTag(env.Owner, env.RepoName, tag) + if err != nil { + t.Fatalf("failed to fetch created release: %v", err) + } + if release.Title != title { + t.Fatalf("expected release title %q, got %q", title, release.Title) + } + + attachments, _, err := env.Client.ListReleaseAttachments(env.Owner, env.RepoName, release.ID, gitea.ListReleaseAttachmentsOptions{}) + if err != nil { + t.Fatalf("failed to list release assets: %v", err) + } + found := false + for _, attachment := range attachments { + if attachment.Name == "asset.txt" { + found = true + break + } + } + if !found { + t.Fatalf("uploaded asset not found in release") + } + + deleteResult := env.RunCLI( + "--hostname", env.Hostname, + "release", "delete", tag, + ) + if deleteResult.ExitCode != 0 { + t.Fatalf("release delete failed with exit code %d: %s", deleteResult.ExitCode, deleteResult.Stderr) + } + + _, _, err = env.Client.GetReleaseByTag(env.Owner, env.RepoName, tag) + if err == nil { + t.Fatalf("expected release %s to be deleted, but it still exists", tag) + } +} + +// TestCLIReleaseList verifies the `fgj release list` command works. +func TestCLIReleaseList(t *testing.T) { + env := NewTestEnv(t) + + result := env.RunCLI( + "--hostname", env.Hostname, + "release", "list", + ) + + if result.ExitCode != 0 { + t.Fatalf("release list failed with exit code %d: %s", result.ExitCode, result.Stderr) + } + + if result.Stdout == "" && result.Stderr == "" { + t.Logf("Note: release list produced no output") + } + + t.Logf("Successfully listed releases via CLI") +}