github.com/google/go-github/v71@v71.0.0/github/orgs_custom_repository_roles_test.go (about) 1 // Copyright 2024 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 "testing" 13 "time" 14 15 "github.com/google/go-cmp/cmp" 16 ) 17 18 func TestOrganizationsService_ListCustomRepoRoles(t *testing.T) { 19 t.Parallel() 20 client, mux, _ := setup(t) 21 22 mux.HandleFunc("/orgs/o/custom-repository-roles", func(w http.ResponseWriter, r *http.Request) { 23 testMethod(t, r, "GET") 24 fmt.Fprint(w, `{"total_count": 1, "custom_roles": [ 25 { 26 "id": 1, 27 "name": "Developer", 28 "base_role": "write", 29 "permissions": ["delete_alerts_code_scanning"], 30 "organization": { 31 "login": "l", 32 "id": 1, 33 "node_id": "n", 34 "avatar_url": "a", 35 "html_url": "h", 36 "name": "n", 37 "company": "c", 38 "blog": "b", 39 "location": "l", 40 "email": "e" 41 }, 42 "created_at": "2024-07-21T19:33:08Z", 43 "updated_at": "2024-07-21T19:33:08Z" 44 } 45 ] 46 }`) 47 }) 48 49 ctx := context.Background() 50 apps, _, err := client.Organizations.ListCustomRepoRoles(ctx, "o") 51 if err != nil { 52 t.Errorf("Organizations.ListCustomRepoRoles returned error: %v", err) 53 } 54 55 want := &OrganizationCustomRepoRoles{ 56 TotalCount: Ptr(1), 57 CustomRepoRoles: []*CustomRepoRoles{ 58 { 59 ID: Ptr(int64(1)), 60 Name: Ptr("Developer"), 61 BaseRole: Ptr("write"), 62 Permissions: []string{"delete_alerts_code_scanning"}, 63 Org: &Organization{ 64 Login: Ptr("l"), 65 ID: Ptr(int64(1)), 66 NodeID: Ptr("n"), 67 AvatarURL: Ptr("a"), 68 HTMLURL: Ptr("h"), 69 Name: Ptr("n"), 70 Company: Ptr("c"), 71 Blog: Ptr("b"), 72 Location: Ptr("l"), 73 Email: Ptr("e"), 74 }, 75 CreatedAt: &Timestamp{time.Date(2024, time.July, 21, 19, 33, 8, 0, time.UTC)}, 76 UpdatedAt: &Timestamp{time.Date(2024, time.July, 21, 19, 33, 8, 0, time.UTC)}, 77 }, 78 }, 79 } 80 if !cmp.Equal(apps, want) { 81 t.Errorf("Organizations.ListCustomRepoRoles returned %+v, want %+v", apps, want) 82 } 83 84 const methodName = "ListCustomRepoRoles" 85 testBadOptions(t, methodName, func() (err error) { 86 _, _, err = client.Organizations.ListCustomRepoRoles(ctx, "\no") 87 return err 88 }) 89 90 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 91 got, resp, err := client.Organizations.ListCustomRepoRoles(ctx, "o") 92 if got != nil { 93 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 94 } 95 return resp, err 96 }) 97 } 98 99 func TestOrganizationsService_GetCustomRepoRole(t *testing.T) { 100 t.Parallel() 101 client, mux, _ := setup(t) 102 103 mux.HandleFunc("/orgs/o/custom-repository-roles/1", func(w http.ResponseWriter, r *http.Request) { 104 testMethod(t, r, "GET") 105 fmt.Fprint(w, `{ 106 "id": 1, 107 "name": "Developer", 108 "base_role": "write", 109 "permissions": ["delete_alerts_code_scanning"], 110 "organization": { 111 "login": "l", 112 "id": 1, 113 "node_id": "n", 114 "avatar_url": "a", 115 "html_url": "h", 116 "name": "n", 117 "company": "c", 118 "blog": "b", 119 "location": "l", 120 "email": "e" 121 }, 122 "created_at": "2024-07-21T19:33:08Z", 123 "updated_at": "2024-07-21T19:33:08Z" 124 }`) 125 }) 126 127 ctx := context.Background() 128 role, _, err := client.Organizations.GetCustomRepoRole(ctx, "o", 1) 129 if err != nil { 130 t.Errorf("Organizations.GetCustomRepoRole returned error: %v", err) 131 } 132 133 want := &CustomRepoRoles{ 134 ID: Int64(1), 135 Name: String("Developer"), 136 BaseRole: String("write"), 137 Permissions: []string{"delete_alerts_code_scanning"}, 138 Org: &Organization{ 139 Login: String("l"), 140 ID: Int64(1), 141 NodeID: String("n"), 142 AvatarURL: String("a"), 143 HTMLURL: String("h"), 144 Name: String("n"), 145 Company: String("c"), 146 Blog: String("b"), 147 Location: String("l"), 148 Email: String("e"), 149 }, 150 CreatedAt: &Timestamp{time.Date(2024, time.July, 21, 19, 33, 8, 0, time.UTC)}, 151 UpdatedAt: &Timestamp{time.Date(2024, time.July, 21, 19, 33, 8, 0, time.UTC)}, 152 } 153 if !cmp.Equal(role, want) { 154 t.Errorf("Organizations.GetCustomRepoRole returned %+v, want %+v", role, want) 155 } 156 157 const methodName = "GetCustomRepoRole" 158 testBadOptions(t, methodName, func() (err error) { 159 _, _, err = client.Organizations.GetCustomRepoRole(ctx, "\no", 1) 160 return err 161 }) 162 163 testBadOptions(t, methodName, func() (err error) { 164 _, _, err = client.Organizations.GetCustomRepoRole(ctx, "o", -1) 165 return err 166 }) 167 168 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 169 got, resp, err := client.Organizations.GetCustomRepoRole(ctx, "o", 1) 170 if got != nil { 171 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 172 } 173 return resp, err 174 }) 175 } 176 177 func TestOrganizationsService_CreateCustomRepoRole(t *testing.T) { 178 t.Parallel() 179 client, mux, _ := setup(t) 180 181 mux.HandleFunc("/orgs/o/custom-repository-roles", func(w http.ResponseWriter, r *http.Request) { 182 testMethod(t, r, "POST") 183 fmt.Fprint(w, `{"id":8030,"name":"Labeler","description":"A role for issue and PR labelers","base_role":"read","permissions":["add_label"]}`) 184 }) 185 186 ctx := context.Background() 187 188 opts := &CreateOrUpdateCustomRepoRoleOptions{ 189 Name: Ptr("Labeler"), 190 Description: Ptr("A role for issue and PR labelers"), 191 BaseRole: Ptr("read"), 192 Permissions: []string{"add_label"}, 193 } 194 apps, _, err := client.Organizations.CreateCustomRepoRole(ctx, "o", opts) 195 if err != nil { 196 t.Errorf("Organizations.CreateCustomRepoRole returned error: %v", err) 197 } 198 199 want := &CustomRepoRoles{ID: Ptr(int64(8030)), Name: Ptr("Labeler"), BaseRole: Ptr("read"), Permissions: []string{"add_label"}, Description: Ptr("A role for issue and PR labelers")} 200 201 if !cmp.Equal(apps, want) { 202 t.Errorf("Organizations.CreateCustomRepoRole returned %+v, want %+v", apps, want) 203 } 204 205 const methodName = "CreateCustomRepoRole" 206 testBadOptions(t, methodName, func() (err error) { 207 _, _, err = client.Organizations.CreateCustomRepoRole(ctx, "\no", nil) 208 return err 209 }) 210 211 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 212 got, resp, err := client.Organizations.CreateCustomRepoRole(ctx, "o", nil) 213 if got != nil { 214 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 215 } 216 return resp, err 217 }) 218 } 219 220 func TestOrganizationsService_UpdateCustomRepoRole(t *testing.T) { 221 t.Parallel() 222 client, mux, _ := setup(t) 223 224 mux.HandleFunc("/orgs/o/custom-repository-roles/8030", func(w http.ResponseWriter, r *http.Request) { 225 testMethod(t, r, "PATCH") 226 fmt.Fprint(w, `{"id":8030,"name":"Updated Name","description":"Updated Description","base_role":"read","permissions":["add_label"]}`) 227 }) 228 229 ctx := context.Background() 230 231 opts := &CreateOrUpdateCustomRepoRoleOptions{ 232 Name: Ptr("Updated Name"), 233 Description: Ptr("Updated Description"), 234 } 235 apps, _, err := client.Organizations.UpdateCustomRepoRole(ctx, "o", 8030, opts) 236 if err != nil { 237 t.Errorf("Organizations.UpdateCustomRepoRole returned error: %v", err) 238 } 239 240 want := &CustomRepoRoles{ID: Ptr(int64(8030)), Name: Ptr("Updated Name"), BaseRole: Ptr("read"), Permissions: []string{"add_label"}, Description: Ptr("Updated Description")} 241 242 if !cmp.Equal(apps, want) { 243 t.Errorf("Organizations.UpdateCustomRepoRole returned %+v, want %+v", apps, want) 244 } 245 246 const methodName = "UpdateCustomRepoRole" 247 testBadOptions(t, methodName, func() (err error) { 248 _, _, err = client.Organizations.UpdateCustomRepoRole(ctx, "\no", 8030, nil) 249 return err 250 }) 251 252 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 253 got, resp, err := client.Organizations.UpdateCustomRepoRole(ctx, "o", 8030, nil) 254 if got != nil { 255 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 256 } 257 return resp, err 258 }) 259 } 260 261 func TestOrganizationsService_DeleteCustomRepoRole(t *testing.T) { 262 t.Parallel() 263 client, mux, _ := setup(t) 264 265 mux.HandleFunc("/orgs/o/custom-repository-roles/8030", func(w http.ResponseWriter, r *http.Request) { 266 testMethod(t, r, "DELETE") 267 w.WriteHeader(http.StatusNoContent) 268 }) 269 270 ctx := context.Background() 271 272 resp, err := client.Organizations.DeleteCustomRepoRole(ctx, "o", 8030) 273 if err != nil { 274 t.Errorf("Organizations.DeleteCustomRepoRole returned error: %v", err) 275 } 276 277 if !cmp.Equal(resp.StatusCode, 204) { 278 t.Errorf("Organizations.DeleteCustomRepoRole returned status code %+v, want %+v", resp.StatusCode, "204") 279 } 280 281 const methodName = "DeleteCustomRepoRole" 282 testBadOptions(t, methodName, func() (err error) { 283 _, err = client.Organizations.DeleteCustomRepoRole(ctx, "\no", 8030) 284 return err 285 }) 286 }