github.com/google/go-github/v33@v33.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  	"reflect"
    13  	"testing"
    14  	"time"
    15  )
    16  
    17  func TestRequestReviewers(t *testing.T) {
    18  	client, mux, _, teardown := setup()
    19  	defer teardown()
    20  
    21  	mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) {
    22  		testMethod(t, r, "POST")
    23  		testBody(t, r, `{"reviewers":["octocat","googlebot"],"team_reviewers":["justice-league","injustice-league"]}`+"\n")
    24  		fmt.Fprint(w, `{"number":1}`)
    25  	})
    26  
    27  	// This returns a PR, unmarshalling of which is tested elsewhere
    28  	ctx := context.Background()
    29  	got, _, err := client.PullRequests.RequestReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league", "injustice-league"}})
    30  	if err != nil {
    31  		t.Errorf("PullRequests.RequestReviewers returned error: %v", err)
    32  	}
    33  	want := &PullRequest{Number: Int(1)}
    34  	if !reflect.DeepEqual(got, want) {
    35  		t.Errorf("PullRequests.RequestReviewers returned %+v, want %+v", got, want)
    36  	}
    37  
    38  	// Test s.client.NewRequest failure
    39  	client.BaseURL.Path = ""
    40  	got, resp, err := client.PullRequests.RequestReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league", "injustice-league"}})
    41  	if got != nil {
    42  		t.Errorf("client.BaseURL.Path='' RequestReviewers = %#v, want nil", got)
    43  	}
    44  	if resp != nil {
    45  		t.Errorf("client.BaseURL.Path='' RequestReviewers resp = %#v, want nil", resp)
    46  	}
    47  	if err == nil {
    48  		t.Error("client.BaseURL.Path='' RequestReviewers err = nil, want error")
    49  	}
    50  
    51  	// Test s.client.Do failure
    52  	client.BaseURL.Path = "/api-v3/"
    53  	client.rateLimits[0].Reset.Time = time.Now().Add(10 * time.Minute)
    54  	got, resp, err = client.PullRequests.RequestReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league", "injustice-league"}})
    55  	if got != nil {
    56  		t.Errorf("rate.Reset.Time > now RequestReviewers = %#v, want nil", got)
    57  	}
    58  	if want := http.StatusForbidden; resp == nil || resp.Response.StatusCode != want {
    59  		t.Errorf("rate.Reset.Time > now RequestReviewers resp = %#v, want StatusCode=%v", resp.Response, want)
    60  	}
    61  	if err == nil {
    62  		t.Error("rate.Reset.Time > now RequestReviewers err = nil, want error")
    63  	}
    64  }
    65  
    66  func TestRemoveReviewers(t *testing.T) {
    67  	client, mux, _, teardown := setup()
    68  	defer teardown()
    69  
    70  	mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) {
    71  		testMethod(t, r, "DELETE")
    72  		testBody(t, r, `{"reviewers":["octocat","googlebot"],"team_reviewers":["justice-league"]}`+"\n")
    73  	})
    74  
    75  	ctx := context.Background()
    76  	_, err := client.PullRequests.RemoveReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league"}})
    77  	if err != nil {
    78  		t.Errorf("PullRequests.RemoveReviewers returned error: %v", err)
    79  	}
    80  
    81  	// Test s.client.NewRequest failure
    82  	client.BaseURL.Path = ""
    83  	resp, err := client.PullRequests.RemoveReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league"}})
    84  	if resp != nil {
    85  		t.Errorf("client.BaseURL.Path='' RemoveReviewers resp = %#v, want nil", resp)
    86  	}
    87  	if err == nil {
    88  		t.Error("client.BaseURL.Path='' RemoveReviewers err = nil, want error")
    89  	}
    90  }
    91  
    92  func TestListReviewers(t *testing.T) {
    93  	client, mux, _, teardown := setup()
    94  	defer teardown()
    95  
    96  	mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) {
    97  		testMethod(t, r, "GET")
    98  		fmt.Fprint(w, `{"users":[{"login":"octocat","id":1}],"teams":[{"id":1,"name":"Justice League"}]}`)
    99  	})
   100  
   101  	ctx := context.Background()
   102  	got, _, err := client.PullRequests.ListReviewers(ctx, "o", "r", 1, nil)
   103  	if err != nil {
   104  		t.Errorf("PullRequests.ListReviewers returned error: %v", err)
   105  	}
   106  
   107  	want := &Reviewers{
   108  		Users: []*User{
   109  			{
   110  				Login: String("octocat"),
   111  				ID:    Int64(1),
   112  			},
   113  		},
   114  		Teams: []*Team{
   115  			{
   116  				ID:   Int64(1),
   117  				Name: String("Justice League"),
   118  			},
   119  		},
   120  	}
   121  	if !reflect.DeepEqual(got, want) {
   122  		t.Errorf("PullRequests.ListReviewers returned %+v, want %+v", got, want)
   123  	}
   124  
   125  	// Test s.client.NewRequest failure
   126  	client.BaseURL.Path = ""
   127  	got, resp, err := client.PullRequests.ListReviewers(ctx, "o", "r", 1, nil)
   128  	if got != nil {
   129  		t.Errorf("client.BaseURL.Path='' ListReviewers = %#v, want nil", got)
   130  	}
   131  	if resp != nil {
   132  		t.Errorf("client.BaseURL.Path='' ListReviewers resp = %#v, want nil", resp)
   133  	}
   134  	if err == nil {
   135  		t.Error("client.BaseURL.Path='' ListReviewers err = nil, want error")
   136  	}
   137  
   138  	// Test s.client.Do failure
   139  	client.BaseURL.Path = "/api-v3/"
   140  	client.rateLimits[0].Reset.Time = time.Now().Add(10 * time.Minute)
   141  	got, resp, err = client.PullRequests.ListReviewers(ctx, "o", "r", 1, nil)
   142  	if got != nil {
   143  		t.Errorf("rate.Reset.Time > now ListReviewers = %#v, want nil", got)
   144  	}
   145  	if want := http.StatusForbidden; resp == nil || resp.Response.StatusCode != want {
   146  		t.Errorf("rate.Reset.Time > now ListReviewers resp = %#v, want StatusCode=%v", resp.Response, want)
   147  	}
   148  	if err == nil {
   149  		t.Error("rate.Reset.Time > now ListReviewers err = nil, want error")
   150  	}
   151  }
   152  
   153  func TestListReviewers_withOptions(t *testing.T) {
   154  	client, mux, _, teardown := setup()
   155  	defer teardown()
   156  
   157  	mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) {
   158  		testMethod(t, r, "GET")
   159  		testFormValues(t, r, values{
   160  			"page": "2",
   161  		})
   162  		fmt.Fprint(w, `{}`)
   163  	})
   164  
   165  	_, _, err := client.PullRequests.ListReviewers(context.Background(), "o", "r", 1, &ListOptions{Page: 2})
   166  	if err != nil {
   167  		t.Errorf("PullRequests.ListReviewers returned error: %v", err)
   168  	}
   169  
   170  	// Test addOptions failure
   171  	_, _, err = client.PullRequests.ListReviewers(context.Background(), "\n", "\n", 1, &ListOptions{Page: 2})
   172  	if err == nil {
   173  		t.Error("bad options ListReviewers err = nil, want error")
   174  	}
   175  
   176  }