diff --git a/github/repos_environments.go b/github/repos_environments.go index 5e892e5f59c..1f1d5b56e33 100644 --- a/github/repos_environments.go +++ b/github/repos_environments.go @@ -101,10 +101,17 @@ func (r *RequiredReviewer) UnmarshalJSON(data []byte) error { return err } r.Reviewer = reviewer.Reviewer + case "BusinessTeam": // BusinessTeam is the type returned for Enterprise Teams, but we will treat it as a Team type + reviewer.Reviewer = &Team{} + if err := json.Unmarshal(data, &reviewer); err != nil { + return err + } + r.Type = Ptr("Team") // Change the type to "Team" for compatibility + r.Reviewer = reviewer.Reviewer default: r.Type = nil r.Reviewer = nil - return fmt.Errorf("reviewer.Type is %T, not a string of 'User' or 'Team', unable to unmarshal", reviewer.Type) + return fmt.Errorf("reviewer.Type is %T, not a string of 'User', 'Team' or 'BusinessTeam', unable to unmarshal", reviewer.Type) } return nil diff --git a/github/repos_environments_test.go b/github/repos_environments_test.go index 2dddb226bad..ecd2481c5b1 100644 --- a/github/repos_environments_test.go +++ b/github/repos_environments_test.go @@ -31,6 +31,11 @@ func TestRequiredReviewer_UnmarshalJSON(t *testing.T) { wantRule: []*RequiredReviewer{{Type: Ptr("Team"), Reviewer: &Team{ID: Ptr(int64(1)), Name: Ptr("Justice League")}}}, wantError: false, }, + "Enterprise Team Reviewer": { + data: []byte(`[{"type": "BusinessTeam", "reviewer": {"id": 1, "name": "Justice League"}}]`), + wantRule: []*RequiredReviewer{{Type: Ptr("Team"), Reviewer: &Team{ID: Ptr(int64(1)), Name: Ptr("Justice League")}}}, + wantError: false, + }, "Both Types Reviewer": { data: []byte(`[{"type": "User", "reviewer": {"id": 1,"login": "octocat"}},{"type": "Team", "reviewer": {"id": 1, "name": "Justice League"}}]`), wantRule: []*RequiredReviewer{{Type: Ptr("User"), Reviewer: &User{ID: Ptr(int64(1)), Login: Ptr("octocat")}}, {Type: Ptr("Team"), Reviewer: &Team{ID: Ptr(int64(1)), Name: Ptr("Justice League")}}},