...

Source file src/github.com/google/go-github/v47/github/issues_assignees_test.go

Documentation: github.com/google/go-github/v47/github

     1  // Copyright 2013 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  	"testing"
    14  
    15  	"github.com/google/go-cmp/cmp"
    16  )
    17  
    18  func TestIssuesService_ListAssignees(t *testing.T) {
    19  	client, mux, _, teardown := setup()
    20  	defer teardown()
    21  
    22  	mux.HandleFunc("/repos/o/r/assignees", func(w http.ResponseWriter, r *http.Request) {
    23  		testMethod(t, r, "GET")
    24  		testFormValues(t, r, values{"page": "2"})
    25  		fmt.Fprint(w, `[{"id":1}]`)
    26  	})
    27  
    28  	opt := &ListOptions{Page: 2}
    29  	ctx := context.Background()
    30  	assignees, _, err := client.Issues.ListAssignees(ctx, "o", "r", opt)
    31  	if err != nil {
    32  		t.Errorf("Issues.ListAssignees returned error: %v", err)
    33  	}
    34  
    35  	want := []*User{{ID: Int64(1)}}
    36  	if !cmp.Equal(assignees, want) {
    37  		t.Errorf("Issues.ListAssignees returned %+v, want %+v", assignees, want)
    38  	}
    39  
    40  	const methodName = "ListAssignees"
    41  	testBadOptions(t, methodName, func() (err error) {
    42  		_, _, err = client.Issues.ListAssignees(ctx, "\n", "\n", opt)
    43  		return err
    44  	})
    45  
    46  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    47  		got, resp, err := client.Issues.ListAssignees(ctx, "o", "r", opt)
    48  		if got != nil {
    49  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    50  		}
    51  		return resp, err
    52  	})
    53  }
    54  
    55  func TestIssuesService_ListAssignees_invalidOwner(t *testing.T) {
    56  	client, _, _, teardown := setup()
    57  	defer teardown()
    58  
    59  	ctx := context.Background()
    60  	_, _, err := client.Issues.ListAssignees(ctx, "%", "r", nil)
    61  	testURLParseError(t, err)
    62  }
    63  
    64  func TestIssuesService_IsAssignee_true(t *testing.T) {
    65  	client, mux, _, teardown := setup()
    66  	defer teardown()
    67  
    68  	mux.HandleFunc("/repos/o/r/assignees/u", func(w http.ResponseWriter, r *http.Request) {
    69  		testMethod(t, r, "GET")
    70  	})
    71  
    72  	ctx := context.Background()
    73  	assignee, _, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
    74  	if err != nil {
    75  		t.Errorf("Issues.IsAssignee returned error: %v", err)
    76  	}
    77  	if want := true; assignee != want {
    78  		t.Errorf("Issues.IsAssignee returned %+v, want %+v", assignee, want)
    79  	}
    80  
    81  	const methodName = "IsAssignee"
    82  	testBadOptions(t, methodName, func() (err error) {
    83  		_, _, err = client.Issues.IsAssignee(ctx, "\n", "\n", "\n")
    84  		return err
    85  	})
    86  
    87  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    88  		got, resp, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
    89  		if got {
    90  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want false", methodName, got)
    91  		}
    92  		return resp, err
    93  	})
    94  }
    95  
    96  func TestIssuesService_IsAssignee_false(t *testing.T) {
    97  	client, mux, _, teardown := setup()
    98  	defer teardown()
    99  
   100  	mux.HandleFunc("/repos/o/r/assignees/u", func(w http.ResponseWriter, r *http.Request) {
   101  		testMethod(t, r, "GET")
   102  		w.WriteHeader(http.StatusNotFound)
   103  	})
   104  
   105  	ctx := context.Background()
   106  	assignee, _, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
   107  	if err != nil {
   108  		t.Errorf("Issues.IsAssignee returned error: %v", err)
   109  	}
   110  	if want := false; assignee != want {
   111  		t.Errorf("Issues.IsAssignee returned %+v, want %+v", assignee, want)
   112  	}
   113  
   114  	const methodName = "IsAssignee"
   115  	testBadOptions(t, methodName, func() (err error) {
   116  		_, _, err = client.Issues.IsAssignee(ctx, "\n", "\n", "\n")
   117  		return err
   118  	})
   119  
   120  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   121  		got, resp, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
   122  		if got {
   123  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want false", methodName, got)
   124  		}
   125  		return resp, err
   126  	})
   127  }
   128  
   129  func TestIssuesService_IsAssignee_error(t *testing.T) {
   130  	client, mux, _, teardown := setup()
   131  	defer teardown()
   132  
   133  	mux.HandleFunc("/repos/o/r/assignees/u", func(w http.ResponseWriter, r *http.Request) {
   134  		testMethod(t, r, "GET")
   135  		http.Error(w, "BadRequest", http.StatusBadRequest)
   136  	})
   137  
   138  	ctx := context.Background()
   139  	assignee, _, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
   140  	if err == nil {
   141  		t.Errorf("Expected HTTP 400 response")
   142  	}
   143  	if want := false; assignee != want {
   144  		t.Errorf("Issues.IsAssignee returned %+v, want %+v", assignee, want)
   145  	}
   146  
   147  	const methodName = "IsAssignee"
   148  	testBadOptions(t, methodName, func() (err error) {
   149  		_, _, err = client.Issues.IsAssignee(ctx, "o", "r", "u")
   150  		return err
   151  	})
   152  
   153  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   154  		got, resp, err := client.Issues.IsAssignee(ctx, "o", "r", "u")
   155  		if got {
   156  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want false", methodName, got)
   157  		}
   158  		return resp, err
   159  	})
   160  }
   161  
   162  func TestIssuesService_IsAssignee_invalidOwner(t *testing.T) {
   163  	client, _, _, teardown := setup()
   164  	defer teardown()
   165  
   166  	ctx := context.Background()
   167  	_, _, err := client.Issues.IsAssignee(ctx, "%", "r", "u")
   168  	testURLParseError(t, err)
   169  }
   170  
   171  func TestIssuesService_AddAssignees(t *testing.T) {
   172  	client, mux, _, teardown := setup()
   173  	defer teardown()
   174  
   175  	mux.HandleFunc("/repos/o/r/issues/1/assignees", func(w http.ResponseWriter, r *http.Request) {
   176  		var assignees struct {
   177  			Assignees []string `json:"assignees,omitempty"`
   178  		}
   179  		json.NewDecoder(r.Body).Decode(&assignees)
   180  
   181  		testMethod(t, r, "POST")
   182  		want := []string{"user1", "user2"}
   183  		if !cmp.Equal(assignees.Assignees, want) {
   184  			t.Errorf("assignees = %+v, want %+v", assignees, want)
   185  		}
   186  		fmt.Fprint(w, `{"number":1,"assignees":[{"login":"user1"},{"login":"user2"}]}`)
   187  	})
   188  
   189  	ctx := context.Background()
   190  	got, _, err := client.Issues.AddAssignees(ctx, "o", "r", 1, []string{"user1", "user2"})
   191  	if err != nil {
   192  		t.Errorf("Issues.AddAssignees returned error: %v", err)
   193  	}
   194  
   195  	want := &Issue{Number: Int(1), Assignees: []*User{{Login: String("user1")}, {Login: String("user2")}}}
   196  	if !cmp.Equal(got, want) {
   197  		t.Errorf("Issues.AddAssignees = %+v, want %+v", got, want)
   198  	}
   199  
   200  	const methodName = "AddAssignees"
   201  	testBadOptions(t, methodName, func() (err error) {
   202  		_, _, err = client.Issues.AddAssignees(ctx, "\n", "\n", -1, []string{"\n", "\n"})
   203  		return err
   204  	})
   205  
   206  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   207  		got, resp, err := client.Issues.AddAssignees(ctx, "o", "r", 1, []string{"user1", "user2"})
   208  		if got != nil {
   209  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   210  		}
   211  		return resp, err
   212  	})
   213  }
   214  
   215  func TestIssuesService_RemoveAssignees(t *testing.T) {
   216  	client, mux, _, teardown := setup()
   217  	defer teardown()
   218  
   219  	mux.HandleFunc("/repos/o/r/issues/1/assignees", func(w http.ResponseWriter, r *http.Request) {
   220  		var assignees struct {
   221  			Assignees []string `json:"assignees,omitempty"`
   222  		}
   223  		json.NewDecoder(r.Body).Decode(&assignees)
   224  
   225  		testMethod(t, r, "DELETE")
   226  		want := []string{"user1", "user2"}
   227  		if !cmp.Equal(assignees.Assignees, want) {
   228  			t.Errorf("assignees = %+v, want %+v", assignees, want)
   229  		}
   230  		fmt.Fprint(w, `{"number":1,"assignees":[]}`)
   231  	})
   232  
   233  	ctx := context.Background()
   234  	got, _, err := client.Issues.RemoveAssignees(ctx, "o", "r", 1, []string{"user1", "user2"})
   235  	if err != nil {
   236  		t.Errorf("Issues.RemoveAssignees returned error: %v", err)
   237  	}
   238  
   239  	want := &Issue{Number: Int(1), Assignees: []*User{}}
   240  	if !cmp.Equal(got, want) {
   241  		t.Errorf("Issues.RemoveAssignees = %+v, want %+v", got, want)
   242  	}
   243  
   244  	const methodName = "RemoveAssignees"
   245  	testBadOptions(t, methodName, func() (err error) {
   246  		_, _, err = client.Issues.RemoveAssignees(ctx, "\n", "\n", -1, []string{"\n", "\n"})
   247  		return err
   248  	})
   249  
   250  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   251  		got, resp, err := client.Issues.RemoveAssignees(ctx, "o", "r", 1, []string{"user1", "user2"})
   252  		if got != nil {
   253  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   254  		}
   255  		return resp, err
   256  	})
   257  }
   258  

View as plain text