diff --git a/docs/architecture.md b/docs/architecture.md index 42f4230..083ad3a 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -88,7 +88,7 @@ The `gitea/` package mirrors this using `GITEA_URL`/`GITEA_TOKEN` and `gitea.*` |------|-----------| | `client.go` | `New`, `NewFromConfig`, `GetCurrentUser`, `ForkRepo`, `CreatePullRequest` | | `repos.go` | `ListOrgRepos`, `ListOrgReposIter`, `ListUserRepos`, `ListUserReposIter`, `GetRepo`, `CreateOrgRepo`, `DeleteRepo`, `MigrateRepo` | -| `issues.go` | `ListIssues`, `ListIssuesIter`, `GetIssue`, `CreateIssue`, `EditIssue`, `AssignIssue`, `ListPullRequests`, `ListPullRequestsIter`, `GetPullRequest`, `CreateIssueComment`, `ListIssueComments`, `ListIssueCommentsIter`, `CloseIssue` | +| `issues.go` | `ListIssues`, `ListIssuesIter`, `GetIssue`, `CreateIssue`, `EditIssue`, `AssignIssue`, `ListPullRequests`, `ListPullRequestsIter`, `GetPullRequest`, `CreateIssueComment`, `GetIssueLabels`, `ListIssueComments`, `ListIssueCommentsIter`, `CloseIssue` | | `labels.go` | `ListOrgLabels`, `ListOrgLabelsIter`, `ListRepoLabels`, `ListRepoLabelsIter`, `CreateRepoLabel`, `GetLabelByName`, `EnsureLabel`, `AddIssueLabels`, `RemoveIssueLabel` | | `prs.go` | `MergePullRequest`, `SetPRDraft`, `ListPRReviews`, `GetCombinedStatus`, `DismissReview`, `UndismissReview` | | `webhooks.go` | `CreateRepoWebhook`, `ListRepoWebhooks` | diff --git a/forge/issues.go b/forge/issues.go index b540321..cf3191f 100644 --- a/forge/issues.go +++ b/forge/issues.go @@ -253,6 +253,17 @@ func (c *Client) CreateIssueComment(owner, repo string, issue int64, body string return nil } +// GetIssueLabels returns the labels currently attached to an issue. +// Usage: GetIssueLabels(...) +func (c *Client) GetIssueLabels(owner, repo string, number int64) ([]*forgejo.Label, error) { + labels, _, err := c.api.GetIssueLabels(owner, repo, number, forgejo.ListLabelsOptions{}) + if err != nil { + return nil, log.E("forge.GetIssueLabels", "failed to get issue labels", err) + } + + return labels, nil +} + // ListIssueComments returns comments for an issue. // Usage: ListIssueComments(...) func (c *Client) ListIssueComments(owner, repo string, number int64) ([]*forgejo.Comment, error) { diff --git a/forge/issues_test.go b/forge/issues_test.go index b99cc81..d195473 100644 --- a/forge/issues_test.go +++ b/forge/issues_test.go @@ -312,6 +312,25 @@ func TestClient_CreateIssueComment_Bad_ServerError_Good(t *testing.T) { assert.Contains(t, err.Error(), "failed to create comment") } +func TestClient_GetIssueLabels_Good(t *testing.T) { + client, srv := newTestClient(t) + defer srv.Close() + + labels, err := client.GetIssueLabels("test-org", "org-repo", 1) + require.NoError(t, err) + require.Len(t, labels, 1) + assert.Equal(t, "bug", labels[0].Name) +} + +func TestClient_GetIssueLabels_Bad_ServerError_Good(t *testing.T) { + client, srv := newErrorServer(t) + defer srv.Close() + + _, err := client.GetIssueLabels("test-org", "org-repo", 1) + assert.Error(t, err) + assert.Contains(t, err.Error(), "failed to get issue labels") +} + func TestClient_ListIssueComments_Good(t *testing.T) { client, srv := newTestClient(t) defer srv.Close()