github.com/google/go-github/v33@v33.0.0/github/teams_members_test.go (about)

     1  // Copyright 2018 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  	"encoding/json"
    11  	"fmt"
    12  	"net/http"
    13  	"reflect"
    14  	"testing"
    15  )
    16  
    17  func TestTeamsService__ListTeamMembersByID(t *testing.T) {
    18  	client, mux, _, teardown := setup()
    19  	defer teardown()
    20  
    21  	mux.HandleFunc("/organizations/1/team/2/members", func(w http.ResponseWriter, r *http.Request) {
    22  		testMethod(t, r, "GET")
    23  		testFormValues(t, r, values{"role": "member", "page": "2"})
    24  		fmt.Fprint(w, `[{"id":1}]`)
    25  	})
    26  
    27  	opt := &TeamListTeamMembersOptions{Role: "member", ListOptions: ListOptions{Page: 2}}
    28  	members, _, err := client.Teams.ListTeamMembersByID(context.Background(), 1, 2, opt)
    29  	if err != nil {
    30  		t.Errorf("Teams.ListTeamMembersByID returned error: %v", err)
    31  	}
    32  
    33  	want := []*User{{ID: Int64(1)}}
    34  	if !reflect.DeepEqual(members, want) {
    35  		t.Errorf("Teams.ListTeamMembersByID returned %+v, want %+v", members, want)
    36  	}
    37  }
    38  
    39  func TestTeamsService__ListTeamMembersByID_notFound(t *testing.T) {
    40  	client, mux, _, teardown := setup()
    41  	defer teardown()
    42  
    43  	mux.HandleFunc("/organizations/1/team/2/members", func(w http.ResponseWriter, r *http.Request) {
    44  		testMethod(t, r, "GET")
    45  		testFormValues(t, r, values{"role": "member", "page": "2"})
    46  		w.WriteHeader(http.StatusNotFound)
    47  	})
    48  
    49  	opt := &TeamListTeamMembersOptions{Role: "member", ListOptions: ListOptions{Page: 2}}
    50  	members, resp, err := client.Teams.ListTeamMembersByID(context.Background(), 1, 2, opt)
    51  	if err == nil {
    52  		t.Errorf("Expected HTTP 404 response")
    53  	}
    54  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
    55  		t.Errorf("Teams.ListTeamMembersByID returned status %d, want %d", got, want)
    56  	}
    57  	if members != nil {
    58  		t.Errorf("Teams.ListTeamMembersByID returned %+v, want nil", members)
    59  	}
    60  }
    61  
    62  func TestTeamsService__ListTeamMembersBySlug(t *testing.T) {
    63  	client, mux, _, teardown := setup()
    64  	defer teardown()
    65  
    66  	mux.HandleFunc("/orgs/o/teams/s/members", func(w http.ResponseWriter, r *http.Request) {
    67  		testMethod(t, r, "GET")
    68  		testFormValues(t, r, values{"role": "member", "page": "2"})
    69  		fmt.Fprint(w, `[{"id":1}]`)
    70  	})
    71  
    72  	opt := &TeamListTeamMembersOptions{Role: "member", ListOptions: ListOptions{Page: 2}}
    73  	members, _, err := client.Teams.ListTeamMembersBySlug(context.Background(), "o", "s", opt)
    74  	if err != nil {
    75  		t.Errorf("Teams.ListTeamMembersBySlug returned error: %v", err)
    76  	}
    77  
    78  	want := []*User{{ID: Int64(1)}}
    79  	if !reflect.DeepEqual(members, want) {
    80  		t.Errorf("Teams.ListTeamMembersBySlug returned %+v, want %+v", members, want)
    81  	}
    82  }
    83  
    84  func TestTeamsService__ListTeamMembersBySlug_notFound(t *testing.T) {
    85  	client, mux, _, teardown := setup()
    86  	defer teardown()
    87  
    88  	mux.HandleFunc("/orgs/o/teams/s/members", func(w http.ResponseWriter, r *http.Request) {
    89  		testMethod(t, r, "GET")
    90  		testFormValues(t, r, values{"role": "member", "page": "2"})
    91  		w.WriteHeader(http.StatusNotFound)
    92  	})
    93  
    94  	opt := &TeamListTeamMembersOptions{Role: "member", ListOptions: ListOptions{Page: 2}}
    95  	members, resp, err := client.Teams.ListTeamMembersBySlug(context.Background(), "o", "s", opt)
    96  	if err == nil {
    97  		t.Errorf("Expected HTTP 404 response")
    98  	}
    99  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
   100  		t.Errorf("Teams.ListTeamMembersBySlug returned status %d, want %d", got, want)
   101  	}
   102  	if members != nil {
   103  		t.Errorf("Teams.ListTeamMembersBySlug returned %+v, want nil", members)
   104  	}
   105  }
   106  
   107  func TestTeamsService__ListTeamMembersBySlug_invalidOrg(t *testing.T) {
   108  	client, _, _, teardown := setup()
   109  	defer teardown()
   110  
   111  	_, _, err := client.Teams.ListTeamMembersBySlug(context.Background(), "%", "s", nil)
   112  	testURLParseError(t, err)
   113  }
   114  
   115  func TestTeamsService__GetTeamMembershipByID(t *testing.T) {
   116  	client, mux, _, teardown := setup()
   117  	defer teardown()
   118  
   119  	mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   120  		testMethod(t, r, "GET")
   121  		fmt.Fprint(w, `{"url":"u", "state":"active"}`)
   122  	})
   123  
   124  	membership, _, err := client.Teams.GetTeamMembershipByID(context.Background(), 1, 2, "u")
   125  	if err != nil {
   126  		t.Errorf("Teams.GetTeamMembershipByID returned error: %v", err)
   127  	}
   128  
   129  	want := &Membership{URL: String("u"), State: String("active")}
   130  	if !reflect.DeepEqual(membership, want) {
   131  		t.Errorf("Teams.GetTeamMembershipByID returned %+v, want %+v", membership, want)
   132  	}
   133  }
   134  
   135  func TestTeamsService__GetTeamMembershipByID_notFound(t *testing.T) {
   136  	client, mux, _, teardown := setup()
   137  	defer teardown()
   138  
   139  	mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   140  		testMethod(t, r, "GET")
   141  		w.WriteHeader(http.StatusNotFound)
   142  	})
   143  
   144  	membership, resp, err := client.Teams.GetTeamMembershipByID(context.Background(), 1, 2, "u")
   145  	if err == nil {
   146  		t.Errorf("Expected HTTP 404 response")
   147  	}
   148  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
   149  		t.Errorf("Teams.GetTeamMembershipByID returned status %d, want %d", got, want)
   150  	}
   151  	if membership != nil {
   152  		t.Errorf("Teams.GetTeamMembershipByID returned %+v, want nil", membership)
   153  	}
   154  }
   155  
   156  func TestTeamsService__GetTeamMembershipBySlug(t *testing.T) {
   157  	client, mux, _, teardown := setup()
   158  	defer teardown()
   159  
   160  	mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   161  		testMethod(t, r, "GET")
   162  		fmt.Fprint(w, `{"url":"u", "state":"active"}`)
   163  	})
   164  
   165  	membership, _, err := client.Teams.GetTeamMembershipBySlug(context.Background(), "o", "s", "u")
   166  	if err != nil {
   167  		t.Errorf("Teams.GetTeamMembershipBySlug returned error: %v", err)
   168  	}
   169  
   170  	want := &Membership{URL: String("u"), State: String("active")}
   171  	if !reflect.DeepEqual(membership, want) {
   172  		t.Errorf("Teams.GetTeamMembershipBySlug returned %+v, want %+v", membership, want)
   173  	}
   174  }
   175  
   176  func TestTeamsService__GetTeamMembershipBySlug_notFound(t *testing.T) {
   177  	client, mux, _, teardown := setup()
   178  	defer teardown()
   179  
   180  	mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   181  		testMethod(t, r, "GET")
   182  		w.WriteHeader(http.StatusNotFound)
   183  	})
   184  
   185  	membership, resp, err := client.Teams.GetTeamMembershipBySlug(context.Background(), "o", "s", "u")
   186  	if err == nil {
   187  		t.Errorf("Expected HTTP 404 response")
   188  	}
   189  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
   190  		t.Errorf("Teams.GetTeamMembershipBySlug returned status %d, want %d", got, want)
   191  	}
   192  	if membership != nil {
   193  		t.Errorf("Teams.GetTeamMembershipBySlug returned %+v, want nil", membership)
   194  	}
   195  }
   196  
   197  func TestTeamsService__GetTeamMembershipBySlug_invalidOrg(t *testing.T) {
   198  	client, _, _, teardown := setup()
   199  	defer teardown()
   200  
   201  	_, _, err := client.Teams.GetTeamMembershipBySlug(context.Background(), "%s", "s", "u")
   202  	testURLParseError(t, err)
   203  }
   204  
   205  func TestTeamsService__AddTeamMembershipByID(t *testing.T) {
   206  	client, mux, _, teardown := setup()
   207  	defer teardown()
   208  
   209  	opt := &TeamAddTeamMembershipOptions{Role: "maintainer"}
   210  
   211  	mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   212  		v := new(TeamAddTeamMembershipOptions)
   213  		json.NewDecoder(r.Body).Decode(v)
   214  
   215  		testMethod(t, r, "PUT")
   216  		if !reflect.DeepEqual(v, opt) {
   217  			t.Errorf("Request body = %+v, want %+v", v, opt)
   218  		}
   219  
   220  		fmt.Fprint(w, `{"url":"u", "state":"pending"}`)
   221  	})
   222  
   223  	membership, _, err := client.Teams.AddTeamMembershipByID(context.Background(), 1, 2, "u", opt)
   224  	if err != nil {
   225  		t.Errorf("Teams.AddTeamMembershipByID returned error: %v", err)
   226  	}
   227  
   228  	want := &Membership{URL: String("u"), State: String("pending")}
   229  	if !reflect.DeepEqual(membership, want) {
   230  		t.Errorf("Teams.AddTeamMembershipByID returned %+v, want %+v", membership, want)
   231  	}
   232  }
   233  
   234  func TestTeamsService__AddTeamMembershipByID_notFound(t *testing.T) {
   235  	client, mux, _, teardown := setup()
   236  	defer teardown()
   237  
   238  	opt := &TeamAddTeamMembershipOptions{Role: "maintainer"}
   239  
   240  	mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   241  		v := new(TeamAddTeamMembershipOptions)
   242  		json.NewDecoder(r.Body).Decode(v)
   243  
   244  		testMethod(t, r, "PUT")
   245  		if !reflect.DeepEqual(v, opt) {
   246  			t.Errorf("Request body = %+v, want %+v", v, opt)
   247  		}
   248  
   249  		w.WriteHeader(http.StatusNotFound)
   250  	})
   251  
   252  	membership, resp, err := client.Teams.AddTeamMembershipByID(context.Background(), 1, 2, "u", opt)
   253  	if err == nil {
   254  		t.Errorf("Expected HTTP 404 response")
   255  	}
   256  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
   257  		t.Errorf("Teams.AddTeamMembershipByID returned status %d, want %d", got, want)
   258  	}
   259  	if membership != nil {
   260  		t.Errorf("Teams.AddTeamMembershipByID returned %+v, want nil", membership)
   261  	}
   262  }
   263  
   264  func TestTeamsService__AddTeamMembershipBySlug(t *testing.T) {
   265  	client, mux, _, teardown := setup()
   266  	defer teardown()
   267  
   268  	opt := &TeamAddTeamMembershipOptions{Role: "maintainer"}
   269  
   270  	mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   271  		v := new(TeamAddTeamMembershipOptions)
   272  		json.NewDecoder(r.Body).Decode(v)
   273  
   274  		testMethod(t, r, "PUT")
   275  		if !reflect.DeepEqual(v, opt) {
   276  			t.Errorf("Request body = %+v, want %+v", v, opt)
   277  		}
   278  
   279  		fmt.Fprint(w, `{"url":"u", "state":"pending"}`)
   280  	})
   281  
   282  	membership, _, err := client.Teams.AddTeamMembershipBySlug(context.Background(), "o", "s", "u", opt)
   283  	if err != nil {
   284  		t.Errorf("Teams.AddTeamMembershipBySlug returned error: %v", err)
   285  	}
   286  
   287  	want := &Membership{URL: String("u"), State: String("pending")}
   288  	if !reflect.DeepEqual(membership, want) {
   289  		t.Errorf("Teams.AddTeamMembershipBySlug returned %+v, want %+v", membership, want)
   290  	}
   291  }
   292  
   293  func TestTeamsService__AddTeamMembershipBySlug_notFound(t *testing.T) {
   294  	client, mux, _, teardown := setup()
   295  	defer teardown()
   296  
   297  	opt := &TeamAddTeamMembershipOptions{Role: "maintainer"}
   298  
   299  	mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   300  		v := new(TeamAddTeamMembershipOptions)
   301  		json.NewDecoder(r.Body).Decode(v)
   302  
   303  		testMethod(t, r, "PUT")
   304  		if !reflect.DeepEqual(v, opt) {
   305  			t.Errorf("Request body = %+v, want %+v", v, opt)
   306  		}
   307  
   308  		w.WriteHeader(http.StatusNotFound)
   309  	})
   310  
   311  	membership, resp, err := client.Teams.AddTeamMembershipBySlug(context.Background(), "o", "s", "u", opt)
   312  	if err == nil {
   313  		t.Errorf("Expected HTTP 404 response")
   314  	}
   315  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
   316  		t.Errorf("Teams.AddTeamMembershipBySlug returned status %d, want %d", got, want)
   317  	}
   318  	if membership != nil {
   319  		t.Errorf("Teams.AddTeamMembershipBySlug returned %+v, want nil", membership)
   320  	}
   321  }
   322  
   323  func TestTeamsService__AddTeamMembershipBySlug_invalidOrg(t *testing.T) {
   324  	client, _, _, teardown := setup()
   325  	defer teardown()
   326  
   327  	_, _, err := client.Teams.AddTeamMembershipBySlug(context.Background(), "%", "s", "u", nil)
   328  	testURLParseError(t, err)
   329  }
   330  
   331  func TestTeamsService__RemoveTeamMembershipByID(t *testing.T) {
   332  	client, mux, _, teardown := setup()
   333  	defer teardown()
   334  
   335  	mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   336  		testMethod(t, r, "DELETE")
   337  		w.WriteHeader(http.StatusNoContent)
   338  	})
   339  
   340  	_, err := client.Teams.RemoveTeamMembershipByID(context.Background(), 1, 2, "u")
   341  	if err != nil {
   342  		t.Errorf("Teams.RemoveTeamMembershipByID returned error: %v", err)
   343  	}
   344  }
   345  
   346  func TestTeamsService__RemoveTeamMembershipByID_notFound(t *testing.T) {
   347  	client, mux, _, teardown := setup()
   348  	defer teardown()
   349  
   350  	mux.HandleFunc("/organizations/1/team/2/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   351  		testMethod(t, r, "DELETE")
   352  		w.WriteHeader(http.StatusNotFound)
   353  	})
   354  
   355  	resp, err := client.Teams.RemoveTeamMembershipByID(context.Background(), 1, 2, "u")
   356  	if err == nil {
   357  		t.Errorf("Expected HTTP 404 response")
   358  	}
   359  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
   360  		t.Errorf("Teams.RemoveTeamMembershipByID returned status %d, want %d", got, want)
   361  	}
   362  }
   363  
   364  func TestTeamsService__RemoveTeamMembershipBySlug(t *testing.T) {
   365  	client, mux, _, teardown := setup()
   366  	defer teardown()
   367  
   368  	mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   369  		testMethod(t, r, "DELETE")
   370  		w.WriteHeader(http.StatusNoContent)
   371  	})
   372  
   373  	_, err := client.Teams.RemoveTeamMembershipBySlug(context.Background(), "o", "s", "u")
   374  	if err != nil {
   375  		t.Errorf("Teams.RemoveTeamMembershipBySlug returned error: %v", err)
   376  	}
   377  }
   378  
   379  func TestTeamsService__RemoveTeamMembershipBySlug_notFound(t *testing.T) {
   380  	client, mux, _, teardown := setup()
   381  	defer teardown()
   382  
   383  	mux.HandleFunc("/orgs/o/teams/s/memberships/u", func(w http.ResponseWriter, r *http.Request) {
   384  		testMethod(t, r, "DELETE")
   385  		w.WriteHeader(http.StatusNotFound)
   386  	})
   387  
   388  	resp, err := client.Teams.RemoveTeamMembershipBySlug(context.Background(), "o", "s", "u")
   389  	if err == nil {
   390  		t.Errorf("Expected HTTP 404 response")
   391  	}
   392  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
   393  		t.Errorf("Teams.RemoveTeamMembershipBySlug returned status %d, want %d", got, want)
   394  	}
   395  }
   396  
   397  func TestTeamsService__RemoveTeamMembershipBySlug_invalidOrg(t *testing.T) {
   398  	client, _, _, teardown := setup()
   399  	defer teardown()
   400  
   401  	_, err := client.Teams.RemoveTeamMembershipBySlug(context.Background(), "%", "s", "u")
   402  	testURLParseError(t, err)
   403  }
   404  
   405  func TestTeamsService__ListPendingTeamInvitationsByID(t *testing.T) {
   406  	client, mux, _, teardown := setup()
   407  	defer teardown()
   408  
   409  	mux.HandleFunc("/organizations/1/team/2/invitations", func(w http.ResponseWriter, r *http.Request) {
   410  		testMethod(t, r, "GET")
   411  		testFormValues(t, r, values{"page": "2"})
   412  		fmt.Fprint(w, `[{"id":1}]`)
   413  	})
   414  
   415  	opt := &ListOptions{Page: 2}
   416  	invitations, _, err := client.Teams.ListPendingTeamInvitationsByID(context.Background(), 1, 2, opt)
   417  	if err != nil {
   418  		t.Errorf("Teams.ListPendingTeamInvitationsByID returned error: %v", err)
   419  	}
   420  
   421  	want := []*Invitation{{ID: Int64(1)}}
   422  	if !reflect.DeepEqual(invitations, want) {
   423  		t.Errorf("Teams.ListPendingTeamInvitationsByID returned %+v, want %+v", invitations, want)
   424  	}
   425  }
   426  
   427  func TestTeamsService__ListPendingTeamInvitationsByID_notFound(t *testing.T) {
   428  	client, mux, _, teardown := setup()
   429  	defer teardown()
   430  
   431  	mux.HandleFunc("/organizations/1/team/2/invitations", func(w http.ResponseWriter, r *http.Request) {
   432  		testMethod(t, r, "GET")
   433  		testFormValues(t, r, values{"page": "2"})
   434  		w.WriteHeader(http.StatusNotFound)
   435  	})
   436  
   437  	opt := &ListOptions{Page: 2}
   438  	invitations, resp, err := client.Teams.ListPendingTeamInvitationsByID(context.Background(), 1, 2, opt)
   439  	if err == nil {
   440  		t.Errorf("Expected HTTP 404 response")
   441  	}
   442  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
   443  		t.Errorf("Teams.RemoveTeamMembershipByID returned status %d, want %d", got, want)
   444  	}
   445  	if invitations != nil {
   446  		t.Errorf("Teams.RemoveTeamMembershipByID returned %+v, want nil", invitations)
   447  	}
   448  }
   449  
   450  func TestTeamsService__ListPendingTeamInvitationsBySlug(t *testing.T) {
   451  	client, mux, _, teardown := setup()
   452  	defer teardown()
   453  
   454  	mux.HandleFunc("/orgs/o/teams/s/invitations", func(w http.ResponseWriter, r *http.Request) {
   455  		testMethod(t, r, "GET")
   456  		testFormValues(t, r, values{"page": "2"})
   457  		fmt.Fprint(w, `[{"id":1}]`)
   458  	})
   459  
   460  	opt := &ListOptions{Page: 2}
   461  	invitations, _, err := client.Teams.ListPendingTeamInvitationsBySlug(context.Background(), "o", "s", opt)
   462  	if err != nil {
   463  		t.Errorf("Teams.ListPendingTeamInvitationsByID returned error: %v", err)
   464  	}
   465  
   466  	want := []*Invitation{{ID: Int64(1)}}
   467  	if !reflect.DeepEqual(invitations, want) {
   468  		t.Errorf("Teams.ListPendingTeamInvitationsByID returned %+v, want %+v", invitations, want)
   469  	}
   470  }
   471  
   472  func TestTeamsService__ListPendingTeamInvitationsBySlug_notFound(t *testing.T) {
   473  	client, mux, _, teardown := setup()
   474  	defer teardown()
   475  
   476  	mux.HandleFunc("/orgs/o/teams/s/invitations", func(w http.ResponseWriter, r *http.Request) {
   477  		testMethod(t, r, "GET")
   478  		testFormValues(t, r, values{"page": "2"})
   479  		w.WriteHeader(http.StatusNotFound)
   480  	})
   481  
   482  	opt := &ListOptions{Page: 2}
   483  	invitations, resp, err := client.Teams.ListPendingTeamInvitationsBySlug(context.Background(), "o", "s", opt)
   484  	if err == nil {
   485  		t.Errorf("Expected HTTP 404 response")
   486  	}
   487  	if got, want := resp.Response.StatusCode, http.StatusNotFound; got != want {
   488  		t.Errorf("Teams.RemoveTeamMembershipByID returned status %d, want %d", got, want)
   489  	}
   490  	if invitations != nil {
   491  		t.Errorf("Teams.RemoveTeamMembershipByID returned %+v, want nil", invitations)
   492  	}
   493  }
   494  
   495  func TestTeamsService__ListPendingTeamInvitationsBySlug_invalidOrg(t *testing.T) {
   496  	client, _, _, teardown := setup()
   497  	defer teardown()
   498  
   499  	_, _, err := client.Teams.ListPendingTeamInvitationsBySlug(context.Background(), "%", "s", nil)
   500  	testURLParseError(t, err)
   501  }