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

     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  	"fmt"
    11  	"net/http"
    12  	"reflect"
    13  	"testing"
    14  )
    15  
    16  func TestUsersService_ListFollowers_authenticatedUser(t *testing.T) {
    17  	client, mux, _, teardown := setup()
    18  	defer teardown()
    19  
    20  	mux.HandleFunc("/user/followers", func(w http.ResponseWriter, r *http.Request) {
    21  		testMethod(t, r, "GET")
    22  		testFormValues(t, r, values{"page": "2"})
    23  		fmt.Fprint(w, `[{"id":1}]`)
    24  	})
    25  
    26  	opt := &ListOptions{Page: 2}
    27  	users, _, err := client.Users.ListFollowers(context.Background(), "", opt)
    28  	if err != nil {
    29  		t.Errorf("Users.ListFollowers returned error: %v", err)
    30  	}
    31  
    32  	want := []*User{{ID: Int64(1)}}
    33  	if !reflect.DeepEqual(users, want) {
    34  		t.Errorf("Users.ListFollowers returned %+v, want %+v", users, want)
    35  	}
    36  }
    37  
    38  func TestUsersService_ListFollowers_specifiedUser(t *testing.T) {
    39  	client, mux, _, teardown := setup()
    40  	defer teardown()
    41  
    42  	mux.HandleFunc("/users/u/followers", func(w http.ResponseWriter, r *http.Request) {
    43  		testMethod(t, r, "GET")
    44  		fmt.Fprint(w, `[{"id":1}]`)
    45  	})
    46  
    47  	users, _, err := client.Users.ListFollowers(context.Background(), "u", nil)
    48  	if err != nil {
    49  		t.Errorf("Users.ListFollowers returned error: %v", err)
    50  	}
    51  
    52  	want := []*User{{ID: Int64(1)}}
    53  	if !reflect.DeepEqual(users, want) {
    54  		t.Errorf("Users.ListFollowers returned %+v, want %+v", users, want)
    55  	}
    56  }
    57  
    58  func TestUsersService_ListFollowers_invalidUser(t *testing.T) {
    59  	client, _, _, teardown := setup()
    60  	defer teardown()
    61  
    62  	_, _, err := client.Users.ListFollowers(context.Background(), "%", nil)
    63  	testURLParseError(t, err)
    64  }
    65  
    66  func TestUsersService_ListFollowing_authenticatedUser(t *testing.T) {
    67  	client, mux, _, teardown := setup()
    68  	defer teardown()
    69  
    70  	mux.HandleFunc("/user/following", func(w http.ResponseWriter, r *http.Request) {
    71  		testMethod(t, r, "GET")
    72  		testFormValues(t, r, values{"page": "2"})
    73  		fmt.Fprint(w, `[{"id":1}]`)
    74  	})
    75  
    76  	opts := &ListOptions{Page: 2}
    77  	users, _, err := client.Users.ListFollowing(context.Background(), "", opts)
    78  	if err != nil {
    79  		t.Errorf("Users.ListFollowing returned error: %v", err)
    80  	}
    81  
    82  	want := []*User{{ID: Int64(1)}}
    83  	if !reflect.DeepEqual(users, want) {
    84  		t.Errorf("Users.ListFollowing returned %+v, want %+v", users, want)
    85  	}
    86  }
    87  
    88  func TestUsersService_ListFollowing_specifiedUser(t *testing.T) {
    89  	client, mux, _, teardown := setup()
    90  	defer teardown()
    91  
    92  	mux.HandleFunc("/users/u/following", func(w http.ResponseWriter, r *http.Request) {
    93  		testMethod(t, r, "GET")
    94  		fmt.Fprint(w, `[{"id":1}]`)
    95  	})
    96  
    97  	users, _, err := client.Users.ListFollowing(context.Background(), "u", nil)
    98  	if err != nil {
    99  		t.Errorf("Users.ListFollowing returned error: %v", err)
   100  	}
   101  
   102  	want := []*User{{ID: Int64(1)}}
   103  	if !reflect.DeepEqual(users, want) {
   104  		t.Errorf("Users.ListFollowing returned %+v, want %+v", users, want)
   105  	}
   106  }
   107  
   108  func TestUsersService_ListFollowing_invalidUser(t *testing.T) {
   109  	client, _, _, teardown := setup()
   110  	defer teardown()
   111  
   112  	_, _, err := client.Users.ListFollowing(context.Background(), "%", nil)
   113  	testURLParseError(t, err)
   114  }
   115  
   116  func TestUsersService_IsFollowing_authenticatedUser(t *testing.T) {
   117  	client, mux, _, teardown := setup()
   118  	defer teardown()
   119  
   120  	mux.HandleFunc("/user/following/t", func(w http.ResponseWriter, r *http.Request) {
   121  		testMethod(t, r, "GET")
   122  		w.WriteHeader(http.StatusNoContent)
   123  	})
   124  
   125  	following, _, err := client.Users.IsFollowing(context.Background(), "", "t")
   126  	if err != nil {
   127  		t.Errorf("Users.IsFollowing returned error: %v", err)
   128  	}
   129  	if want := true; following != want {
   130  		t.Errorf("Users.IsFollowing returned %+v, want %+v", following, want)
   131  	}
   132  }
   133  
   134  func TestUsersService_IsFollowing_specifiedUser(t *testing.T) {
   135  	client, mux, _, teardown := setup()
   136  	defer teardown()
   137  
   138  	mux.HandleFunc("/users/u/following/t", func(w http.ResponseWriter, r *http.Request) {
   139  		testMethod(t, r, "GET")
   140  		w.WriteHeader(http.StatusNoContent)
   141  	})
   142  
   143  	following, _, err := client.Users.IsFollowing(context.Background(), "u", "t")
   144  	if err != nil {
   145  		t.Errorf("Users.IsFollowing returned error: %v", err)
   146  	}
   147  	if want := true; following != want {
   148  		t.Errorf("Users.IsFollowing returned %+v, want %+v", following, want)
   149  	}
   150  }
   151  
   152  func TestUsersService_IsFollowing_false(t *testing.T) {
   153  	client, mux, _, teardown := setup()
   154  	defer teardown()
   155  
   156  	mux.HandleFunc("/users/u/following/t", func(w http.ResponseWriter, r *http.Request) {
   157  		testMethod(t, r, "GET")
   158  		w.WriteHeader(http.StatusNotFound)
   159  	})
   160  
   161  	following, _, err := client.Users.IsFollowing(context.Background(), "u", "t")
   162  	if err != nil {
   163  		t.Errorf("Users.IsFollowing returned error: %v", err)
   164  	}
   165  	if want := false; following != want {
   166  		t.Errorf("Users.IsFollowing returned %+v, want %+v", following, want)
   167  	}
   168  }
   169  
   170  func TestUsersService_IsFollowing_error(t *testing.T) {
   171  	client, mux, _, teardown := setup()
   172  	defer teardown()
   173  
   174  	mux.HandleFunc("/users/u/following/t", func(w http.ResponseWriter, r *http.Request) {
   175  		testMethod(t, r, "GET")
   176  		http.Error(w, "BadRequest", http.StatusBadRequest)
   177  	})
   178  
   179  	following, _, err := client.Users.IsFollowing(context.Background(), "u", "t")
   180  	if err == nil {
   181  		t.Errorf("Expected HTTP 400 response")
   182  	}
   183  	if want := false; following != want {
   184  		t.Errorf("Users.IsFollowing returned %+v, want %+v", following, want)
   185  	}
   186  }
   187  
   188  func TestUsersService_IsFollowing_invalidUser(t *testing.T) {
   189  	client, _, _, teardown := setup()
   190  	defer teardown()
   191  
   192  	_, _, err := client.Users.IsFollowing(context.Background(), "%", "%")
   193  	testURLParseError(t, err)
   194  }
   195  
   196  func TestUsersService_Follow(t *testing.T) {
   197  	client, mux, _, teardown := setup()
   198  	defer teardown()
   199  
   200  	mux.HandleFunc("/user/following/u", func(w http.ResponseWriter, r *http.Request) {
   201  		testMethod(t, r, "PUT")
   202  	})
   203  
   204  	_, err := client.Users.Follow(context.Background(), "u")
   205  	if err != nil {
   206  		t.Errorf("Users.Follow returned error: %v", err)
   207  	}
   208  }
   209  
   210  func TestUsersService_Follow_invalidUser(t *testing.T) {
   211  	client, _, _, teardown := setup()
   212  	defer teardown()
   213  
   214  	_, err := client.Users.Follow(context.Background(), "%")
   215  	testURLParseError(t, err)
   216  }
   217  
   218  func TestUsersService_Unfollow(t *testing.T) {
   219  	client, mux, _, teardown := setup()
   220  	defer teardown()
   221  
   222  	mux.HandleFunc("/user/following/u", func(w http.ResponseWriter, r *http.Request) {
   223  		testMethod(t, r, "DELETE")
   224  	})
   225  
   226  	_, err := client.Users.Unfollow(context.Background(), "u")
   227  	if err != nil {
   228  		t.Errorf("Users.Follow returned error: %v", err)
   229  	}
   230  }
   231  
   232  func TestUsersService_Unfollow_invalidUser(t *testing.T) {
   233  	client, _, _, teardown := setup()
   234  	defer teardown()
   235  
   236  	_, err := client.Users.Unfollow(context.Background(), "%")
   237  	testURLParseError(t, err)
   238  }