diff --git a/github/enterprise_budgets.go b/github/enterprise_budgets.go new file mode 100644 index 00000000000..ffd0bb719fa --- /dev/null +++ b/github/enterprise_budgets.go @@ -0,0 +1,156 @@ +// Copyright 2026 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// EnterpriseBudgetAlerting represents alerting settings for a GitHub enterprise budget. +type EnterpriseBudgetAlerting struct { + WillAlert *bool `json:"will_alert,omitempty"` + AlertRecipients []string `json:"alert_recipients,omitempty"` +} + +// EnterpriseBudget represents a GitHub enterprise budget. +type EnterpriseBudget struct { + ID *string `json:"id,omitempty"` + BudgetType *string `json:"budget_type,omitempty"` + BudgetProductSkus []string `json:"budget_product_skus,omitempty"` + BudgetProductSKU *string `json:"budget_product_sku,omitempty"` + BudgetScope *string `json:"budget_scope,omitempty"` + BudgetEntityName *string `json:"budget_entity_name,omitempty"` + BudgetAmount *int `json:"budget_amount,omitempty"` + PreventFurtherUsage *bool `json:"prevent_further_usage,omitempty"` + BudgetAlerting *EnterpriseBudgetAlerting `json:"budget_alerting,omitempty"` +} + +func (b EnterpriseBudget) String() string { + return Stringify(b) +} + +// EnterpriseBudgets represents a collection of GitHub enterprise budgets. +type EnterpriseBudgets struct { + Budgets []*EnterpriseBudget `json:"budgets,omitempty"` +} + +// EnterpriseBudgetActionResponse represents the response when creating, updating, or deleting a budget. +type EnterpriseBudgetActionResponse struct { + Message *string `json:"message,omitempty"` + BudgetID *string `json:"budget_id,omitempty"` + Budget *EnterpriseBudget `json:"budget,omitempty"` +} + +// ListBudgets gets all budgets for an enterprise. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/billing/budgets#get-all-budgets +// +//meta:operation GET /enterprises/{enterprise}/settings/billing/budgets +func (s *EnterpriseService) ListBudgets(ctx context.Context, enterprise string) (*EnterpriseBudgets, *Response, error) { + u := fmt.Sprintf("enterprises/%v/settings/billing/budgets", enterprise) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var budgets *EnterpriseBudgets + resp, err := s.client.Do(ctx, req, &budgets) + if err != nil { + return nil, resp, err + } + + return budgets, resp, nil +} + +// CreateBudget creates a new budget for an enterprise. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/billing/budgets#create-a-budget +// +//meta:operation POST /enterprises/{enterprise}/settings/billing/budgets +func (s *EnterpriseService) CreateBudget(ctx context.Context, enterprise string, budget EnterpriseBudget) (*EnterpriseBudgetActionResponse, *Response, error) { + u := fmt.Sprintf("enterprises/%v/settings/billing/budgets", enterprise) + + req, err := s.client.NewRequest("POST", u, budget) + if err != nil { + return nil, nil, err + } + + var actionResponse *EnterpriseBudgetActionResponse + resp, err := s.client.Do(ctx, req, &actionResponse) + if err != nil { + return nil, resp, err + } + + return actionResponse, resp, nil +} + +// GetBudget gets a budget by ID for an enterprise. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/billing/budgets#get-a-budget-by-id +// +//meta:operation GET /enterprises/{enterprise}/settings/billing/budgets/{budget_id} +func (s *EnterpriseService) GetBudget(ctx context.Context, enterprise, budgetID string) (*EnterpriseBudget, *Response, error) { + u := fmt.Sprintf("enterprises/%v/settings/billing/budgets/%v", enterprise, budgetID) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var budget *EnterpriseBudget + resp, err := s.client.Do(ctx, req, &budget) + if err != nil { + return nil, resp, err + } + + return budget, resp, nil +} + +// UpdateBudget updates an existing budget for an enterprise. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/billing/budgets#update-a-budget +// +//meta:operation PATCH /enterprises/{enterprise}/settings/billing/budgets/{budget_id} +func (s *EnterpriseService) UpdateBudget(ctx context.Context, enterprise, budgetID string, budget EnterpriseBudget) (*EnterpriseBudgetActionResponse, *Response, error) { + u := fmt.Sprintf("enterprises/%v/settings/billing/budgets/%v", enterprise, budgetID) + + req, err := s.client.NewRequest("PATCH", u, budget) + if err != nil { + return nil, nil, err + } + + var actionResponse *EnterpriseBudgetActionResponse + resp, err := s.client.Do(ctx, req, &actionResponse) + if err != nil { + return nil, resp, err + } + + return actionResponse, resp, nil +} + +// DeleteBudget deletes a budget by ID for an enterprise. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/billing/budgets#delete-a-budget +// +//meta:operation DELETE /enterprises/{enterprise}/settings/billing/budgets/{budget_id} +func (s *EnterpriseService) DeleteBudget(ctx context.Context, enterprise, budgetID string) (*EnterpriseBudgetActionResponse, *Response, error) { + u := fmt.Sprintf("enterprises/%v/settings/billing/budgets/%v", enterprise, budgetID) + + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, nil, err + } + + var actionResponse *EnterpriseBudgetActionResponse + resp, err := s.client.Do(ctx, req, &actionResponse) + if err != nil { + return nil, resp, err + } + + return actionResponse, resp, nil +} diff --git a/github/enterprise_budgets_test.go b/github/enterprise_budgets_test.go new file mode 100644 index 00000000000..66263ba5806 --- /dev/null +++ b/github/enterprise_budgets_test.go @@ -0,0 +1,417 @@ +// Copyright 2026 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "fmt" + "net/http" + "testing" + + "github.com/google/go-cmp/cmp" +) + +func TestEnterpriseService_ListBudgets(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/settings/billing/budgets", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{ + "budgets": [ + { + "id": "2066deda-923f-43f9-88d2-62395a28c0cdd", + "budget_type": "ProductPricing", + "budget_product_skus": ["actions"], + "budget_scope": "enterprise", + "budget_amount": 1000, + "prevent_further_usage": true, + "budget_alerting": { + "will_alert": true, + "alert_recipients": ["enterprise-admin"] + } + } + ] + }`) + }) + + ctx := t.Context() + budgets, _, err := client.Enterprise.ListBudgets(ctx, "e") + if err != nil { + t.Errorf("Enterprise.ListBudgets returned error: %v", err) + } + + want := &EnterpriseBudgets{ + Budgets: []*EnterpriseBudget{ + { + ID: Ptr("2066deda-923f-43f9-88d2-62395a28c0cdd"), + BudgetType: Ptr("ProductPricing"), + BudgetProductSkus: []string{"actions"}, + BudgetScope: Ptr("enterprise"), + BudgetAmount: Ptr(1000), + PreventFurtherUsage: Ptr(true), + BudgetAlerting: &EnterpriseBudgetAlerting{ + WillAlert: Ptr(true), + AlertRecipients: []string{"enterprise-admin"}, + }, + }, + }, + } + if !cmp.Equal(budgets, want) { + t.Errorf("Enterprise.ListBudgets returned %+v, want %+v", budgets, want) + } + + const methodName = "ListBudgets" + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Enterprise.ListBudgets(ctx, "e") + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Enterprise.ListBudgets(ctx, "\n") + return err + }) +} + +func TestEnterpriseService_ListBudgets_invalidEnterprise(t *testing.T) { + t.Parallel() + client, _, _ := setup(t) + + ctx := t.Context() + _, _, err := client.Enterprise.ListBudgets(ctx, "%") + testURLParseError(t, err) +} + +func TestEnterpriseService_CreateBudget(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/settings/billing/budgets", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "POST") + testBody(t, r, `{"budget_type":"ProductPricing","budget_product_sku":"actions","budget_scope":"enterprise","budget_amount":200,"prevent_further_usage":true}`+"\n") + fmt.Fprint(w, `{ + "message": "Budget successfully created." + }`) + }) + + ctx := t.Context() + req := EnterpriseBudget{ + BudgetAmount: Ptr(200), + PreventFurtherUsage: Ptr(true), + BudgetScope: Ptr("enterprise"), + BudgetType: Ptr("ProductPricing"), + BudgetProductSKU: Ptr("actions"), + } + + resp, _, err := client.Enterprise.CreateBudget(ctx, "e", req) + if err != nil { + t.Errorf("Enterprise.CreateBudget returned error: %v", err) + } + + want := &EnterpriseBudgetActionResponse{ + Message: Ptr("Budget successfully created."), + } + if !cmp.Equal(resp, want) { + t.Errorf("Enterprise.CreateBudget returned %+v, want %+v", resp, want) + } + + const methodName = "CreateBudget" + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Enterprise.CreateBudget(ctx, "e", req) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Enterprise.CreateBudget(ctx, "\n", req) + return err + }) +} + +func TestEnterpriseService_CreateBudget_invalidEnterprise(t *testing.T) { + t.Parallel() + client, _, _ := setup(t) + + ctx := t.Context() + _, _, err := client.Enterprise.CreateBudget(ctx, "%", EnterpriseBudget{}) + testURLParseError(t, err) +} + +func TestEnterpriseService_GetBudget(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/settings/billing/budgets/2066deda-923f-43f9-88d2-62395a28c0cdd", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{ + "id": "2066deda-923f-43f9-88d2-62395a28c0cdd", + "budget_type": "ProductPricing", + "budget_product_sku": "actions_linux", + "budget_scope": "repository", + "budget_amount": 0, + "prevent_further_usage": true + }`) + }) + + ctx := t.Context() + budget, _, err := client.Enterprise.GetBudget(ctx, "e", "2066deda-923f-43f9-88d2-62395a28c0cdd") + if err != nil { + t.Errorf("Enterprise.GetBudget returned error: %v", err) + } + + want := &EnterpriseBudget{ + ID: Ptr("2066deda-923f-43f9-88d2-62395a28c0cdd"), + BudgetType: Ptr("ProductPricing"), + BudgetProductSKU: Ptr("actions_linux"), + BudgetScope: Ptr("repository"), + BudgetAmount: Ptr(0), + PreventFurtherUsage: Ptr(true), + } + if !cmp.Equal(budget, want) { + t.Errorf("Enterprise.GetBudget returned %+v, want %+v", budget, want) + } + + const methodName = "GetBudget" + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Enterprise.GetBudget(ctx, "e", "2066deda-923f-43f9-88d2-62395a28c0cdd") + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Enterprise.GetBudget(ctx, "\n", "\n") + return err + }) +} + +func TestEnterpriseService_GetBudget_invalidEnterprise(t *testing.T) { + t.Parallel() + client, _, _ := setup(t) + + ctx := t.Context() + _, _, err := client.Enterprise.GetBudget(ctx, "%", "b-123") + testURLParseError(t, err) +} + +func TestEnterpriseService_UpdateBudget(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/settings/billing/budgets/b-123", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "PATCH") + testBody(t, r, `{"budget_amount":10,"prevent_further_usage":false}`+"\n") + fmt.Fprint(w, `{ + "message": "Budget successfully updated.", + "budget": { + "id": "b-123", + "budget_amount": 10, + "prevent_further_usage": false + } + }`) + }) + + ctx := t.Context() + req := EnterpriseBudget{ + BudgetAmount: Ptr(10), + PreventFurtherUsage: Ptr(false), + } + + resp, _, err := client.Enterprise.UpdateBudget(ctx, "e", "b-123", req) + if err != nil { + t.Errorf("Enterprise.UpdateBudget returned error: %v", err) + } + + want := &EnterpriseBudgetActionResponse{ + Message: Ptr("Budget successfully updated."), + Budget: &EnterpriseBudget{ + ID: Ptr("b-123"), + BudgetAmount: Ptr(10), + PreventFurtherUsage: Ptr(false), + }, + } + if !cmp.Equal(resp, want) { + t.Errorf("Enterprise.UpdateBudget returned %+v, want %+v", resp, want) + } + + const methodName = "UpdateBudget" + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Enterprise.UpdateBudget(ctx, "e", "b-123", req) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Enterprise.UpdateBudget(ctx, "\n", "\n", req) + return err + }) +} + +func TestEnterpriseService_UpdateBudget_invalidEnterprise(t *testing.T) { + t.Parallel() + client, _, _ := setup(t) + + ctx := t.Context() + _, _, err := client.Enterprise.UpdateBudget(ctx, "%", "b-123", EnterpriseBudget{}) + testURLParseError(t, err) +} + +func TestEnterpriseService_DeleteBudget(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/settings/billing/budgets/b-123", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "DELETE") + fmt.Fprint(w, `{ + "message": "Budget successfully deleted.", + "budget_id": "b-123" + }`) + }) + + ctx := t.Context() + resp, _, err := client.Enterprise.DeleteBudget(ctx, "e", "b-123") + if err != nil { + t.Errorf("Enterprise.DeleteBudget returned error: %v", err) + } + + want := &EnterpriseBudgetActionResponse{ + Message: Ptr("Budget successfully deleted."), + BudgetID: Ptr("b-123"), + } + if !cmp.Equal(resp, want) { + t.Errorf("Enterprise.DeleteBudget returned %+v, want %+v", resp, want) + } + + const methodName = "DeleteBudget" + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Enterprise.DeleteBudget(ctx, "e", "b-123") + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Enterprise.DeleteBudget(ctx, "\n", "\n") + return err + }) +} + +func TestEnterpriseService_DeleteBudget_invalidEnterprise(t *testing.T) { + t.Parallel() + client, _, _ := setup(t) + + ctx := t.Context() + _, _, err := client.Enterprise.DeleteBudget(ctx, "%", "b-123") + testURLParseError(t, err) +} + +func TestEnterpriseBudget_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &EnterpriseBudget{}, "{}") + + u := &EnterpriseBudget{ + ID: Ptr("b-123"), + BudgetType: Ptr("ProductPricing"), + BudgetProductSkus: []string{"actions"}, + BudgetProductSKU: Ptr("actions"), + BudgetScope: Ptr("enterprise"), + BudgetEntityName: Ptr("org-name"), + BudgetAmount: Ptr(100), + PreventFurtherUsage: Ptr(true), + BudgetAlerting: &EnterpriseBudgetAlerting{ + WillAlert: Ptr(true), + AlertRecipients: []string{"mona"}, + }, + } + + want := `{ + "id": "b-123", + "budget_type": "ProductPricing", + "budget_product_skus": ["actions"], + "budget_product_sku": "actions", + "budget_scope": "enterprise", + "budget_entity_name": "org-name", + "budget_amount": 100, + "prevent_further_usage": true, + "budget_alerting": { + "will_alert": true, + "alert_recipients": ["mona"] + } + }` + + testJSONMarshal(t, u, want) +} + +func TestEnterpriseBudgetAlerting_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &EnterpriseBudgetAlerting{}, "{}") + + u := &EnterpriseBudgetAlerting{ + WillAlert: Ptr(true), + AlertRecipients: []string{"admin1", "admin2"}, + } + + want := `{ + "will_alert": true, + "alert_recipients": ["admin1", "admin2"] + }` + + testJSONMarshal(t, u, want) +} + +func TestEnterpriseBudgets_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &EnterpriseBudgets{}, "{}") + + u := &EnterpriseBudgets{ + Budgets: []*EnterpriseBudget{ + { + ID: Ptr("1"), + }, + }, + } + + want := `{ + "budgets": [ + { + "id": "1" + } + ] + }` + + testJSONMarshal(t, u, want) +} + +func TestEnterpriseBudgetActionResponse_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &EnterpriseBudgetActionResponse{}, "{}") + + u := &EnterpriseBudgetActionResponse{ + Message: Ptr("Success"), + BudgetID: Ptr("123"), + Budget: &EnterpriseBudget{ + ID: Ptr("123"), + }, + } + + want := `{ + "message": "Success", + "budget_id": "123", + "budget": { + "id": "123" + } + }` + + testJSONMarshal(t, u, want) +} diff --git a/github/github-accessors.go b/github/github-accessors.go index aa52b9ae260..0af5c4077bb 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -9830,6 +9830,102 @@ func (e *Enterprise) GetWebsiteURL() string { return *e.WebsiteURL } +// GetBudgetAlerting returns the BudgetAlerting field. +func (e *EnterpriseBudget) GetBudgetAlerting() *EnterpriseBudgetAlerting { + if e == nil { + return nil + } + return e.BudgetAlerting +} + +// GetBudgetAmount returns the BudgetAmount field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudget) GetBudgetAmount() int { + if e == nil || e.BudgetAmount == nil { + return 0 + } + return *e.BudgetAmount +} + +// GetBudgetEntityName returns the BudgetEntityName field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudget) GetBudgetEntityName() string { + if e == nil || e.BudgetEntityName == nil { + return "" + } + return *e.BudgetEntityName +} + +// GetBudgetProductSKU returns the BudgetProductSKU field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudget) GetBudgetProductSKU() string { + if e == nil || e.BudgetProductSKU == nil { + return "" + } + return *e.BudgetProductSKU +} + +// GetBudgetScope returns the BudgetScope field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudget) GetBudgetScope() string { + if e == nil || e.BudgetScope == nil { + return "" + } + return *e.BudgetScope +} + +// GetBudgetType returns the BudgetType field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudget) GetBudgetType() string { + if e == nil || e.BudgetType == nil { + return "" + } + return *e.BudgetType +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudget) GetID() string { + if e == nil || e.ID == nil { + return "" + } + return *e.ID +} + +// GetPreventFurtherUsage returns the PreventFurtherUsage field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudget) GetPreventFurtherUsage() bool { + if e == nil || e.PreventFurtherUsage == nil { + return false + } + return *e.PreventFurtherUsage +} + +// GetBudget returns the Budget field. +func (e *EnterpriseBudgetActionResponse) GetBudget() *EnterpriseBudget { + if e == nil { + return nil + } + return e.Budget +} + +// GetBudgetID returns the BudgetID field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudgetActionResponse) GetBudgetID() string { + if e == nil || e.BudgetID == nil { + return "" + } + return *e.BudgetID +} + +// GetMessage returns the Message field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudgetActionResponse) GetMessage() string { + if e == nil || e.Message == nil { + return "" + } + return *e.Message +} + +// GetWillAlert returns the WillAlert field if it's non-nil, zero value otherwise. +func (e *EnterpriseBudgetAlerting) GetWillAlert() bool { + if e == nil || e.WillAlert == nil { + return false + } + return *e.WillAlert +} + // GetOrganizationID returns the OrganizationID field if it's non-nil, zero value otherwise. func (e *EnterpriseCustomPropertiesValues) GetOrganizationID() int64 { if e == nil || e.OrganizationID == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index 037406b83d6..dcc3320f4ac 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -12759,6 +12759,132 @@ func TestEnterprise_GetWebsiteURL(tt *testing.T) { e.GetWebsiteURL() } +func TestEnterpriseBudget_GetBudgetAlerting(tt *testing.T) { + tt.Parallel() + e := &EnterpriseBudget{} + e.GetBudgetAlerting() + e = nil + e.GetBudgetAlerting() +} + +func TestEnterpriseBudget_GetBudgetAmount(tt *testing.T) { + tt.Parallel() + var zeroValue int + e := &EnterpriseBudget{BudgetAmount: &zeroValue} + e.GetBudgetAmount() + e = &EnterpriseBudget{} + e.GetBudgetAmount() + e = nil + e.GetBudgetAmount() +} + +func TestEnterpriseBudget_GetBudgetEntityName(tt *testing.T) { + tt.Parallel() + var zeroValue string + e := &EnterpriseBudget{BudgetEntityName: &zeroValue} + e.GetBudgetEntityName() + e = &EnterpriseBudget{} + e.GetBudgetEntityName() + e = nil + e.GetBudgetEntityName() +} + +func TestEnterpriseBudget_GetBudgetProductSKU(tt *testing.T) { + tt.Parallel() + var zeroValue string + e := &EnterpriseBudget{BudgetProductSKU: &zeroValue} + e.GetBudgetProductSKU() + e = &EnterpriseBudget{} + e.GetBudgetProductSKU() + e = nil + e.GetBudgetProductSKU() +} + +func TestEnterpriseBudget_GetBudgetScope(tt *testing.T) { + tt.Parallel() + var zeroValue string + e := &EnterpriseBudget{BudgetScope: &zeroValue} + e.GetBudgetScope() + e = &EnterpriseBudget{} + e.GetBudgetScope() + e = nil + e.GetBudgetScope() +} + +func TestEnterpriseBudget_GetBudgetType(tt *testing.T) { + tt.Parallel() + var zeroValue string + e := &EnterpriseBudget{BudgetType: &zeroValue} + e.GetBudgetType() + e = &EnterpriseBudget{} + e.GetBudgetType() + e = nil + e.GetBudgetType() +} + +func TestEnterpriseBudget_GetID(tt *testing.T) { + tt.Parallel() + var zeroValue string + e := &EnterpriseBudget{ID: &zeroValue} + e.GetID() + e = &EnterpriseBudget{} + e.GetID() + e = nil + e.GetID() +} + +func TestEnterpriseBudget_GetPreventFurtherUsage(tt *testing.T) { + tt.Parallel() + var zeroValue bool + e := &EnterpriseBudget{PreventFurtherUsage: &zeroValue} + e.GetPreventFurtherUsage() + e = &EnterpriseBudget{} + e.GetPreventFurtherUsage() + e = nil + e.GetPreventFurtherUsage() +} + +func TestEnterpriseBudgetActionResponse_GetBudget(tt *testing.T) { + tt.Parallel() + e := &EnterpriseBudgetActionResponse{} + e.GetBudget() + e = nil + e.GetBudget() +} + +func TestEnterpriseBudgetActionResponse_GetBudgetID(tt *testing.T) { + tt.Parallel() + var zeroValue string + e := &EnterpriseBudgetActionResponse{BudgetID: &zeroValue} + e.GetBudgetID() + e = &EnterpriseBudgetActionResponse{} + e.GetBudgetID() + e = nil + e.GetBudgetID() +} + +func TestEnterpriseBudgetActionResponse_GetMessage(tt *testing.T) { + tt.Parallel() + var zeroValue string + e := &EnterpriseBudgetActionResponse{Message: &zeroValue} + e.GetMessage() + e = &EnterpriseBudgetActionResponse{} + e.GetMessage() + e = nil + e.GetMessage() +} + +func TestEnterpriseBudgetAlerting_GetWillAlert(tt *testing.T) { + tt.Parallel() + var zeroValue bool + e := &EnterpriseBudgetAlerting{WillAlert: &zeroValue} + e.GetWillAlert() + e = &EnterpriseBudgetAlerting{} + e.GetWillAlert() + e = nil + e.GetWillAlert() +} + func TestEnterpriseCustomPropertiesValues_GetOrganizationID(tt *testing.T) { tt.Parallel() var zeroValue int64 diff --git a/github/github-stringify_test.go b/github/github-stringify_test.go index edd28ddb50a..4a3077f9b7f 100644 --- a/github/github-stringify_test.go +++ b/github/github-stringify_test.go @@ -568,6 +568,25 @@ func TestEnterprise_String(t *testing.T) { } } +func TestEnterpriseBudget_String(t *testing.T) { + t.Parallel() + v := EnterpriseBudget{ + ID: Ptr(""), + BudgetType: Ptr(""), + BudgetProductSkus: []string{""}, + BudgetProductSKU: Ptr(""), + BudgetScope: Ptr(""), + BudgetEntityName: Ptr(""), + BudgetAmount: Ptr(0), + PreventFurtherUsage: Ptr(false), + BudgetAlerting: &EnterpriseBudgetAlerting{}, + } + want := `github.EnterpriseBudget{ID:"", BudgetType:"", BudgetProductSkus:[""], BudgetProductSKU:"", BudgetScope:"", BudgetEntityName:"", BudgetAmount:0, PreventFurtherUsage:false, BudgetAlerting:github.EnterpriseBudgetAlerting{}}` + if got := v.String(); got != want { + t.Errorf("EnterpriseBudget.String = %v, want %v", got, want) + } +} + func TestEvent_String(t *testing.T) { t.Parallel() v := Event{