github.com/google/go-github/v74@v74.0.0/github/pulls_reviewers_test.go (about)

     1  // Copyright 2017 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  
    14  	"github.com/google/go-cmp/cmp"
    15  )
    16  
    17  func TestReviewersRequest_Marshal(t *testing.T) {
    18  	t.Parallel()
    19  	testJSONMarshal(t, &ReviewersRequest{}, "{}")
    20  
    21  	u := &ReviewersRequest{
    22  		NodeID:        Ptr("n"),
    23  		Reviewers:     []string{"r"},
    24  		TeamReviewers: []string{"t"},
    25  	}
    26  
    27  	want := `{
    28  		"node_id": "n",
    29  		"reviewers": [
    30  			"r"
    31  		],
    32  		"team_reviewers" : [
    33  			"t"
    34  		]
    35  	}`
    36  
    37  	testJSONMarshal(t, u, want)
    38  }
    39  
    40  func TestReviewers_Marshal(t *testing.T) {
    41  	t.Parallel()
    42  	testJSONMarshal(t, &Reviewers{}, "{}")
    43  
    44  	u := &Reviewers{
    45  		Users: []*User{{
    46  			Login:       Ptr("l"),
    47  			ID:          Ptr(int64(1)),
    48  			AvatarURL:   Ptr("a"),
    49  			GravatarID:  Ptr("g"),
    50  			Name:        Ptr("n"),
    51  			Company:     Ptr("c"),
    52  			Blog:        Ptr("b"),
    53  			Location:    Ptr("l"),
    54  			Email:       Ptr("e"),
    55  			Hireable:    Ptr(true),
    56  			PublicRepos: Ptr(1),
    57  			Followers:   Ptr(1),
    58  			Following:   Ptr(1),
    59  			CreatedAt:   &Timestamp{referenceTime},
    60  			URL:         Ptr("u"),
    61  		}},
    62  		Teams: []*Team{{
    63  			ID:              Ptr(int64(1)),
    64  			NodeID:          Ptr("node"),
    65  			Name:            Ptr("n"),
    66  			Description:     Ptr("d"),
    67  			URL:             Ptr("u"),
    68  			Slug:            Ptr("s"),
    69  			Permission:      Ptr("p"),
    70  			Privacy:         Ptr("priv"),
    71  			MembersCount:    Ptr(1),
    72  			ReposCount:      Ptr(1),
    73  			Organization:    nil,
    74  			MembersURL:      Ptr("m"),
    75  			RepositoriesURL: Ptr("r"),
    76  			Parent:          nil,
    77  			LDAPDN:          Ptr("l"),
    78  		}},
    79  	}
    80  
    81  	want := `{
    82  		"users" : [
    83  			{
    84  				"login": "l",
    85  				"id": 1,
    86  				"avatar_url": "a",
    87  				"gravatar_id": "g",
    88  				"name": "n",
    89  				"company": "c",
    90  				"blog": "b",
    91  				"location": "l",
    92  				"email": "e",
    93  				"hireable": true,
    94  				"public_repos": 1,
    95  				"followers": 1,
    96  				"following": 1,
    97  				"created_at": ` + referenceTimeStr + `,
    98  				"url": "u"
    99  			}
   100  		],
   101  		"teams" : [
   102  			{
   103  				"id": 1,
   104  				"node_id": "node",
   105  				"name": "n",
   106  				"description": "d",
   107  				"url": "u",
   108  				"slug": "s",
   109  				"permission": "p",
   110  				"privacy": "priv",
   111  				"members_count": 1,
   112  				"repos_count": 1,
   113  				"members_url": "m",
   114  				"repositories_url": "r",
   115  				"ldap_dn": "l"
   116  			}
   117  		]
   118  	}`
   119  
   120  	testJSONMarshal(t, u, want)
   121  }
   122  
   123  func TestRequestReviewers(t *testing.T) {
   124  	t.Parallel()
   125  	client, mux, _ := setup(t)
   126  
   127  	mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) {
   128  		testMethod(t, r, "POST")
   129  		testBody(t, r, `{"reviewers":["octocat","googlebot"],"team_reviewers":["justice-league","injustice-league"]}`+"\n")
   130  		fmt.Fprint(w, `{"number":1}`)
   131  	})
   132  
   133  	// This returns a PR, unmarshaling of which is tested elsewhere
   134  	ctx := context.Background()
   135  	got, _, err := client.PullRequests.RequestReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league", "injustice-league"}})
   136  	if err != nil {
   137  		t.Errorf("PullRequests.RequestReviewers returned error: %v", err)
   138  	}
   139  	want := &PullRequest{Number: Ptr(1)}
   140  	if !cmp.Equal(got, want) {
   141  		t.Errorf("PullRequests.RequestReviewers returned %+v, want %+v", got, want)
   142  	}
   143  
   144  	const methodName = "RequestReviewers"
   145  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   146  		got, resp, err := client.PullRequests.RequestReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league", "injustice-league"}})
   147  		if got != nil {
   148  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   149  		}
   150  		return resp, err
   151  	})
   152  }
   153  
   154  func TestRemoveReviewers(t *testing.T) {
   155  	t.Parallel()
   156  	client, mux, _ := setup(t)
   157  
   158  	mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(_ http.ResponseWriter, r *http.Request) {
   159  		testMethod(t, r, "DELETE")
   160  		testBody(t, r, `{"reviewers":["octocat","googlebot"],"team_reviewers":["justice-league"]}`+"\n")
   161  	})
   162  
   163  	ctx := context.Background()
   164  	_, err := client.PullRequests.RemoveReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league"}})
   165  	if err != nil {
   166  		t.Errorf("PullRequests.RemoveReviewers returned error: %v", err)
   167  	}
   168  
   169  	const methodName = "RemoveReviewers"
   170  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   171  		return client.PullRequests.RemoveReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league"}})
   172  	})
   173  }
   174  
   175  func TestRemoveReviewers_teamsOnly(t *testing.T) {
   176  	t.Parallel()
   177  	client, mux, _ := setup(t)
   178  
   179  	mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(_ http.ResponseWriter, r *http.Request) {
   180  		testMethod(t, r, "DELETE")
   181  		testBody(t, r, `{"reviewers":[],"team_reviewers":["justice-league"]}`+"\n")
   182  	})
   183  
   184  	ctx := context.Background()
   185  	_, err := client.PullRequests.RemoveReviewers(ctx, "o", "r", 1, ReviewersRequest{TeamReviewers: []string{"justice-league"}})
   186  	if err != nil {
   187  		t.Errorf("PullRequests.RemoveReviewers returned error: %v", err)
   188  	}
   189  
   190  	const methodName = "RemoveReviewers"
   191  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   192  		return client.PullRequests.RemoveReviewers(ctx, "o", "r", 1, ReviewersRequest{TeamReviewers: []string{"justice-league"}})
   193  	})
   194  }
   195  
   196  func TestListReviewers(t *testing.T) {
   197  	t.Parallel()
   198  	client, mux, _ := setup(t)
   199  
   200  	mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) {
   201  		testMethod(t, r, "GET")
   202  		fmt.Fprint(w, `{"users":[{"login":"octocat","id":1}],"teams":[{"id":1,"name":"Justice League"}]}`)
   203  	})
   204  
   205  	ctx := context.Background()
   206  	got, _, err := client.PullRequests.ListReviewers(ctx, "o", "r", 1, nil)
   207  	if err != nil {
   208  		t.Errorf("PullRequests.ListReviewers returned error: %v", err)
   209  	}
   210  
   211  	want := &Reviewers{
   212  		Users: []*User{
   213  			{
   214  				Login: Ptr("octocat"),
   215  				ID:    Ptr(int64(1)),
   216  			},
   217  		},
   218  		Teams: []*Team{
   219  			{
   220  				ID:   Ptr(int64(1)),
   221  				Name: Ptr("Justice League"),
   222  			},
   223  		},
   224  	}
   225  	if !cmp.Equal(got, want) {
   226  		t.Errorf("PullRequests.ListReviewers returned %+v, want %+v", got, want)
   227  	}
   228  
   229  	const methodName = "ListReviewers"
   230  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   231  		got, resp, err := client.PullRequests.ListReviewers(ctx, "o", "r", 1, nil)
   232  		if got != nil {
   233  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   234  		}
   235  		return resp, err
   236  	})
   237  }
   238  
   239  func TestListReviewers_withOptions(t *testing.T) {
   240  	t.Parallel()
   241  	client, mux, _ := setup(t)
   242  
   243  	mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) {
   244  		testMethod(t, r, "GET")
   245  		testFormValues(t, r, values{
   246  			"page": "2",
   247  		})
   248  		fmt.Fprint(w, `{}`)
   249  	})
   250  
   251  	ctx := context.Background()
   252  	_, _, err := client.PullRequests.ListReviewers(ctx, "o", "r", 1, &ListOptions{Page: 2})
   253  	if err != nil {
   254  		t.Errorf("PullRequests.ListReviewers returned error: %v", err)
   255  	}
   256  
   257  	const methodName = "ListReviewers"
   258  	testBadOptions(t, methodName, func() (err error) {
   259  		_, _, err = client.PullRequests.ListReviewers(ctx, "\n", "\n", 1, &ListOptions{Page: 2})
   260  		return err
   261  	})
   262  
   263  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   264  		got, resp, err := client.PullRequests.ListReviewers(ctx, "o", "r", 1, &ListOptions{Page: 2})
   265  		if got != nil {
   266  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   267  		}
   268  		return resp, err
   269  	})
   270  }