github.com/google/go-github/v66@v66.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: Int(1),
    57  		CustomRepoRoles: []*CustomRepoRoles{
    58  			{
    59  				ID:          Int64(1),
    60  				Name:        String("Developer"),
    61  				BaseRole:    String("write"),
    62  				Permissions: []string{"delete_alerts_code_scanning"},
    63  				Org: &Organization{
    64  					Login:     String("l"),
    65  					ID:        Int64(1),
    66  					NodeID:    String("n"),
    67  					AvatarURL: String("a"),
    68  					HTMLURL:   String("h"),
    69  					Name:      String("n"),
    70  					Company:   String("c"),
    71  					Blog:      String("b"),
    72  					Location:  String("l"),
    73  					Email:     String("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_CreateCustomRepoRole(t *testing.T) {
   100  	t.Parallel()
   101  	client, mux, _ := setup(t)
   102  
   103  	mux.HandleFunc("/orgs/o/custom-repository-roles", func(w http.ResponseWriter, r *http.Request) {
   104  		testMethod(t, r, "POST")
   105  		fmt.Fprint(w, `{"id":8030,"name":"Labeler","description":"A role for issue and PR labelers","base_role":"read","permissions":["add_label"]}`)
   106  	})
   107  
   108  	ctx := context.Background()
   109  
   110  	opts := &CreateOrUpdateCustomRepoRoleOptions{
   111  		Name:        String("Labeler"),
   112  		Description: String("A role for issue and PR labelers"),
   113  		BaseRole:    String("read"),
   114  		Permissions: []string{"add_label"},
   115  	}
   116  	apps, _, err := client.Organizations.CreateCustomRepoRole(ctx, "o", opts)
   117  	if err != nil {
   118  		t.Errorf("Organizations.CreateCustomRepoRole returned error: %v", err)
   119  	}
   120  
   121  	want := &CustomRepoRoles{ID: Int64(8030), Name: String("Labeler"), BaseRole: String("read"), Permissions: []string{"add_label"}, Description: String("A role for issue and PR labelers")}
   122  
   123  	if !cmp.Equal(apps, want) {
   124  		t.Errorf("Organizations.CreateCustomRepoRole returned %+v, want %+v", apps, want)
   125  	}
   126  
   127  	const methodName = "CreateCustomRepoRole"
   128  	testBadOptions(t, methodName, func() (err error) {
   129  		_, _, err = client.Organizations.CreateCustomRepoRole(ctx, "\no", nil)
   130  		return err
   131  	})
   132  
   133  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   134  		got, resp, err := client.Organizations.CreateCustomRepoRole(ctx, "o", nil)
   135  		if got != nil {
   136  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   137  		}
   138  		return resp, err
   139  	})
   140  }
   141  
   142  func TestOrganizationsService_UpdateCustomRepoRole(t *testing.T) {
   143  	t.Parallel()
   144  	client, mux, _ := setup(t)
   145  
   146  	mux.HandleFunc("/orgs/o/custom-repository-roles/8030", func(w http.ResponseWriter, r *http.Request) {
   147  		testMethod(t, r, "PATCH")
   148  		fmt.Fprint(w, `{"id":8030,"name":"Updated Name","description":"Updated Description","base_role":"read","permissions":["add_label"]}`)
   149  	})
   150  
   151  	ctx := context.Background()
   152  
   153  	opts := &CreateOrUpdateCustomRepoRoleOptions{
   154  		Name:        String("Updated Name"),
   155  		Description: String("Updated Description"),
   156  	}
   157  	apps, _, err := client.Organizations.UpdateCustomRepoRole(ctx, "o", 8030, opts)
   158  	if err != nil {
   159  		t.Errorf("Organizations.UpdateCustomRepoRole returned error: %v", err)
   160  	}
   161  
   162  	want := &CustomRepoRoles{ID: Int64(8030), Name: String("Updated Name"), BaseRole: String("read"), Permissions: []string{"add_label"}, Description: String("Updated Description")}
   163  
   164  	if !cmp.Equal(apps, want) {
   165  		t.Errorf("Organizations.UpdateCustomRepoRole returned %+v, want %+v", apps, want)
   166  	}
   167  
   168  	const methodName = "UpdateCustomRepoRole"
   169  	testBadOptions(t, methodName, func() (err error) {
   170  		_, _, err = client.Organizations.UpdateCustomRepoRole(ctx, "\no", 8030, nil)
   171  		return err
   172  	})
   173  
   174  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   175  		got, resp, err := client.Organizations.UpdateCustomRepoRole(ctx, "o", 8030, nil)
   176  		if got != nil {
   177  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   178  		}
   179  		return resp, err
   180  	})
   181  }
   182  
   183  func TestOrganizationsService_DeleteCustomRepoRole(t *testing.T) {
   184  	t.Parallel()
   185  	client, mux, _ := setup(t)
   186  
   187  	mux.HandleFunc("/orgs/o/custom-repository-roles/8030", func(w http.ResponseWriter, r *http.Request) {
   188  		testMethod(t, r, "DELETE")
   189  		w.WriteHeader(http.StatusNoContent)
   190  	})
   191  
   192  	ctx := context.Background()
   193  
   194  	resp, err := client.Organizations.DeleteCustomRepoRole(ctx, "o", 8030)
   195  	if err != nil {
   196  		t.Errorf("Organizations.DeleteCustomRepoRole returned error: %v", err)
   197  	}
   198  
   199  	if !cmp.Equal(resp.StatusCode, 204) {
   200  		t.Errorf("Organizations.DeleteCustomRepoRole returned  status code %+v, want %+v", resp.StatusCode, "204")
   201  	}
   202  
   203  	const methodName = "DeleteCustomRepoRole"
   204  	testBadOptions(t, methodName, func() (err error) {
   205  		_, err = client.Organizations.DeleteCustomRepoRole(ctx, "\no", 8030)
   206  		return err
   207  	})
   208  }