tests: add functionnal tests (e2e if you will)
This commit is contained in:
parent
f3cc8bdb10
commit
9174e537b6
4 changed files with 414 additions and 1 deletions
135
tests/functional/fixtures.go
Normal file
135
tests/functional/fixtures.go
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
// +build functional
|
||||
|
||||
package functional
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/sdk/gitea"
|
||||
)
|
||||
|
||||
// TestEnv holds the functional test environment
|
||||
type TestEnv struct {
|
||||
Token string
|
||||
Hostname string
|
||||
Owner string
|
||||
RepoName string
|
||||
Client *gitea.Client
|
||||
T *testing.T
|
||||
}
|
||||
|
||||
// NewTestEnv creates a new functional test environment from environment variables
|
||||
func NewTestEnv(t *testing.T) *TestEnv {
|
||||
token := os.Getenv("CODEBERG_TEST_TOKEN")
|
||||
if token == "" {
|
||||
t.Skip("CODEBERG_TEST_TOKEN not set, skipping functional tests")
|
||||
}
|
||||
|
||||
hostname := os.Getenv("CODEBERG_TEST_HOSTNAME")
|
||||
if hostname == "" {
|
||||
hostname = "codeberg.org"
|
||||
}
|
||||
|
||||
owner := os.Getenv("CODEBERG_TEST_OWNER")
|
||||
if owner == "" {
|
||||
t.Fatal("CODEBERG_TEST_OWNER environment variable not set")
|
||||
}
|
||||
|
||||
repoName := os.Getenv("CODEBERG_TEST_REPO")
|
||||
if repoName == "" {
|
||||
t.Fatal("CODEBERG_TEST_REPO environment variable not set")
|
||||
}
|
||||
|
||||
// Create Gitea client
|
||||
client, err := gitea.NewClient(
|
||||
fmt.Sprintf("https://%s", hostname),
|
||||
gitea.SetToken(token),
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create Gitea client: %v", err)
|
||||
}
|
||||
|
||||
env := &TestEnv{
|
||||
Token: token,
|
||||
Hostname: hostname,
|
||||
Owner: owner,
|
||||
RepoName: repoName,
|
||||
Client: client,
|
||||
T: t,
|
||||
}
|
||||
|
||||
// Verify authentication by getting user info
|
||||
user, _, err := client.GetMyUserInfo()
|
||||
if err != nil {
|
||||
t.Fatalf("authentication failed: %v", err)
|
||||
}
|
||||
|
||||
t.Logf("Authenticated as user: %s on %s", user.UserName, hostname)
|
||||
return env
|
||||
}
|
||||
|
||||
// CreateTestIssue creates a test issue and returns its number
|
||||
func (env *TestEnv) CreateTestIssue(title, body string) int64 {
|
||||
opts := gitea.CreateIssueOption{
|
||||
Title: title,
|
||||
Body: body,
|
||||
}
|
||||
|
||||
issue, _, err := env.Client.CreateIssue(env.Owner, env.RepoName, opts)
|
||||
if err != nil {
|
||||
env.T.Fatalf("failed to create test issue: %v", err)
|
||||
}
|
||||
|
||||
env.T.Logf("Created test issue #%d", issue.Index)
|
||||
return issue.Index
|
||||
}
|
||||
|
||||
// CleanupIssue closes and deletes a test issue
|
||||
func (env *TestEnv) CleanupIssue(issueNumber int64) {
|
||||
closeState := gitea.StateClosed
|
||||
_, _, err := env.Client.EditIssue(env.Owner, env.RepoName, issueNumber, gitea.EditIssueOption{
|
||||
State: &closeState,
|
||||
})
|
||||
if err != nil {
|
||||
env.T.Logf("warning: failed to close issue #%d: %v", issueNumber, err)
|
||||
}
|
||||
}
|
||||
|
||||
// CreateTestPullRequest creates a test PR (requires a branch to exist)
|
||||
func (env *TestEnv) CreateTestPullRequest(title, body, head, base string) int64 {
|
||||
opts := gitea.CreatePullRequestOption{
|
||||
Head: head,
|
||||
Base: base,
|
||||
Title: title,
|
||||
Body: body,
|
||||
}
|
||||
|
||||
pr, _, err := env.Client.CreatePullRequest(env.Owner, env.RepoName, opts)
|
||||
if err != nil {
|
||||
env.T.Fatalf("failed to create test PR: %v", err)
|
||||
}
|
||||
|
||||
env.T.Logf("Created test PR #%d", pr.Index)
|
||||
return pr.Index
|
||||
}
|
||||
|
||||
// CleanupPullRequest closes a test PR
|
||||
func (env *TestEnv) CleanupPullRequest(prNumber int64) {
|
||||
closed := gitea.StateClosed
|
||||
_, _, err := env.Client.EditPullRequest(env.Owner, env.RepoName, prNumber, gitea.EditPullRequestOption{
|
||||
State: &closed,
|
||||
})
|
||||
if err != nil {
|
||||
env.T.Logf("warning: failed to close PR #%d: %v", prNumber, err)
|
||||
}
|
||||
}
|
||||
|
||||
// VerifyAPIConnection verifies the test environment can connect to the API
|
||||
func (env *TestEnv) VerifyAPIConnection() {
|
||||
_, _, err := env.Client.GetMyUserInfo()
|
||||
if err != nil {
|
||||
env.T.Fatalf("failed to verify API connection: %v", err)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue