Files
go-github/github/agents_variables_test.go

569 lines
19 KiB
Go

// 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 TestAgentsService_ListRepoVariables(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/repos/o/r/agents/variables", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testHeader(t, r, "X-Github-Api-Version", api20260310)
testFormValues(t, r, values{"per_page": "2", "page": "2"})
fmt.Fprint(w, `{"total_count":4,"variables":[{"name":"A","value":"AA","created_at":`+referenceTimeStr+`,"updated_at":`+referenceTimeStr+`},{"name":"B","value":"BB","created_at":`+referenceTimeStr+`,"updated_at":`+referenceTimeStr+`}]}`)
})
opts := &ListOptions{Page: 2, PerPage: 2}
ctx := t.Context()
variables, _, err := client.Agents.ListRepoVariables(ctx, "o", "r", opts)
if err != nil {
t.Errorf("Agents.ListRepoVariables returned error: %v", err)
}
want := &ActionsVariables{
TotalCount: 4,
Variables: []*ActionsVariable{
{Name: "A", Value: "AA", CreatedAt: &referenceTimestamp, UpdatedAt: &referenceTimestamp},
{Name: "B", Value: "BB", CreatedAt: &referenceTimestamp, UpdatedAt: &referenceTimestamp},
},
}
if !cmp.Equal(variables, want) {
t.Errorf("Agents.ListRepoVariables returned %+v, want %+v", variables, want)
}
const methodName = "ListRepoVariables"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Agents.ListRepoVariables(ctx, "\n", "\n", opts)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Agents.ListRepoVariables(ctx, "o", "r", opts)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestAgentsService_ListRepoOrgVariables(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/repos/o/r/agents/organization-variables", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testHeader(t, r, "X-Github-Api-Version", api20260310)
testFormValues(t, r, values{"per_page": "2", "page": "2"})
fmt.Fprint(w, `{"total_count":4,"variables":[{"name":"A","value":"AA","created_at":`+referenceTimeStr+`,"updated_at":`+referenceTimeStr+`},{"name":"B","value":"BB","created_at":`+referenceTimeStr+`,"updated_at":`+referenceTimeStr+`}]}`)
})
opts := &ListOptions{Page: 2, PerPage: 2}
ctx := t.Context()
variables, _, err := client.Agents.ListRepoOrgVariables(ctx, "o", "r", opts)
if err != nil {
t.Errorf("Agents.ListRepoOrgVariables returned error: %v", err)
}
want := &ActionsVariables{
TotalCount: 4,
Variables: []*ActionsVariable{
{Name: "A", Value: "AA", CreatedAt: &referenceTimestamp, UpdatedAt: &referenceTimestamp},
{Name: "B", Value: "BB", CreatedAt: &referenceTimestamp, UpdatedAt: &referenceTimestamp},
},
}
if !cmp.Equal(variables, want) {
t.Errorf("Agents.ListRepoOrgVariables returned %+v, want %+v", variables, want)
}
const methodName = "ListRepoOrgVariables"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Agents.ListRepoOrgVariables(ctx, "\n", "\n", opts)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Agents.ListRepoOrgVariables(ctx, "o", "r", opts)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestAgentsService_GetRepoVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/repos/o/r/agents/variables/NAME", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testHeader(t, r, "X-Github-Api-Version", api20260310)
fmt.Fprint(w, `{"name":"NAME","value":"VALUE","created_at":`+referenceTimeStr+`,"updated_at":`+referenceTimeStr+`}`)
})
ctx := t.Context()
variable, _, err := client.Agents.GetRepoVariable(ctx, "o", "r", "NAME")
if err != nil {
t.Errorf("Agents.GetRepoVariable returned error: %v", err)
}
want := &ActionsVariable{
Name: "NAME",
Value: "VALUE",
CreatedAt: &referenceTimestamp,
UpdatedAt: &referenceTimestamp,
}
if !cmp.Equal(variable, want) {
t.Errorf("Agents.GetRepoVariable returned %+v, want %+v", variable, want)
}
const methodName = "GetRepoVariable"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Agents.GetRepoVariable(ctx, "\n", "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Agents.GetRepoVariable(ctx, "o", "r", "NAME")
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestAgentsService_CreateRepoVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
input := ActionsCreateVariableRequest{
Name: "NAME",
Value: "VALUE",
}
mux.HandleFunc("/repos/o/r/agents/variables", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "POST")
testHeader(t, r, "X-Github-Api-Version", api20260310)
testHeader(t, r, "Content-Type", "application/json")
testJSONBody(t, r, input)
w.WriteHeader(http.StatusCreated)
})
ctx := t.Context()
_, err := client.Agents.CreateRepoVariable(ctx, "o", "r", input)
if err != nil {
t.Errorf("Agents.CreateRepoVariable returned error: %v", err)
}
const methodName = "CreateRepoVariable"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.CreateRepoVariable(ctx, "\n", "\n", input)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Agents.CreateRepoVariable(ctx, "o", "r", input)
})
}
func TestAgentsService_UpdateRepoVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
name := "NAME"
input := ActionsUpdateVariableRequest{
Name: &name,
Value: new("VALUE"),
}
mux.HandleFunc("/repos/o/r/agents/variables/NAME", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PATCH")
testHeader(t, r, "X-Github-Api-Version", api20260310)
testHeader(t, r, "Content-Type", "application/json")
testJSONBody(t, r, input)
w.WriteHeader(http.StatusNoContent)
})
ctx := t.Context()
_, err := client.Agents.UpdateRepoVariable(ctx, "o", "r", name, input)
if err != nil {
t.Errorf("Agents.UpdateRepoVariable returned error: %v", err)
}
const methodName = "UpdateRepoVariable"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.UpdateRepoVariable(ctx, "\n", "\n", "\n", input)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Agents.UpdateRepoVariable(ctx, "o", "r", name, input)
})
}
func TestAgentsService_DeleteRepoVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/repos/o/r/agents/variables/NAME", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "DELETE")
testHeader(t, r, "X-Github-Api-Version", api20260310)
w.WriteHeader(http.StatusNoContent)
})
ctx := t.Context()
_, err := client.Agents.DeleteRepoVariable(ctx, "o", "r", "NAME")
if err != nil {
t.Errorf("Agents.DeleteRepoVariable returned error: %v", err)
}
const methodName = "DeleteRepoVariable"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.DeleteRepoVariable(ctx, "\n", "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Agents.DeleteRepoVariable(ctx, "o", "r", "NAME")
})
}
func TestAgentsService_ListOrgVariables(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/agents/variables", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testHeader(t, r, "X-Github-Api-Version", api20260310)
testFormValues(t, r, values{"per_page": "2", "page": "2"})
fmt.Fprint(w, `{"total_count":3,"variables":[{"name":"A","value":"AA","created_at":`+referenceTimeStr+`,"updated_at":`+referenceTimeStr+`,"visibility":"private"},{"name":"B","value":"BB","created_at":`+referenceTimeStr+`,"updated_at":`+referenceTimeStr+`,"visibility":"all"},{"name":"C","value":"CC","created_at":`+referenceTimeStr+`,"updated_at":`+referenceTimeStr+`,"visibility":"selected","selected_repositories_url":"https://api.github.com/orgs/octo-org/agents/variables/VAR/repositories"}]}`)
})
opts := &ListOptions{Page: 2, PerPage: 2}
ctx := t.Context()
variables, _, err := client.Agents.ListOrgVariables(ctx, "o", opts)
if err != nil {
t.Errorf("Agents.ListOrgVariables returned error: %v", err)
}
want := &ActionsVariables{
TotalCount: 3,
Variables: []*ActionsVariable{
{Name: "A", Value: "AA", CreatedAt: &referenceTimestamp, UpdatedAt: &referenceTimestamp, Visibility: new("private")},
{Name: "B", Value: "BB", CreatedAt: &referenceTimestamp, UpdatedAt: &referenceTimestamp, Visibility: new("all")},
{Name: "C", Value: "CC", CreatedAt: &referenceTimestamp, UpdatedAt: &referenceTimestamp, Visibility: new("selected"), SelectedRepositoriesURL: new("https://api.github.com/orgs/octo-org/agents/variables/VAR/repositories")},
},
}
if !cmp.Equal(variables, want) {
t.Errorf("Agents.ListOrgVariables returned %+v, want %+v", variables, want)
}
const methodName = "ListOrgVariables"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Agents.ListOrgVariables(ctx, "\n", opts)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Agents.ListOrgVariables(ctx, "o", opts)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestAgentsService_GetOrgVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/agents/variables/NAME", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testHeader(t, r, "X-Github-Api-Version", api20260310)
fmt.Fprint(w, `{"name":"NAME","value":"VALUE","created_at":`+referenceTimeStr+`,"updated_at":`+referenceTimeStr+`,"visibility":"selected","selected_repositories_url":"https://api.github.com/orgs/octo-org/agents/variables/VAR/repositories"}`)
})
ctx := t.Context()
variable, _, err := client.Agents.GetOrgVariable(ctx, "o", "NAME")
if err != nil {
t.Errorf("Agents.GetOrgVariable returned error: %v", err)
}
want := &ActionsVariable{
Name: "NAME",
Value: "VALUE",
CreatedAt: &referenceTimestamp,
UpdatedAt: &referenceTimestamp,
Visibility: new("selected"),
SelectedRepositoriesURL: new("https://api.github.com/orgs/octo-org/agents/variables/VAR/repositories"),
}
if !cmp.Equal(variable, want) {
t.Errorf("Agents.GetOrgVariable returned %+v, want %+v", variable, want)
}
const methodName = "GetOrgVariable"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Agents.GetOrgVariable(ctx, "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Agents.GetOrgVariable(ctx, "o", "NAME")
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestAgentsService_CreateOrgVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
input := ActionsCreateOrgVariableRequest{
Name: "NAME",
Value: "VALUE",
Visibility: "selected",
SelectedRepositoryIDs: []int64{1296269, 1269280},
}
mux.HandleFunc("/orgs/o/agents/variables", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "POST")
testHeader(t, r, "X-Github-Api-Version", api20260310)
testHeader(t, r, "Content-Type", "application/json")
testJSONBody(t, r, input)
w.WriteHeader(http.StatusCreated)
})
ctx := t.Context()
_, err := client.Agents.CreateOrgVariable(ctx, "o", input)
if err != nil {
t.Errorf("Agents.CreateOrgVariable returned error: %v", err)
}
const methodName = "CreateOrgVariable"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.CreateOrgVariable(ctx, "\n", input)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Agents.CreateOrgVariable(ctx, "o", input)
})
}
func TestAgentsService_UpdateOrgVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
name := "NAME"
input := ActionsUpdateOrgVariableRequest{
Name: &name,
Value: new("VALUE"),
Visibility: new("selected"),
SelectedRepositoryIDs: []int64{1296269, 1269280},
}
mux.HandleFunc("/orgs/o/agents/variables/NAME", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PATCH")
testHeader(t, r, "X-Github-Api-Version", api20260310)
testHeader(t, r, "Content-Type", "application/json")
testJSONBody(t, r, input)
w.WriteHeader(http.StatusNoContent)
})
ctx := t.Context()
_, err := client.Agents.UpdateOrgVariable(ctx, "o", name, input)
if err != nil {
t.Errorf("Agents.UpdateOrgVariable returned error: %v", err)
}
const methodName = "UpdateOrgVariable"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.UpdateOrgVariable(ctx, "\n", "\n", input)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Agents.UpdateOrgVariable(ctx, "o", name, input)
})
}
func TestAgentsService_ListSelectedReposForOrgVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/agents/variables/NAME/repositories", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testHeader(t, r, "X-Github-Api-Version", api20260310)
fmt.Fprint(w, `{"total_count":1,"repositories":[{"id":1}]}`)
})
opts := &ListOptions{Page: 2, PerPage: 2}
ctx := t.Context()
repos, _, err := client.Agents.ListSelectedReposForOrgVariable(ctx, "o", "NAME", opts)
if err != nil {
t.Errorf("Agents.ListSelectedReposForOrgVariable returned error: %v", err)
}
want := &SelectedReposList{
TotalCount: new(1),
Repositories: []*Repository{
{ID: new(int64(1))},
},
}
if !cmp.Equal(repos, want) {
t.Errorf("Agents.ListSelectedReposForOrgVariable returned %+v, want %+v", repos, want)
}
const methodName = "ListSelectedReposForOrgVariable"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Agents.ListSelectedReposForOrgVariable(ctx, "\n", "\n", opts)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Agents.ListSelectedReposForOrgVariable(ctx, "o", "NAME", opts)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}
func TestAgentsService_SetSelectedReposForOrgVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
input := []int64{64780797}
mux.HandleFunc("/orgs/o/agents/variables/NAME/repositories", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PUT")
testHeader(t, r, "X-Github-Api-Version", api20260310)
testHeader(t, r, "Content-Type", "application/json")
testJSONBody(t, r, struct {
SelectedIDs []int64 `json:"selected_repository_ids"`
}{
SelectedIDs: input,
})
w.WriteHeader(http.StatusNoContent)
})
ctx := t.Context()
_, err := client.Agents.SetSelectedReposForOrgVariable(ctx, "o", "NAME", input)
if err != nil {
t.Errorf("Agents.SetSelectedReposForOrgVariable returned error: %v", err)
}
const methodName = "SetSelectedReposForOrgVariable"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.SetSelectedReposForOrgVariable(ctx, "\n", "\n", input)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Agents.SetSelectedReposForOrgVariable(ctx, "o", "NAME", input)
})
}
func TestAgentsService_AddSelectedRepoToOrgVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/agents/variables/NAME/repositories/1234", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PUT")
testHeader(t, r, "X-Github-Api-Version", api20260310)
w.WriteHeader(http.StatusNoContent)
})
repoID := int64(1234)
ctx := t.Context()
_, err := client.Agents.AddSelectedRepoToOrgVariable(ctx, "o", "NAME", repoID)
if err != nil {
t.Errorf("Agents.AddSelectedRepoToOrgVariable returned error: %v", err)
}
const methodName = "AddSelectedRepoToOrgVariable"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.AddSelectedRepoToOrgVariable(ctx, "o", "NAME", 0)
return err
})
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.AddSelectedRepoToOrgVariable(ctx, "\n", "\n", repoID)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Agents.AddSelectedRepoToOrgVariable(ctx, "o", "NAME", repoID)
})
}
func TestAgentsService_RemoveSelectedRepoFromOrgVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/agents/variables/NAME/repositories/1234", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "DELETE")
testHeader(t, r, "X-Github-Api-Version", api20260310)
w.WriteHeader(http.StatusNoContent)
})
repoID := int64(1234)
ctx := t.Context()
_, err := client.Agents.RemoveSelectedRepoFromOrgVariable(ctx, "o", "NAME", repoID)
if err != nil {
t.Errorf("Agents.RemoveSelectedRepoFromOrgVariable returned error: %v", err)
}
const methodName = "RemoveSelectedRepoFromOrgVariable"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.RemoveSelectedRepoFromOrgVariable(ctx, "o", "NAME", 0)
return err
})
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.RemoveSelectedRepoFromOrgVariable(ctx, "\n", "\n", repoID)
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Agents.RemoveSelectedRepoFromOrgVariable(ctx, "o", "NAME", repoID)
})
}
func TestAgentsService_DeleteOrgVariable(t *testing.T) {
t.Parallel()
client, mux, _ := setup(t)
mux.HandleFunc("/orgs/o/agents/variables/NAME", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "DELETE")
testHeader(t, r, "X-Github-Api-Version", api20260310)
w.WriteHeader(http.StatusNoContent)
})
ctx := t.Context()
_, err := client.Agents.DeleteOrgVariable(ctx, "o", "NAME")
if err != nil {
t.Errorf("Agents.DeleteOrgVariable returned error: %v", err)
}
const methodName = "DeleteOrgVariable"
testBadOptions(t, methodName, func() (err error) {
_, err = client.Agents.DeleteOrgVariable(ctx, "\n", "\n")
return err
})
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
return client.Agents.DeleteOrgVariable(ctx, "o", "NAME")
})
}