diff --git a/pkg/cmd/agent-task/capi/sessions.go b/pkg/cmd/agent-task/capi/sessions.go index c1f7fd846..3a74ef3d9 100644 --- a/pkg/cmd/agent-task/capi/sessions.go +++ b/pkg/cmd/agent-task/capi/sessions.go @@ -106,12 +106,16 @@ type SessionError struct { var SessionFields = []string{ "id", "name", - "status", + "state", "repository", + "user", "createdAt", "updatedAt", + "completedAt", "pullRequestNumber", "pullRequestUrl", + "pullRequestTitle", + "pullRequestState", } // ExportData implements the exportable interface for JSON output. @@ -123,7 +127,7 @@ func (s *Session) ExportData(fields []string) map[string]interface{} { data[f] = s.ID case "name": data[f] = s.Name - case "status": + case "state": data[f] = s.State case "repository": if s.PullRequest != nil && s.PullRequest.Repository != nil { @@ -131,10 +135,22 @@ func (s *Session) ExportData(fields []string) map[string]interface{} { } else { data[f] = nil } + case "user": + if s.User != nil { + data[f] = s.User.Login + } else { + data[f] = nil + } case "createdAt": data[f] = s.CreatedAt case "updatedAt": data[f] = s.LastUpdatedAt + case "completedAt": + if s.CompletedAt.IsZero() { + data[f] = nil + } else { + data[f] = s.CompletedAt + } case "pullRequestNumber": if s.PullRequest != nil { data[f] = s.PullRequest.Number @@ -147,6 +163,18 @@ func (s *Session) ExportData(fields []string) map[string]interface{} { } else { data[f] = nil } + case "pullRequestTitle": + if s.PullRequest != nil { + data[f] = s.PullRequest.Title + } else { + data[f] = nil + } + case "pullRequestState": + if s.PullRequest != nil { + data[f] = s.PullRequest.State + } else { + data[f] = nil + } default: data[f] = nil } diff --git a/pkg/cmd/agent-task/view/view_test.go b/pkg/cmd/agent-task/view/view_test.go index f2abe4d52..34036cfa5 100644 --- a/pkg/cmd/agent-task/view/view_test.go +++ b/pkg/cmd/agent-task/view/view_test.go @@ -1231,7 +1231,7 @@ func Test_viewRun(t *testing.T) { Number: 42, URL: "https://github.com/OWNER/REPO/pull/42", Title: "Fix login bug", - State: "OPEN", + State: "MERGED", Repository: &api.PRRepository{ NameWithOwner: "OWNER/REPO", }, @@ -1242,8 +1242,30 @@ func Test_viewRun(t *testing.T) { }, nil } }, - wantOut: "{\"id\":\"some-session-id\",\"name\":\"Fix login bug\",\"pullRequestNumber\":42,\"pullRequestUrl\":\"https://github.com/OWNER/REPO/pull/42\",\"repository\":\"OWNER/REPO\",\"status\":\"completed\"}\n", - jsonFields: []string{"id", "name", "status", "repository", "pullRequestNumber", "pullRequestUrl"}, + wantOut: "{\"id\":\"some-session-id\",\"name\":\"Fix login bug\",\"pullRequestNumber\":42,\"pullRequestState\":\"MERGED\",\"pullRequestTitle\":\"Fix login bug\",\"pullRequestUrl\":\"https://github.com/OWNER/REPO/pull/42\",\"repository\":\"OWNER/REPO\",\"state\":\"completed\",\"user\":\"testuser\"}\n", + jsonFields: []string{"id", "name", "state", "repository", "user", "pullRequestNumber", "pullRequestUrl", "pullRequestTitle", "pullRequestState"}, + }, + { + name: "json output with nil pull request", + tty: false, + opts: ViewOptions{ + SelectorArg: "some-session-id", + SessionID: "some-session-id", + }, + capiStubs: func(t *testing.T, m *capi.CapiClientMock) { + m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) { + return &capi.Session{ + ID: "some-session-id", + Name: "New task", + State: "in_progress", + CreatedAt: sampleDate, + LastUpdatedAt: sampleDate, + ResourceType: "pull", + }, nil + } + }, + wantOut: "{\"id\":\"some-session-id\",\"name\":\"New task\",\"pullRequestNumber\":null,\"pullRequestUrl\":null,\"repository\":null,\"state\":\"in_progress\",\"user\":null}\n", + jsonFields: []string{"id", "name", "state", "repository", "user", "pullRequestNumber", "pullRequestUrl"}, }, }