tests: add some functional tests for releases

This commit is contained in:
Romain Bertrand 2026-01-05 13:01:50 +01:00
parent 462d3c0c2c
commit be3121ffd3

View file

@ -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")
}