diff --git a/pkg/cmd/agent-task/view/view.go b/pkg/cmd/agent-task/view/view.go index 7d992ed87..c7474c12d 100644 --- a/pkg/cmd/agent-task/view/view.go +++ b/pkg/cmd/agent-task/view/view.go @@ -7,6 +7,7 @@ import ( "net/http" "net/url" "strconv" + "strings" "time" "github.com/MakeNowJust/heredoc" @@ -306,13 +307,19 @@ func printSession(opts *ViewOptions, session *capi.Session) { fmt.Fprintf(opts.IO.Out, "Started %s\n", text.FuzzyAgo(time.Now(), session.CreatedAt)) } - var durationNote string - if session.CompletedAt.After(session.CreatedAt) { - durationNote = fmt.Sprintf("Duration %s", session.CompletedAt.Sub(session.CreatedAt).Round(time.Second).String()) + additionalNotes := make([]string, 0, 2) + + if session.PremiumRequests > 0 { + s := strings.TrimSuffix(fmt.Sprintf("%.1f", session.PremiumRequests), ".0") + additionalNotes = append(additionalNotes, fmt.Sprintf("Used %s premium request(s)", s)) } - if durationNote != "" { - fmt.Fprintf(opts.IO.Out, "%s\n", cs.Muted(durationNote)) + if session.CompletedAt.After(session.CreatedAt) { + additionalNotes = append(additionalNotes, fmt.Sprintf("Duration %s", session.CompletedAt.Sub(session.CreatedAt).Round(time.Second).String())) + } + + if len(additionalNotes) > 0 { + fmt.Fprintf(opts.IO.Out, "%s\n", cs.Muted(strings.Join(additionalNotes, " • "))) } if !opts.Log { diff --git a/pkg/cmd/agent-task/view/view_test.go b/pkg/cmd/agent-task/view/view_test.go index 28d63db3e..08ffaa1ba 100644 --- a/pkg/cmd/agent-task/view/view_test.go +++ b/pkg/cmd/agent-task/view/view_test.go @@ -213,10 +213,11 @@ func Test_viewRun(t *testing.T) { m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) { assert.Equal(t, "some-session-id", id) return &capi.Session{ - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -234,7 +235,7 @@ func Test_viewRun(t *testing.T) { wantOut: heredoc.Doc(` Ready for review • fix something • OWNER/REPO#101 Started on behalf of octocat about 6 hours ago - Duration 5m0s + Used 1.5 premium request(s) • Duration 5m0s For detailed session logs, try: gh agent-task view 'some-session-id' --log @@ -255,10 +256,11 @@ func Test_viewRun(t *testing.T) { m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) { assert.Equal(t, "some-session-id", id) return &capi.Session{ - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -273,7 +275,7 @@ func Test_viewRun(t *testing.T) { wantOut: heredoc.Doc(` Ready for review • fix something • OWNER/REPO#101 Started about 6 hours ago - Duration 5m0s + Used 1.5 premium request(s) • Duration 5m0s For detailed session logs, try: gh agent-task view 'some-session-id' --log @@ -294,10 +296,11 @@ func Test_viewRun(t *testing.T) { m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) { assert.Equal(t, "some-session-id", id) return &capi.Session{ - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, User: &api.GitHubUser{ Login: "octocat", }, @@ -307,7 +310,7 @@ func Test_viewRun(t *testing.T) { wantOut: heredoc.Doc(` Ready for review Started on behalf of octocat about 6 hours ago - Duration 5m0s + Used 1.5 premium request(s) • Duration 5m0s For detailed session logs, try: gh agent-task view 'some-session-id' --log @@ -325,17 +328,18 @@ func Test_viewRun(t *testing.T) { m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) { assert.Equal(t, "some-session-id", id) return &capi.Session{ - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, }, nil } }, wantOut: heredoc.Doc(` Ready for review Started about 6 hours ago - Duration 5m0s + Used 1.5 premium request(s) • Duration 5m0s For detailed session logs, try: gh agent-task view 'some-session-id' --log @@ -369,10 +373,11 @@ func Test_viewRun(t *testing.T) { m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) { assert.Equal(t, "some-session-id", id) return &capi.Session{ - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, // User data is irrelevant in this case }, nil } @@ -392,10 +397,11 @@ func Test_viewRun(t *testing.T) { m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) { assert.Equal(t, "some-session-id", id) return &capi.Session{ - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -499,10 +505,11 @@ func Test_viewRun(t *testing.T) { assert.Equal(t, defaultLimit, limit) return []*capi.Session{ { - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -521,7 +528,7 @@ func Test_viewRun(t *testing.T) { wantOut: heredoc.Doc(` Ready for review • fix something • OWNER/REPO#101 Started on behalf of octocat about 6 hours ago - Duration 5m0s + Used 1.5 premium request(s) • Duration 5m0s For detailed session logs, try: gh agent-task view 'some-session-id' --log @@ -551,11 +558,12 @@ func Test_viewRun(t *testing.T) { assert.Equal(t, defaultLimit, limit) return []*capi.Session{ { - ID: "some-session-id", - Name: "session one", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + Name: "session one", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -569,11 +577,12 @@ func Test_viewRun(t *testing.T) { }, }, { - ID: "some-other-session-id", - Name: "session two", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-other-session-id", + Name: "session two", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -604,7 +613,7 @@ func Test_viewRun(t *testing.T) { wantOut: heredoc.Doc(` Ready for review • fix something • OWNER/REPO#101 Started on behalf of octocat about 6 hours ago - Duration 5m0s + Used 1.5 premium request(s) • Duration 5m0s For detailed session logs, try: gh agent-task view 'some-session-id' --log @@ -636,11 +645,12 @@ func Test_viewRun(t *testing.T) { assert.Equal(t, defaultLimit, limit) return []*capi.Session{ { - ID: "some-session-id", - Name: "session one", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + Name: "session one", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -654,11 +664,12 @@ func Test_viewRun(t *testing.T) { }, }, { - ID: "some-other-session-id", - Name: "session two", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-other-session-id", + Name: "session two", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -689,7 +700,7 @@ func Test_viewRun(t *testing.T) { wantOut: heredoc.Doc(` Ready for review • fix something • OWNER/REPO#101 Started on behalf of octocat about 6 hours ago - Duration 5m0s + Used 1.5 premium request(s) • Duration 5m0s For detailed session logs, try: gh agent-task view 'some-session-id' --log @@ -742,10 +753,11 @@ func Test_viewRun(t *testing.T) { assert.Equal(t, defaultLimit, limit) return []*capi.Session{ { - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -784,11 +796,12 @@ func Test_viewRun(t *testing.T) { assert.Equal(t, defaultLimit, limit) return []*capi.Session{ { - ID: "some-session-id", - Name: "session one", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + Name: "session one", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -800,11 +813,12 @@ func Test_viewRun(t *testing.T) { // User data is irrelevant in this case }, { - ID: "some-other-session-id", - Name: "session two", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-other-session-id", + Name: "session two", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -845,11 +859,12 @@ func Test_viewRun(t *testing.T) { assert.Equal(t, defaultLimit, limit) return []*capi.Session{ { - ID: "some-session-id", - Name: "session one", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + Name: "session one", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -861,11 +876,12 @@ func Test_viewRun(t *testing.T) { // User data is irrelevant in this case }, { - ID: "some-other-session-id", - Name: "session two", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-other-session-id", + Name: "session two", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, PullRequest: &api.PullRequest{ Title: "fix something", Number: 101, @@ -894,10 +910,11 @@ func Test_viewRun(t *testing.T) { m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) { assert.Equal(t, "some-session-id", id) return &capi.Session{ - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, User: &api.GitHubUser{ Login: "octocat", }, @@ -917,7 +934,7 @@ func Test_viewRun(t *testing.T) { wantOut: heredoc.Doc(` Ready for review Started on behalf of octocat about 6 hours ago - Duration 5m0s + Used 1.5 premium request(s) • Duration 5m0s To follow session logs, try: gh agent-task view 'some-session-id' --log --follow @@ -939,10 +956,11 @@ func Test_viewRun(t *testing.T) { m.GetSessionFunc = func(_ context.Context, id string) (*capi.Session, error) { assert.Equal(t, "some-session-id", id) return &capi.Session{ - ID: "some-session-id", - State: "completed", - CreatedAt: sampleDate, - CompletedAt: sampleCompletedAt, + ID: "some-session-id", + State: "completed", + CreatedAt: sampleDate, + CompletedAt: sampleCompletedAt, + PremiumRequests: 1.5, User: &api.GitHubUser{ Login: "octocat", }, @@ -976,7 +994,7 @@ func Test_viewRun(t *testing.T) { wantOut: heredoc.Doc(` Ready for review Started on behalf of octocat about 6 hours ago - Duration 5m0s + Used 1.5 premium request(s) • Duration 5m0s (rendered:) (rendered:)