From a1a498de26a09bfbcce66beb3780e87eae81551e Mon Sep 17 00:00:00 2001 From: Jason Brill Date: Mon, 16 Dec 2024 12:23:38 -0500 Subject: [PATCH 1/3] docs: review_requested and review_request_removed to issues_timeline.go --- github/issues_timeline.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/github/issues_timeline.go b/github/issues_timeline.go index ffd9b6fecfc..903f5b89c34 100644 --- a/github/issues_timeline.go +++ b/github/issues_timeline.go @@ -97,6 +97,14 @@ type Timeline struct { // reviewed // The pull request was reviewed. // + // review_requested + // The actor requested a review from a user or team. + // Reviewer and Requester/RequestedTeam will be populated. + // + // review_request_removed + // The actor removed a review request from a user or team. + // Reviewer and Requester/RequestedTeam will be populated. + // // subscribed // The actor subscribed to receive notifications for an issue. // From 2647563ab056e4e049c50c6f2b21eee266ec7aeb Mon Sep 17 00:00:00 2001 From: Jason Brill Date: Tue, 17 Dec 2024 11:02:26 -0500 Subject: [PATCH 2/3] tests: reviewer/requester timeline test --- github/issues_timeline_test.go | 98 ++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/github/issues_timeline_test.go b/github/issues_timeline_test.go index 1e88f500d99..db802e450cc 100644 --- a/github/issues_timeline_test.go +++ b/github/issues_timeline_test.go @@ -11,10 +11,20 @@ import ( "net/http" "strings" "testing" + "time" "github.com/google/go-cmp/cmp" ) +func parseTime(t *testing.T, value string) time.Time { + t.Helper() + parsedTime, err := time.Parse(time.RFC3339, value) + if err != nil { + t.Fatalf("failed to parse time: %v", err) + } + return parsedTime +} + func TestIssuesService_ListIssueTimeline(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -255,3 +265,91 @@ func TestTimeline_Marshal(t *testing.T) { testJSONMarshal(t, u, want) } + +func TestTimeline_ReviewRequests(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/repos/example-org/example-repo/issues/3/timeline", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `[{ + "id": 1234567890, + "url": "http://example.com/timeline/1", + "actor": { + "login": "actor-user", + "id": 1 + }, + "event": "review_requested", + "created_at": "2024-12-17T15:47:42Z", + "requested_reviewer": { + "login": "reviewer-user", + "id": 2 + }, + "review_requester": { + "login": "requester-user", + "id": 1 + } + }, + { + "id": 1234567891, + "url": "http://example.com/timeline/2", + "actor": { + "login": "actor-user", + "id": 1 + }, + "event": "review_request_removed", + "created_at": "2024-12-17T15:51:04Z", + "requested_reviewer": { + "login": "reviewer-user", + "id": 2 + } + }]`) + }) + + ctx := context.Background() + events, _, err := client.Issues.ListIssueTimeline(ctx, "example-org", "example-repo", 3, nil) + if err != nil { + t.Errorf("Issues.ListIssueTimeline returned error: %v", err) + } + + want := []*Timeline{ + { + ID: Ptr(int64(1234567890)), + URL: Ptr("http://example.com/timeline/1"), + Actor: &User{ + Login: Ptr("actor-user"), + ID: Ptr(int64(1)), + }, + Event: Ptr("review_requested"), + CreatedAt: &Timestamp{parseTime(t, "2024-12-17T15:47:42Z")}, + Reviewer: &User{ + Login: Ptr("reviewer-user"), + ID: Ptr(int64(2)), + }, + Requester: &User{ + Login: Ptr("requester-user"), + ID: Ptr(int64(1)), + }, + }, + { + ID: Ptr(int64(1234567891)), + URL: Ptr("http://example.com/timeline/2"), + Actor: &User{ + Login: Ptr("actor-user"), + ID: Ptr(int64(1)), + }, + Event: Ptr("review_request_removed"), + CreatedAt: &Timestamp{parseTime(t, "2024-12-17T15:51:04Z")}, + Reviewer: &User{ + Login: Ptr("reviewer-user"), + ID: Ptr(int64(2)), + }, + }, + } + + if !cmp.Equal(events, want) { + t.Errorf("Issues.ListIssueTimeline review request events = %+v, want %+v", events, want) + diff := cmp.Diff(events, want) + t.Errorf("Difference: %s", diff) + } +} From d5b9f7e813cf90b67fef8f4abfc127bdc772df43 Mon Sep 17 00:00:00 2001 From: Jason Brill Date: Tue, 17 Dec 2024 12:53:23 -0500 Subject: [PATCH 3/3] tests: consistent referenceTime usage in issues_timeline_test --- github/issues_timeline_test.go | 70 +++++++++++++++------------------- 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/github/issues_timeline_test.go b/github/issues_timeline_test.go index db802e450cc..ed7649489e2 100644 --- a/github/issues_timeline_test.go +++ b/github/issues_timeline_test.go @@ -11,20 +11,10 @@ import ( "net/http" "strings" "testing" - "time" "github.com/google/go-cmp/cmp" ) -func parseTime(t *testing.T, value string) time.Time { - t.Helper() - parsedTime, err := time.Parse(time.RFC3339, value) - if err != nil { - t.Fatalf("failed to parse time: %v", err) - } - return parsedTime -} - func TestIssuesService_ListIssueTimeline(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -273,36 +263,36 @@ func TestTimeline_ReviewRequests(t *testing.T) { mux.HandleFunc("/repos/example-org/example-repo/issues/3/timeline", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "GET") fmt.Fprint(w, `[{ - "id": 1234567890, - "url": "http://example.com/timeline/1", - "actor": { - "login": "actor-user", - "id": 1 - }, - "event": "review_requested", - "created_at": "2024-12-17T15:47:42Z", - "requested_reviewer": { - "login": "reviewer-user", - "id": 2 - }, - "review_requester": { - "login": "requester-user", - "id": 1 - } + "id": 1234567890, + "url": "http://example.com/timeline/1", + "actor": { + "login": "actor-user", + "id": 1 + }, + "event": "review_requested", + "created_at": "2006-01-02T15:04:05Z", + "requested_reviewer": { + "login": "reviewer-user", + "id": 2 + }, + "review_requester": { + "login": "requester-user", + "id": 1 + } }, { - "id": 1234567891, - "url": "http://example.com/timeline/2", - "actor": { - "login": "actor-user", - "id": 1 - }, - "event": "review_request_removed", - "created_at": "2024-12-17T15:51:04Z", - "requested_reviewer": { - "login": "reviewer-user", - "id": 2 - } + "id": 1234567891, + "url": "http://example.com/timeline/2", + "actor": { + "login": "actor-user", + "id": 1 + }, + "event": "review_request_removed", + "created_at": "2006-01-02T15:04:05Z", + "requested_reviewer": { + "login": "reviewer-user", + "id": 2 + } }]`) }) @@ -321,7 +311,7 @@ func TestTimeline_ReviewRequests(t *testing.T) { ID: Ptr(int64(1)), }, Event: Ptr("review_requested"), - CreatedAt: &Timestamp{parseTime(t, "2024-12-17T15:47:42Z")}, + CreatedAt: &Timestamp{referenceTime}, Reviewer: &User{ Login: Ptr("reviewer-user"), ID: Ptr(int64(2)), @@ -339,7 +329,7 @@ func TestTimeline_ReviewRequests(t *testing.T) { ID: Ptr(int64(1)), }, Event: Ptr("review_request_removed"), - CreatedAt: &Timestamp{parseTime(t, "2024-12-17T15:51:04Z")}, + CreatedAt: &Timestamp{referenceTime}, Reviewer: &User{ Login: Ptr("reviewer-user"), ID: Ptr(int64(2)),