209 lines
5.1 KiB
Go
209 lines
5.1 KiB
Go
|
|
// +build functional
|
||
|
|
|
||
|
|
package functional
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"code.gitea.io/sdk/gitea"
|
||
|
|
)
|
||
|
|
|
||
|
|
// TestAPIConnection verifies we can connect to the Codeberg API with the test account
|
||
|
|
func TestAPIConnection(t *testing.T) {
|
||
|
|
env := NewTestEnv(t)
|
||
|
|
env.VerifyAPIConnection()
|
||
|
|
}
|
||
|
|
|
||
|
|
// TestListRepositories verifies we can list repositories
|
||
|
|
func TestListRepositories(t *testing.T) {
|
||
|
|
env := NewTestEnv(t)
|
||
|
|
|
||
|
|
repos, _, err := env.Client.ListUserRepos(env.Owner, gitea.ListReposOptions{})
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("failed to list repositories: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(repos) == 0 {
|
||
|
|
t.Fatalf("expected at least one repository, got none")
|
||
|
|
}
|
||
|
|
|
||
|
|
t.Logf("Found %d repositories", len(repos))
|
||
|
|
|
||
|
|
// Verify we can find our test repo
|
||
|
|
found := false
|
||
|
|
for _, repo := range repos {
|
||
|
|
if repo.Name == env.RepoName {
|
||
|
|
found = true
|
||
|
|
t.Logf("Found test repository: %s", repo.FullName)
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if !found {
|
||
|
|
t.Fatalf("test repository %s not found in user's repositories", env.RepoName)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// TestGetRepository verifies we can get repository details
|
||
|
|
func TestGetRepository(t *testing.T) {
|
||
|
|
env := NewTestEnv(t)
|
||
|
|
|
||
|
|
repo, _, err := env.Client.GetRepo(env.Owner, env.RepoName)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("failed to get repository: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if repo.Name != env.RepoName {
|
||
|
|
t.Fatalf("expected repo name %s, got %s", env.RepoName, repo.Name)
|
||
|
|
}
|
||
|
|
|
||
|
|
if repo.Owner.UserName != env.Owner {
|
||
|
|
t.Fatalf("expected owner %s, got %s", env.Owner, repo.Owner.UserName)
|
||
|
|
}
|
||
|
|
|
||
|
|
t.Logf("Repository: %s (%s)", repo.FullName, repo.Description)
|
||
|
|
}
|
||
|
|
|
||
|
|
// TestCreateAndListIssues verifies we can create and list issues
|
||
|
|
func TestCreateAndListIssues(t *testing.T) {
|
||
|
|
env := NewTestEnv(t)
|
||
|
|
|
||
|
|
// Create a test issue
|
||
|
|
issueNum := env.CreateTestIssue(
|
||
|
|
"[FGJ E2E Test] Test Issue",
|
||
|
|
"This is a functional test issue for fgj",
|
||
|
|
)
|
||
|
|
|
||
|
|
defer env.CleanupIssue(issueNum)
|
||
|
|
|
||
|
|
// List issues
|
||
|
|
issues, _, err := env.Client.ListRepoIssues(env.Owner, env.RepoName, gitea.ListIssueOption{})
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("failed to list issues: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Verify our created issue is in the list
|
||
|
|
found := false
|
||
|
|
for _, issue := range issues {
|
||
|
|
if issue.Index == issueNum {
|
||
|
|
found = true
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if !found {
|
||
|
|
t.Fatalf("created issue #%d not found in issue list", issueNum)
|
||
|
|
}
|
||
|
|
|
||
|
|
t.Logf("Successfully created and listed issue #%d", issueNum)
|
||
|
|
}
|
||
|
|
|
||
|
|
// TestGetIssue verifies we can get issue details
|
||
|
|
func TestGetIssue(t *testing.T) {
|
||
|
|
env := NewTestEnv(t)
|
||
|
|
|
||
|
|
// Create a test issue
|
||
|
|
issueNum := env.CreateTestIssue(
|
||
|
|
"[FGJ E2E Test] Get Issue Test",
|
||
|
|
"Testing get issue functionality",
|
||
|
|
)
|
||
|
|
|
||
|
|
defer env.CleanupIssue(issueNum)
|
||
|
|
|
||
|
|
// Get the issue
|
||
|
|
issue, _, err := env.Client.GetIssue(env.Owner, env.RepoName, issueNum)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("failed to get issue: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if issue.Index != issueNum {
|
||
|
|
t.Fatalf("expected issue number %d, got %d", issueNum, issue.Index)
|
||
|
|
}
|
||
|
|
|
||
|
|
if issue.Title != "[FGJ E2E Test] Get Issue Test" {
|
||
|
|
t.Fatalf("issue title mismatch")
|
||
|
|
}
|
||
|
|
|
||
|
|
t.Logf("Retrieved issue #%d: %s", issueNum, issue.Title)
|
||
|
|
}
|
||
|
|
|
||
|
|
// TestCommentOnIssue verifies we can comment on issues
|
||
|
|
func TestCommentOnIssue(t *testing.T) {
|
||
|
|
env := NewTestEnv(t)
|
||
|
|
|
||
|
|
// Create a test issue
|
||
|
|
issueNum := env.CreateTestIssue(
|
||
|
|
"[FGJ E2E Test] Comment Test",
|
||
|
|
"Testing comment functionality",
|
||
|
|
)
|
||
|
|
|
||
|
|
defer env.CleanupIssue(issueNum)
|
||
|
|
|
||
|
|
// Add a comment
|
||
|
|
comment, _, err := env.Client.CreateIssueComment(
|
||
|
|
env.Owner,
|
||
|
|
env.RepoName,
|
||
|
|
issueNum,
|
||
|
|
gitea.CreateIssueCommentOption{
|
||
|
|
Body: "This is an automated test comment from fgj functional tests",
|
||
|
|
},
|
||
|
|
)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("failed to create issue comment: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if comment.Body != "This is an automated test comment from fgj functional tests" {
|
||
|
|
t.Fatalf("comment body mismatch")
|
||
|
|
}
|
||
|
|
|
||
|
|
t.Logf("Successfully added comment to issue #%d", issueNum)
|
||
|
|
}
|
||
|
|
|
||
|
|
// TestGetRepositoryWithCollaborators verifies we can get repo and check collaborators
|
||
|
|
func TestGetRepositoryWithCollaborators(t *testing.T) {
|
||
|
|
env := NewTestEnv(t)
|
||
|
|
|
||
|
|
// Get repository with full details
|
||
|
|
repo, _, err := env.Client.GetRepo(env.Owner, env.RepoName)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("failed to get repository: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Verify basic repo properties
|
||
|
|
if repo.FullName != env.Owner+"/"+env.RepoName {
|
||
|
|
t.Fatalf("expected repo full name %s/%s, got %s", env.Owner, env.RepoName, repo.FullName)
|
||
|
|
}
|
||
|
|
|
||
|
|
t.Logf("Repository %s has %d watchers, %d stars, %d forks",
|
||
|
|
repo.FullName, repo.Watchers, repo.Stars, repo.Forks)
|
||
|
|
}
|
||
|
|
|
||
|
|
// TestAPIErrorHandling verifies proper error handling for invalid requests
|
||
|
|
func TestAPIErrorHandling(t *testing.T) {
|
||
|
|
env := NewTestEnv(t)
|
||
|
|
|
||
|
|
// Try to get a non-existent issue
|
||
|
|
_, _, err := env.Client.GetIssue(env.Owner, env.RepoName, 999999)
|
||
|
|
if err == nil {
|
||
|
|
t.Fatalf("expected error for non-existent issue, got none")
|
||
|
|
}
|
||
|
|
|
||
|
|
t.Logf("Properly handled error: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
// TestRepositoryExists verifies the test repository exists and is accessible
|
||
|
|
func TestRepositoryExists(t *testing.T) {
|
||
|
|
env := NewTestEnv(t)
|
||
|
|
|
||
|
|
repo, _, err := env.Client.GetRepo(env.Owner, env.RepoName)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("test repository does not exist or is not accessible: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
if repo.Private {
|
||
|
|
t.Logf("Test repository is private: %s", repo.FullName)
|
||
|
|
} else {
|
||
|
|
t.Logf("Test repository is public: %s", repo.FullName)
|
||
|
|
}
|
||
|
|
}
|