Polish --json support for agent-task view

- Rename 'status' field to 'state' for consistency with struct and UI
- Add missing JSON fields: completedAt, user, pullRequestTitle, pullRequestState
- Add test for nil PullRequest with --json
- Expand existing JSON test to cover new fields

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Max Beizer 2026-03-01 09:09:08 -06:00
parent 250d5a850a
commit ceb8cf2561
2 changed files with 55 additions and 5 deletions

View file

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

View file

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