github.com/google/go-github/v33@v33.0.0/github/actions_secrets_test.go (about)

     1  // Copyright 2020 The go-github AUTHORS. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package github
     7  
     8  import (
     9  	"context"
    10  	"fmt"
    11  	"net/http"
    12  	"reflect"
    13  	"testing"
    14  	"time"
    15  )
    16  
    17  func TestActionsService_GetRepoPublicKey(t *testing.T) {
    18  	client, mux, _, teardown := setup()
    19  	defer teardown()
    20  
    21  	mux.HandleFunc("/repos/o/r/actions/secrets/public-key", func(w http.ResponseWriter, r *http.Request) {
    22  		testMethod(t, r, "GET")
    23  		fmt.Fprint(w, `{"key_id":"1234","key":"2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvv1234"}`)
    24  	})
    25  
    26  	key, _, err := client.Actions.GetRepoPublicKey(context.Background(), "o", "r")
    27  	if err != nil {
    28  		t.Errorf("Actions.GetRepoPublicKey returned error: %v", err)
    29  	}
    30  
    31  	want := &PublicKey{KeyID: String("1234"), Key: String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvv1234")}
    32  	if !reflect.DeepEqual(key, want) {
    33  		t.Errorf("Actions.GetRepoPublicKey returned %+v, want %+v", key, want)
    34  	}
    35  }
    36  
    37  func TestActionsService_ListRepoSecrets(t *testing.T) {
    38  	client, mux, _, teardown := setup()
    39  	defer teardown()
    40  
    41  	mux.HandleFunc("/repos/o/r/actions/secrets", func(w http.ResponseWriter, r *http.Request) {
    42  		testMethod(t, r, "GET")
    43  		testFormValues(t, r, values{"per_page": "2", "page": "2"})
    44  		fmt.Fprint(w, `{"total_count":4,"secrets":[{"name":"A","created_at":"2019-01-02T15:04:05Z","updated_at":"2020-01-02T15:04:05Z"},{"name":"B","created_at":"2019-01-02T15:04:05Z","updated_at":"2020-01-02T15:04:05Z"}]}`)
    45  	})
    46  
    47  	opts := &ListOptions{Page: 2, PerPage: 2}
    48  	secrets, _, err := client.Actions.ListRepoSecrets(context.Background(), "o", "r", opts)
    49  	if err != nil {
    50  		t.Errorf("Actions.ListRepoSecrets returned error: %v", err)
    51  	}
    52  
    53  	want := &Secrets{
    54  		TotalCount: 4,
    55  		Secrets: []*Secret{
    56  			{Name: "A", CreatedAt: Timestamp{time.Date(2019, time.January, 02, 15, 04, 05, 0, time.UTC)}, UpdatedAt: Timestamp{time.Date(2020, time.January, 02, 15, 04, 05, 0, time.UTC)}},
    57  			{Name: "B", CreatedAt: Timestamp{time.Date(2019, time.January, 02, 15, 04, 05, 0, time.UTC)}, UpdatedAt: Timestamp{time.Date(2020, time.January, 02, 15, 04, 05, 0, time.UTC)}},
    58  		},
    59  	}
    60  	if !reflect.DeepEqual(secrets, want) {
    61  		t.Errorf("Actions.ListRepoSecrets returned %+v, want %+v", secrets, want)
    62  	}
    63  }
    64  
    65  func TestActionsService_GetRepoSecret(t *testing.T) {
    66  	client, mux, _, teardown := setup()
    67  	defer teardown()
    68  
    69  	mux.HandleFunc("/repos/o/r/actions/secrets/NAME", func(w http.ResponseWriter, r *http.Request) {
    70  		testMethod(t, r, "GET")
    71  		fmt.Fprint(w, `{"name":"NAME","created_at":"2019-01-02T15:04:05Z","updated_at":"2020-01-02T15:04:05Z"}`)
    72  	})
    73  
    74  	secret, _, err := client.Actions.GetRepoSecret(context.Background(), "o", "r", "NAME")
    75  	if err != nil {
    76  		t.Errorf("Actions.GetRepoSecret returned error: %v", err)
    77  	}
    78  
    79  	want := &Secret{
    80  		Name:      "NAME",
    81  		CreatedAt: Timestamp{time.Date(2019, time.January, 02, 15, 04, 05, 0, time.UTC)},
    82  		UpdatedAt: Timestamp{time.Date(2020, time.January, 02, 15, 04, 05, 0, time.UTC)},
    83  	}
    84  	if !reflect.DeepEqual(secret, want) {
    85  		t.Errorf("Actions.GetRepoSecret returned %+v, want %+v", secret, want)
    86  	}
    87  }
    88  
    89  func TestActionsService_CreateOrUpdateRepoSecret(t *testing.T) {
    90  	client, mux, _, teardown := setup()
    91  	defer teardown()
    92  
    93  	mux.HandleFunc("/repos/o/r/actions/secrets/NAME", func(w http.ResponseWriter, r *http.Request) {
    94  		testMethod(t, r, "PUT")
    95  		testHeader(t, r, "Content-Type", "application/json")
    96  		testBody(t, r, `{"key_id":"1234","encrypted_value":"QIv="}`+"\n")
    97  		w.WriteHeader(http.StatusCreated)
    98  	})
    99  
   100  	input := &EncryptedSecret{
   101  		Name:           "NAME",
   102  		EncryptedValue: "QIv=",
   103  		KeyID:          "1234",
   104  	}
   105  	_, err := client.Actions.CreateOrUpdateRepoSecret(context.Background(), "o", "r", input)
   106  	if err != nil {
   107  		t.Errorf("Actions.CreateOrUpdateRepoSecret returned error: %v", err)
   108  	}
   109  }
   110  
   111  func TestActionsService_DeleteRepoSecret(t *testing.T) {
   112  	client, mux, _, teardown := setup()
   113  	defer teardown()
   114  
   115  	mux.HandleFunc("/repos/o/r/actions/secrets/NAME", func(w http.ResponseWriter, r *http.Request) {
   116  		testMethod(t, r, "DELETE")
   117  	})
   118  
   119  	_, err := client.Actions.DeleteRepoSecret(context.Background(), "o", "r", "NAME")
   120  	if err != nil {
   121  		t.Errorf("Actions.DeleteRepoSecret returned error: %v", err)
   122  	}
   123  }
   124  
   125  func TestActionsService_GetOrgPublicKey(t *testing.T) {
   126  	client, mux, _, teardown := setup()
   127  	defer teardown()
   128  
   129  	mux.HandleFunc("/orgs/o/actions/secrets/public-key", func(w http.ResponseWriter, r *http.Request) {
   130  		testMethod(t, r, "GET")
   131  		fmt.Fprint(w, `{"key_id":"012345678","key":"2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvv1234"}`)
   132  	})
   133  
   134  	key, _, err := client.Actions.GetOrgPublicKey(context.Background(), "o")
   135  	if err != nil {
   136  		t.Errorf("Actions.GetOrgPublicKey returned error: %v", err)
   137  	}
   138  
   139  	want := &PublicKey{KeyID: String("012345678"), Key: String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvv1234")}
   140  	if !reflect.DeepEqual(key, want) {
   141  		t.Errorf("Actions.GetOrgPublicKey returned %+v, want %+v", key, want)
   142  	}
   143  }
   144  
   145  func TestActionsService_ListOrgSecrets(t *testing.T) {
   146  	client, mux, _, teardown := setup()
   147  	defer teardown()
   148  
   149  	mux.HandleFunc("/orgs/o/actions/secrets", func(w http.ResponseWriter, r *http.Request) {
   150  		testMethod(t, r, "GET")
   151  		testFormValues(t, r, values{"per_page": "2", "page": "2"})
   152  		fmt.Fprint(w, `{"total_count":3,"secrets":[{"name":"GIST_ID","created_at":"2019-08-10T14:59:22Z","updated_at":"2020-01-10T14:59:22Z","visibility":"private"},{"name":"DEPLOY_TOKEN","created_at":"2019-08-10T14:59:22Z","updated_at":"2020-01-10T14:59:22Z","visibility":"all"},{"name":"GH_TOKEN","created_at":"2019-08-10T14:59:22Z","updated_at":"2020-01-10T14:59:22Z","visibility":"selected","selected_repositories_url":"https://api.github.com/orgs/octo-org/actions/secrets/SUPER_SECRET/repositories"}]}`)
   153  	})
   154  
   155  	opts := &ListOptions{Page: 2, PerPage: 2}
   156  	secrets, _, err := client.Actions.ListOrgSecrets(context.Background(), "o", opts)
   157  	if err != nil {
   158  		t.Errorf("Actions.ListOrgSecrets returned error: %v", err)
   159  	}
   160  
   161  	want := &Secrets{
   162  		TotalCount: 3,
   163  		Secrets: []*Secret{
   164  			{Name: "GIST_ID", CreatedAt: Timestamp{time.Date(2019, time.August, 10, 14, 59, 22, 0, time.UTC)}, UpdatedAt: Timestamp{time.Date(2020, time.January, 10, 14, 59, 22, 0, time.UTC)}, Visibility: "private"},
   165  			{Name: "DEPLOY_TOKEN", CreatedAt: Timestamp{time.Date(2019, time.August, 10, 14, 59, 22, 0, time.UTC)}, UpdatedAt: Timestamp{time.Date(2020, time.January, 10, 14, 59, 22, 0, time.UTC)}, Visibility: "all"},
   166  			{Name: "GH_TOKEN", CreatedAt: Timestamp{time.Date(2019, time.August, 10, 14, 59, 22, 0, time.UTC)}, UpdatedAt: Timestamp{time.Date(2020, time.January, 10, 14, 59, 22, 0, time.UTC)}, Visibility: "selected", SelectedRepositoriesURL: "https://api.github.com/orgs/octo-org/actions/secrets/SUPER_SECRET/repositories"},
   167  		},
   168  	}
   169  	if !reflect.DeepEqual(secrets, want) {
   170  		t.Errorf("Actions.ListOrgSecrets returned %+v, want %+v", secrets, want)
   171  	}
   172  }
   173  
   174  func TestActionsService_GetOrgSecret(t *testing.T) {
   175  	client, mux, _, teardown := setup()
   176  	defer teardown()
   177  
   178  	mux.HandleFunc("/orgs/o/actions/secrets/NAME", func(w http.ResponseWriter, r *http.Request) {
   179  		testMethod(t, r, "GET")
   180  		fmt.Fprint(w, `{"name":"NAME","created_at":"2019-01-02T15:04:05Z","updated_at":"2020-01-02T15:04:05Z","visibility":"selected","selected_repositories_url":"https://api.github.com/orgs/octo-org/actions/secrets/SUPER_SECRET/repositories"}`)
   181  	})
   182  
   183  	secret, _, err := client.Actions.GetOrgSecret(context.Background(), "o", "NAME")
   184  	if err != nil {
   185  		t.Errorf("Actions.GetOrgSecret returned error: %v", err)
   186  	}
   187  
   188  	want := &Secret{
   189  		Name:                    "NAME",
   190  		CreatedAt:               Timestamp{time.Date(2019, time.January, 02, 15, 04, 05, 0, time.UTC)},
   191  		UpdatedAt:               Timestamp{time.Date(2020, time.January, 02, 15, 04, 05, 0, time.UTC)},
   192  		Visibility:              "selected",
   193  		SelectedRepositoriesURL: "https://api.github.com/orgs/octo-org/actions/secrets/SUPER_SECRET/repositories",
   194  	}
   195  	if !reflect.DeepEqual(secret, want) {
   196  		t.Errorf("Actions.GetOrgSecret returned %+v, want %+v", secret, want)
   197  	}
   198  }
   199  
   200  func TestActionsService_CreateOrUpdateOrgSecret(t *testing.T) {
   201  	client, mux, _, teardown := setup()
   202  	defer teardown()
   203  
   204  	mux.HandleFunc("/orgs/o/actions/secrets/NAME", func(w http.ResponseWriter, r *http.Request) {
   205  		testMethod(t, r, "PUT")
   206  		testHeader(t, r, "Content-Type", "application/json")
   207  		testBody(t, r, `{"key_id":"1234","encrypted_value":"QIv=","visibility":"selected","selected_repository_ids":[1296269,1269280]}`+"\n")
   208  		w.WriteHeader(http.StatusCreated)
   209  	})
   210  
   211  	input := &EncryptedSecret{
   212  		Name:                  "NAME",
   213  		EncryptedValue:        "QIv=",
   214  		KeyID:                 "1234",
   215  		Visibility:            "selected",
   216  		SelectedRepositoryIDs: SelectedRepoIDs{1296269, 1269280},
   217  	}
   218  	_, err := client.Actions.CreateOrUpdateOrgSecret(context.Background(), "o", input)
   219  	if err != nil {
   220  		t.Errorf("Actions.CreateOrUpdateOrgSecret returned error: %v", err)
   221  	}
   222  }
   223  
   224  func TestActionsService_ListSelectedReposForOrgSecret(t *testing.T) {
   225  	client, mux, _, teardown := setup()
   226  	defer teardown()
   227  
   228  	mux.HandleFunc("/orgs/o/actions/secrets/NAME/repositories", func(w http.ResponseWriter, r *http.Request) {
   229  		testMethod(t, r, "GET")
   230  		fmt.Fprintf(w, `{"total_count":1,"repositories":[{"id":1}]}`)
   231  	})
   232  
   233  	repos, _, err := client.Actions.ListSelectedReposForOrgSecret(context.Background(), "o", "NAME")
   234  	if err != nil {
   235  		t.Errorf("Actions.ListSelectedReposForOrgSecret returned error: %v", err)
   236  	}
   237  
   238  	want := &SelectedReposList{
   239  		TotalCount: Int(1),
   240  		Repositories: []*Repository{
   241  			{ID: Int64(1)},
   242  		},
   243  	}
   244  	if !reflect.DeepEqual(repos, want) {
   245  		t.Errorf("Actions.ListSelectedReposForOrgSecret returned %+v, want %+v", repos, want)
   246  	}
   247  }
   248  
   249  func TestActionsService_SetSelectedReposForOrgSecret(t *testing.T) {
   250  	client, mux, _, teardown := setup()
   251  	defer teardown()
   252  
   253  	mux.HandleFunc("/orgs/o/actions/secrets/NAME/repositories", func(w http.ResponseWriter, r *http.Request) {
   254  		testMethod(t, r, "PUT")
   255  		testHeader(t, r, "Content-Type", "application/json")
   256  		testBody(t, r, `{"selected_repository_ids":[64780797]}`+"\n")
   257  	})
   258  
   259  	_, err := client.Actions.SetSelectedReposForOrgSecret(context.Background(), "o", "NAME", SelectedRepoIDs{64780797})
   260  	if err != nil {
   261  		t.Errorf("Actions.SetSelectedReposForOrgSecret returned error: %v", err)
   262  	}
   263  }
   264  
   265  func TestActionsService_AddSelectedRepoToOrgSecret(t *testing.T) {
   266  	client, mux, _, teardown := setup()
   267  	defer teardown()
   268  
   269  	mux.HandleFunc("/orgs/o/actions/secrets/NAME/repositories/1234", func(w http.ResponseWriter, r *http.Request) {
   270  		testMethod(t, r, "PUT")
   271  	})
   272  
   273  	repo := &Repository{ID: Int64(1234)}
   274  	_, err := client.Actions.AddSelectedRepoToOrgSecret(context.Background(), "o", "NAME", repo)
   275  	if err != nil {
   276  		t.Errorf("Actions.AddSelectedRepoToOrgSecret returned error: %v", err)
   277  	}
   278  }
   279  
   280  func TestActionsService_RemoveSelectedRepoFromOrgSecret(t *testing.T) {
   281  	client, mux, _, teardown := setup()
   282  	defer teardown()
   283  
   284  	mux.HandleFunc("/orgs/o/actions/secrets/NAME/repositories/1234", func(w http.ResponseWriter, r *http.Request) {
   285  		testMethod(t, r, "DELETE")
   286  	})
   287  
   288  	repo := &Repository{ID: Int64(1234)}
   289  	_, err := client.Actions.RemoveSelectedRepoFromOrgSecret(context.Background(), "o", "NAME", repo)
   290  	if err != nil {
   291  		t.Errorf("Actions.RemoveSelectedRepoFromOrgSecret returned error: %v", err)
   292  	}
   293  }
   294  
   295  func TestActionsService_DeleteOrgSecret(t *testing.T) {
   296  	client, mux, _, teardown := setup()
   297  	defer teardown()
   298  
   299  	mux.HandleFunc("/orgs/o/actions/secrets/NAME", func(w http.ResponseWriter, r *http.Request) {
   300  		testMethod(t, r, "DELETE")
   301  	})
   302  
   303  	_, err := client.Actions.DeleteOrgSecret(context.Background(), "o", "NAME")
   304  	if err != nil {
   305  		t.Errorf("Actions.DeleteOrgSecret returned error: %v", err)
   306  	}
   307  }