github.com/google/go-github/v74@v74.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  }