github.com/google/go-github/v71@v71.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.Fprintf(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.Fprintf(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.Fprintf(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.Fprintf(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(w 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.Fprintf(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  }