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 }