github.com/google/go-github/v57@v57.0.0/github/orgs_properties_test.go (about) 1 // Copyright 2023 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 14 "github.com/google/go-cmp/cmp" 15 ) 16 17 func TestOrganizationsService_GetAllCustomProperties(t *testing.T) { 18 client, mux, _, teardown := setup() 19 defer teardown() 20 21 mux.HandleFunc("/orgs/o/properties/schema", func(w http.ResponseWriter, r *http.Request) { 22 testMethod(t, r, "GET") 23 fmt.Fprint(w, `[ 24 { 25 "property_name": "name", 26 "value_type": "single_select", 27 "required": true, 28 "default_value": "production", 29 "description": "Prod or dev environment", 30 "allowed_values":[ 31 "production", 32 "development" 33 ] 34 }, 35 { 36 "property_name": "service", 37 "value_type": "string" 38 }, 39 { 40 "property_name": "team", 41 "value_type": "string", 42 "description": "Team owning the repository" 43 } 44 ]`) 45 }) 46 47 ctx := context.Background() 48 properties, _, err := client.Organizations.GetAllCustomProperties(ctx, "o") 49 if err != nil { 50 t.Errorf("Organizations.GetAllCustomProperties returned error: %v", err) 51 } 52 53 want := []*CustomProperty{ 54 { 55 PropertyName: String("name"), 56 ValueType: "single_select", 57 Required: Bool(true), 58 DefaultValue: String("production"), 59 Description: String("Prod or dev environment"), 60 AllowedValues: []string{"production", "development"}, 61 }, 62 { 63 PropertyName: String("service"), 64 ValueType: "string", 65 }, 66 { 67 PropertyName: String("team"), 68 ValueType: "string", 69 Description: String("Team owning the repository"), 70 }, 71 } 72 if !cmp.Equal(properties, want) { 73 t.Errorf("Organizations.GetAllCustomProperties returned %+v, want %+v", properties, want) 74 } 75 76 const methodName = "GetAllCustomProperties" 77 78 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 79 got, resp, err := client.Organizations.GetAllCustomProperties(ctx, "o") 80 if got != nil { 81 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 82 } 83 return resp, err 84 }) 85 } 86 87 func TestOrganizationsService_CreateOrUpdateCustomProperties(t *testing.T) { 88 client, mux, _, teardown := setup() 89 defer teardown() 90 91 mux.HandleFunc("/orgs/o/properties/schema", func(w http.ResponseWriter, r *http.Request) { 92 testMethod(t, r, "PATCH") 93 testBody(t, r, `{"properties":[{"property_name":"name","value_type":"single_select","required":true},{"property_name":"service","value_type":"string"}]}`+"\n") 94 fmt.Fprint(w, `[ 95 { 96 "property_name": "name", 97 "value_type": "single_select", 98 "required": true 99 }, 100 { 101 "property_name": "service", 102 "value_type": "string" 103 } 104 ]`) 105 }) 106 107 ctx := context.Background() 108 properties, _, err := client.Organizations.CreateOrUpdateCustomProperties(ctx, "o", []*CustomProperty{ 109 { 110 PropertyName: String("name"), 111 ValueType: "single_select", 112 Required: Bool(true), 113 }, 114 { 115 PropertyName: String("service"), 116 ValueType: "string", 117 }, 118 }) 119 if err != nil { 120 t.Errorf("Organizations.CreateOrUpdateCustomProperties returned error: %v", err) 121 } 122 123 want := []*CustomProperty{ 124 { 125 PropertyName: String("name"), 126 ValueType: "single_select", 127 Required: Bool(true), 128 }, 129 { 130 PropertyName: String("service"), 131 ValueType: "string", 132 }, 133 } 134 135 if !cmp.Equal(properties, want) { 136 t.Errorf("Organizations.CreateOrUpdateCustomProperties returned %+v, want %+v", properties, want) 137 } 138 139 const methodName = "CreateOrUpdateCustomProperties" 140 141 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 142 got, resp, err := client.Organizations.CreateOrUpdateCustomProperties(ctx, "o", nil) 143 if got != nil { 144 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 145 } 146 return resp, err 147 }) 148 } 149 150 func TestOrganizationsService_GetCustomProperty(t *testing.T) { 151 client, mux, _, teardown := setup() 152 defer teardown() 153 154 mux.HandleFunc("/orgs/o/properties/schema/name", func(w http.ResponseWriter, r *http.Request) { 155 testMethod(t, r, "GET") 156 fmt.Fprint(w, `{ 157 "property_name": "name", 158 "value_type": "single_select", 159 "required": true, 160 "default_value": "production", 161 "description": "Prod or dev environment", 162 "allowed_values":[ 163 "production", 164 "development" 165 ] 166 }`) 167 }) 168 169 ctx := context.Background() 170 property, _, err := client.Organizations.GetCustomProperty(ctx, "o", "name") 171 if err != nil { 172 t.Errorf("Organizations.GetCustomProperty returned error: %v", err) 173 } 174 175 want := &CustomProperty{ 176 PropertyName: String("name"), 177 ValueType: "single_select", 178 Required: Bool(true), 179 DefaultValue: String("production"), 180 Description: String("Prod or dev environment"), 181 AllowedValues: []string{"production", "development"}, 182 } 183 if !cmp.Equal(property, want) { 184 t.Errorf("Organizations.GetCustomProperty returned %+v, want %+v", property, want) 185 } 186 187 const methodName = "GetCustomProperty" 188 189 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 190 got, resp, err := client.Organizations.GetCustomProperty(ctx, "o", "name") 191 if got != nil { 192 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 193 } 194 return resp, err 195 }) 196 } 197 198 func TestOrganizationsService_CreateOrUpdateCustomProperty(t *testing.T) { 199 client, mux, _, teardown := setup() 200 defer teardown() 201 202 mux.HandleFunc("/orgs/o/properties/schema/name", func(w http.ResponseWriter, r *http.Request) { 203 testMethod(t, r, "PUT") 204 fmt.Fprint(w, `{ 205 "property_name": "name", 206 "value_type": "single_select", 207 "required": true, 208 "default_value": "production", 209 "description": "Prod or dev environment", 210 "allowed_values":[ 211 "production", 212 "development" 213 ] 214 }`) 215 }) 216 217 ctx := context.Background() 218 property, _, err := client.Organizations.CreateOrUpdateCustomProperty(ctx, "o", "name", &CustomProperty{ 219 ValueType: "single_select", 220 Required: Bool(true), 221 DefaultValue: String("production"), 222 Description: String("Prod or dev environment"), 223 AllowedValues: []string{"production", "development"}, 224 }) 225 if err != nil { 226 t.Errorf("Organizations.CreateOrUpdateCustomProperty returned error: %v", err) 227 } 228 229 want := &CustomProperty{ 230 PropertyName: String("name"), 231 ValueType: "single_select", 232 Required: Bool(true), 233 DefaultValue: String("production"), 234 Description: String("Prod or dev environment"), 235 AllowedValues: []string{"production", "development"}, 236 } 237 if !cmp.Equal(property, want) { 238 t.Errorf("Organizations.CreateOrUpdateCustomProperty returned %+v, want %+v", property, want) 239 } 240 241 const methodName = "CreateOrUpdateCustomProperty" 242 243 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 244 got, resp, err := client.Organizations.CreateOrUpdateCustomProperty(ctx, "o", "name", nil) 245 if got != nil { 246 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 247 } 248 return resp, err 249 }) 250 } 251 252 func TestOrganizationsService_RemoveCustomProperty(t *testing.T) { 253 client, mux, _, teardown := setup() 254 defer teardown() 255 256 mux.HandleFunc("/orgs/o/properties/schema/name", func(w http.ResponseWriter, r *http.Request) { 257 testMethod(t, r, "DELETE") 258 }) 259 260 ctx := context.Background() 261 _, err := client.Organizations.RemoveCustomProperty(ctx, "o", "name") 262 if err != nil { 263 t.Errorf("Organizations.RemoveCustomProperty returned error: %v", err) 264 } 265 266 const methodName = "RemoveCustomProperty" 267 268 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 269 return client.Organizations.RemoveCustomProperty(ctx, "0", "name") 270 }) 271 } 272 273 func TestOrganizationsService_ListCustomPropertyValues(t *testing.T) { 274 client, mux, _, teardown := setup() 275 defer teardown() 276 277 mux.HandleFunc("/orgs/o/properties/values", func(w http.ResponseWriter, r *http.Request) { 278 testMethod(t, r, "GET") 279 testFormValues(t, r, values{"page": "1", "per_page": "100"}) 280 fmt.Fprint(w, `[{ 281 "repository_id": 1296269, 282 "repository_name": "Hello-World", 283 "repository_full_name": "octocat/Hello-World", 284 "properties": [ 285 { 286 "property_name": "environment", 287 "value": "production" 288 }, 289 { 290 "property_name": "service", 291 "value": "web" 292 } 293 ] 294 }]`) 295 }) 296 297 ctx := context.Background() 298 repoPropertyValues, _, err := client.Organizations.ListCustomPropertyValues(ctx, "o", &ListOptions{ 299 Page: 1, 300 PerPage: 100, 301 }) 302 if err != nil { 303 t.Errorf("Organizations.ListCustomPropertyValues returned error: %v", err) 304 } 305 306 want := []*RepoCustomPropertyValue{ 307 { 308 RepositoryID: 1296269, 309 RepositoryName: "Hello-World", 310 RepositoryFullName: "octocat/Hello-World", 311 Properties: []*CustomPropertyValue{ 312 { 313 PropertyName: "environment", 314 Value: String("production"), 315 }, 316 { 317 PropertyName: "service", 318 Value: String("web"), 319 }, 320 }, 321 }, 322 } 323 324 if !cmp.Equal(repoPropertyValues, want) { 325 t.Errorf("Organizations.ListCustomPropertyValues returned %+v, want %+v", repoPropertyValues, want) 326 } 327 328 const methodName = "ListCustomPropertyValues" 329 330 testBadOptions(t, methodName, func() (err error) { 331 _, _, err = client.Organizations.ListCustomPropertyValues(ctx, "\n", &ListOptions{}) 332 return err 333 }) 334 335 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 336 got, resp, err := client.Organizations.ListCustomPropertyValues(ctx, "o", nil) 337 if got != nil { 338 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 339 } 340 return resp, err 341 }) 342 } 343 344 func TestOrganizationsService_CreateOrUpdateRepoCustomPropertyValues(t *testing.T) { 345 client, mux, _, teardown := setup() 346 defer teardown() 347 348 mux.HandleFunc("/orgs/o/properties/values", func(w http.ResponseWriter, r *http.Request) { 349 testMethod(t, r, "PATCH") 350 testBody(t, r, `{"repository_names":["repo"],"properties":[{"property_name":"service","value_type":"string"}]}`+"\n") 351 }) 352 353 ctx := context.Background() 354 _, err := client.Organizations.CreateOrUpdateRepoCustomPropertyValues(ctx, "o", []string{"repo"}, []*CustomProperty{ 355 { 356 PropertyName: String("service"), 357 ValueType: "string", 358 }, 359 }) 360 if err != nil { 361 t.Errorf("Organizations.CreateOrUpdateCustomPropertyValuesForRepos returned error: %v", err) 362 } 363 364 const methodName = "CreateOrUpdateCustomPropertyValuesForRepos" 365 366 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 367 return client.Organizations.CreateOrUpdateRepoCustomPropertyValues(ctx, "o", nil, nil) 368 }) 369 }