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) + } +}