github.com/google/go-github/v74@v74.0.0/github/enterprise_network_configurations_test.go (about) 1 // Copyright 2025 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 TestEnterpriseService_ListEnterpriseNetworkConfigurations(t *testing.T) { 19 t.Parallel() 20 client, mux, _ := setup(t) 21 22 mux.HandleFunc(" /enterprises/e/network-configurations", func(w http.ResponseWriter, r *http.Request) { 23 testMethod(t, r, "GET") 24 testFormValues(t, r, values{"page": "3", "per_page": "2"}) 25 fmt.Fprint(w, `{ 26 "total_count": 2, 27 "network_configurations": [ 28 { 29 "id": "123456789ABCDEF", 30 "name": "configuration one", 31 "compute_service": "actions", 32 "network_settings_ids": [ 33 "23456789ABDCEF1", 34 "3456789ABDCEF12" 35 ], 36 "created_on": "2024-04-09T17:30:15Z" 37 }, 38 { 39 "id": "456789ABDCEF123", 40 "name": "configuration two", 41 "compute_service": "none", 42 "network_settings_ids": [ 43 "56789ABDCEF1234", 44 "6789ABDCEF12345" 45 ], 46 "created_on": "2024-11-02T12:30:30Z" 47 } 48 ] 49 }`) 50 }) 51 52 ctx := context.Background() 53 54 opts := &ListOptions{Page: 3, PerPage: 2} 55 configurations, _, err := client.Enterprise.ListEnterpriseNetworkConfigurations(ctx, "e", opts) 56 if err != nil { 57 t.Errorf("Enterprise.ListEnterpriseNetworkConfigurations returned error: %v", err) 58 } 59 60 want := &NetworkConfigurations{ 61 TotalCount: Ptr(int64(2)), 62 NetworkConfigurations: []*NetworkConfiguration{ 63 { 64 ID: Ptr("123456789ABCDEF"), 65 Name: Ptr("configuration one"), 66 ComputeService: Ptr(ComputeService("actions")), 67 NetworkSettingsIDs: []string{"23456789ABDCEF1", "3456789ABDCEF12"}, 68 CreatedOn: &Timestamp{time.Date(2024, 4, 9, 17, 30, 15, 0, time.UTC)}, 69 }, 70 { 71 ID: Ptr("456789ABDCEF123"), 72 Name: Ptr("configuration two"), 73 ComputeService: Ptr(ComputeService("none")), 74 NetworkSettingsIDs: []string{"56789ABDCEF1234", "6789ABDCEF12345"}, 75 CreatedOn: &Timestamp{time.Date(2024, 11, 2, 12, 30, 30, 0, time.UTC)}, 76 }, 77 }, 78 } 79 if !cmp.Equal(configurations, want) { 80 t.Errorf("Enterprise.ListEnterpriseNetworkConfigurations mismatch (-want +got):\n%s", cmp.Diff(want, configurations)) 81 } 82 83 const methodName = "ListEnterpriseNetworkConfigurations" 84 testBadOptions(t, methodName, func() error { 85 _, _, err = client.Enterprise.ListEnterpriseNetworkConfigurations(ctx, "\ne", opts) 86 return err 87 }) 88 89 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 90 got, resp, err := client.Enterprise.ListEnterpriseNetworkConfigurations(ctx, "e", opts) 91 if got != nil { 92 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 93 } 94 return resp, err 95 }) 96 } 97 98 func TestEnterpriseService_CreateEnterpriseNetworkConfiguration(t *testing.T) { 99 t.Parallel() 100 client, mux, _ := setup(t) 101 102 mux.HandleFunc("/enterprises/e/network-configurations", func(w http.ResponseWriter, r *http.Request) { 103 testMethod(t, r, "POST") 104 fmt.Fprint(w, `{ 105 "id": "123456789ABCDEF", 106 "name": "configuration one", 107 "compute_service": "actions", 108 "network_settings_ids": [ 109 "23456789ABDCEF1" 110 ], 111 "created_on": "2024-04-09T17:30:15Z" 112 }`) 113 }) 114 115 ctx := context.Background() 116 117 req := NetworkConfigurationRequest{ 118 Name: Ptr("configuration-one"), 119 ComputeService: Ptr(ComputeService("actions")), 120 NetworkSettingsIDs: []string{ 121 "23456789ABDCEF1", 122 }, 123 } 124 configuration, _, err := client.Enterprise.CreateEnterpriseNetworkConfiguration(ctx, "e", req) 125 if err != nil { 126 t.Errorf("Enterprise.CreateEnterpriseNetworkConfiguration returned error: %v", err) 127 } 128 129 want := &NetworkConfiguration{ 130 ID: Ptr("123456789ABCDEF"), 131 Name: Ptr("configuration one"), 132 ComputeService: Ptr(ComputeService("actions")), 133 NetworkSettingsIDs: []string{"23456789ABDCEF1"}, 134 CreatedOn: &Timestamp{time.Date(2024, 4, 9, 17, 30, 15, 0, time.UTC)}, 135 } 136 if !cmp.Equal(configuration, want) { 137 t.Errorf("Enterprise.CreateEnterpriseNetworkConfiguration mismatch (-want +got):\n%s", cmp.Diff(want, configuration)) 138 } 139 140 validationTest := []struct { 141 name string 142 request NetworkConfigurationRequest 143 want string 144 }{ 145 { 146 name: "invalid network settings id", 147 request: NetworkConfigurationRequest{ 148 Name: Ptr(""), 149 NetworkSettingsIDs: []string{"56789ABDCEF1234"}, 150 }, 151 want: "validation failed: must be between 1 and 100 characters", 152 }, 153 { 154 name: "invalid network settings id", 155 request: NetworkConfigurationRequest{ 156 Name: Ptr("updated-configuration-one"), 157 }, 158 want: "validation failed: exactly one network settings id must be specified", 159 }, 160 { 161 name: "invalid compute service", 162 request: NetworkConfigurationRequest{ 163 Name: Ptr("updated-configuration-one"), 164 ComputeService: Ptr(ComputeService("")), 165 NetworkSettingsIDs: []string{"56789ABDCEF1234"}, 166 }, 167 want: "validation failed: compute service can only be one of: none, actions", 168 }, 169 } 170 for _, tc := range validationTest { 171 _, _, err = client.Enterprise.CreateEnterpriseNetworkConfiguration(ctx, "e", tc.request) 172 if err == nil || err.Error() != tc.want { 173 t.Errorf("expected error to be %v, got %v", tc.want, err) 174 } 175 } 176 177 const methodName = "CreateEnterpriseNetworkConfiguration" 178 testBadOptions(t, methodName, func() error { 179 _, _, err = client.Enterprise.CreateEnterpriseNetworkConfiguration(ctx, "\ne", req) 180 return err 181 }) 182 183 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 184 got, resp, err := client.Enterprise.CreateEnterpriseNetworkConfiguration(ctx, "e", req) 185 if got != nil { 186 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 187 } 188 return resp, err 189 }) 190 } 191 192 func TestEnterpriseService_GetEnterpriseNetworkConfiguration(t *testing.T) { 193 t.Parallel() 194 client, mux, _ := setup(t) 195 196 mux.HandleFunc("/enterprises/e/network-configurations/123456789ABCDEF", func(w http.ResponseWriter, r *http.Request) { 197 testMethod(t, r, "GET") 198 fmt.Fprint(w, `{ 199 "id": "123456789ABCDEF", 200 "name": "configuration one", 201 "compute_service": "actions", 202 "network_settings_ids": [ 203 "23456789ABDCEF1", 204 "3456789ABDCEF12" 205 ], 206 "created_on": "2024-12-10T19:00:15Z" 207 }`) 208 }) 209 210 ctx := context.Background() 211 configuration, _, err := client.Enterprise.GetEnterpriseNetworkConfiguration(ctx, "e", "123456789ABCDEF") 212 if err != nil { 213 t.Errorf("Enterprise.GetEnterpriseNetworkConfiguration returned err: %v", err) 214 } 215 216 want := &NetworkConfiguration{ 217 ID: Ptr("123456789ABCDEF"), 218 Name: Ptr("configuration one"), 219 ComputeService: Ptr(ComputeService("actions")), 220 NetworkSettingsIDs: []string{"23456789ABDCEF1", "3456789ABDCEF12"}, 221 CreatedOn: &Timestamp{time.Date(2024, 12, 10, 19, 00, 15, 0, time.UTC)}, 222 } 223 if !cmp.Equal(configuration, want) { 224 t.Errorf("Enterprise.GetEnterpriseNetworkConfiguration mismatch (-want +got):\n%s", cmp.Diff(want, configuration)) 225 } 226 227 const methodName = "GetEnterpriseNetworkConfiguration" 228 testBadOptions(t, methodName, func() error { 229 _, _, err = client.Enterprise.GetEnterpriseNetworkConfiguration(ctx, "\ne", "123456789ABCDEF") 230 return err 231 }) 232 233 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 234 got, resp, err := client.Enterprise.GetEnterpriseNetworkConfiguration(ctx, "e", "123456789ABCDEF") 235 if got != nil { 236 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 237 } 238 return resp, err 239 }) 240 } 241 242 func TestEnterpriseService_UpdateEnterpriseNetworkConfiguration(t *testing.T) { 243 t.Parallel() 244 client, mux, _ := setup(t) 245 246 mux.HandleFunc("/enterprises/e/network-configurations/123456789ABCDEF", func(w http.ResponseWriter, r *http.Request) { 247 testMethod(t, r, "PATCH") 248 fmt.Fprint(w, `{ 249 "id": "123456789ABCDEF", 250 "name": "updated configuration one", 251 "compute_service": "none", 252 "network_settings_ids": [ 253 "456789ABDCEF123" 254 ], 255 "created_on": "2024-12-10T19:00:15Z" 256 }`) 257 }) 258 259 ctx := context.Background() 260 req := NetworkConfigurationRequest{ 261 Name: Ptr("updated-configuration-one"), 262 NetworkSettingsIDs: []string{ 263 "456789ABDCEF123", 264 }, 265 ComputeService: Ptr(ComputeService("none")), 266 } 267 configuration, _, err := client.Enterprise.UpdateEnterpriseNetworkConfiguration(ctx, "e", "123456789ABCDEF", req) 268 if err != nil { 269 t.Errorf("Enterprise.UpdateEnterpriseNetworkConfiguration returned error %v", err) 270 } 271 272 want := &NetworkConfiguration{ 273 ID: Ptr("123456789ABCDEF"), 274 Name: Ptr("updated configuration one"), 275 ComputeService: Ptr(ComputeService("none")), 276 NetworkSettingsIDs: []string{"456789ABDCEF123"}, 277 CreatedOn: &Timestamp{time.Date(2024, 12, 10, 19, 00, 15, 0, time.UTC)}, 278 } 279 if !cmp.Equal(configuration, want) { 280 t.Errorf("Enterprise.UpdateEnterpriseNetworkConfiguration mismatch (-want +get)\n%s", cmp.Diff(want, configuration)) 281 } 282 283 validationTest := []struct { 284 name string 285 request NetworkConfigurationRequest 286 want string 287 }{ 288 { 289 name: "invalid network settings id", 290 request: NetworkConfigurationRequest{ 291 Name: Ptr(""), 292 NetworkSettingsIDs: []string{"56789ABDCEF1234"}, 293 }, 294 want: "validation failed: must be between 1 and 100 characters", 295 }, 296 { 297 name: "invalid network settings id", 298 request: NetworkConfigurationRequest{ 299 Name: Ptr("updated-configuration-one"), 300 }, 301 want: "validation failed: exactly one network settings id must be specified", 302 }, 303 { 304 name: "invalid compute service", 305 request: NetworkConfigurationRequest{ 306 Name: Ptr("updated-configuration-one"), 307 ComputeService: Ptr(ComputeService("something")), 308 NetworkSettingsIDs: []string{"56789ABDCEF1234"}, 309 }, 310 want: "validation failed: compute service can only be one of: none, actions", 311 }, 312 } 313 for _, tc := range validationTest { 314 _, _, err = client.Enterprise.UpdateEnterpriseNetworkConfiguration(ctx, "e", "123456789ABCDEF", tc.request) 315 if err == nil || err.Error() != tc.want { 316 t.Errorf("expected error to be %v, got %v", tc.want, err) 317 } 318 } 319 320 const methodName = "UpdateEnterpriseNetworkConfiguration" 321 testBadOptions(t, methodName, func() error { 322 _, _, err = client.Enterprise.UpdateEnterpriseNetworkConfiguration(ctx, "\ne", "123456789ABCDEF", req) 323 return err 324 }) 325 326 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 327 got, resp, err := client.Enterprise.UpdateEnterpriseNetworkConfiguration(ctx, "e", "123456789ABCDEF", req) 328 if got != nil { 329 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 330 } 331 return resp, err 332 }) 333 } 334 335 func TestEnterpriseService_DeleteEnterpriseNetworkConfiguration(t *testing.T) { 336 t.Parallel() 337 client, mux, _ := setup(t) 338 339 mux.HandleFunc("/enterprises/e/network-configurations/123456789ABCDEF", func(_ http.ResponseWriter, r *http.Request) { 340 testMethod(t, r, "DELETE") 341 }) 342 343 ctx := context.Background() 344 _, err := client.Enterprise.DeleteEnterpriseNetworkConfiguration(ctx, "e", "123456789ABCDEF") 345 if err != nil { 346 t.Errorf("Enterprise.DeleteEnterpriseNetworkConfiguration returned error %v", err) 347 } 348 349 const methodName = "DeleteEnterpriseNetworkConfiguration" 350 testBadOptions(t, methodName, func() error { 351 _, err = client.Enterprise.DeleteEnterpriseNetworkConfiguration(ctx, "\ne", "123456789ABCDEF") 352 return err 353 }) 354 355 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 356 return client.Enterprise.DeleteEnterpriseNetworkConfiguration(ctx, "e", "123456789ABCDEF") 357 }) 358 } 359 360 func TestEnterpriseService_GetEnterpriseNetworkSettingsResource(t *testing.T) { 361 t.Parallel() 362 client, mux, _ := setup(t) 363 364 mux.HandleFunc("/enterprises/e/network-settings/123456789ABCDEF", func(w http.ResponseWriter, r *http.Request) { 365 testMethod(t, r, "GET") 366 fmt.Fprint(w, `{ 367 "id": "220F78DACB92BBFBC5E6F22DE1CCF52309D", 368 "network_configuration_id": "934E208B3EE0BD60CF5F752C426BFB53562", 369 "name": "my_network_settings", 370 "subnet_id": "/subscriptions/14839728-3ad9-43ab-bd2b-fa6ad0f75e2a/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet", 371 "region": "germanywestcentral" 372 }`) 373 }) 374 375 ctx := context.Background() 376 resource, _, err := client.Enterprise.GetEnterpriseNetworkSettingsResource(ctx, "e", "123456789ABCDEF") 377 if err != nil { 378 t.Errorf("Enterprise.GetEnterpriseNetworkSettingsResource returned error %v", err) 379 } 380 381 want := &NetworkSettingsResource{ 382 ID: Ptr("220F78DACB92BBFBC5E6F22DE1CCF52309D"), 383 NetworkConfigurationID: Ptr("934E208B3EE0BD60CF5F752C426BFB53562"), 384 Name: Ptr("my_network_settings"), 385 SubnetID: Ptr("/subscriptions/14839728-3ad9-43ab-bd2b-fa6ad0f75e2a/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/my-vnet/subnets/my-subnet"), 386 Region: Ptr("germanywestcentral"), 387 } 388 if !cmp.Equal(resource, want) { 389 t.Errorf("Enterprise.GetEnterpriseNetworkSettingsResource mistach (-want +got):\n%s", cmp.Diff(want, resource)) 390 } 391 392 const methodName = "GetEnterpriseNetworkSettingsResource" 393 testBadOptions(t, methodName, func() error { 394 _, _, err = client.Enterprise.GetEnterpriseNetworkSettingsResource(ctx, "\ne", "123456789ABCDEF") 395 return err 396 }) 397 398 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 399 got, resp, err := client.Enterprise.GetEnterpriseNetworkSettingsResource(ctx, "e", "123456789ABCDEF") 400 if got != nil { 401 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 402 } 403 return resp, err 404 }) 405 }