github.com/google/go-github/v33@v33.0.0/github/users_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  	"encoding/json"
    11  	"fmt"
    12  	"net/http"
    13  	"reflect"
    14  	"testing"
    15  )
    16  
    17  func TestUser_marshall(t *testing.T) {
    18  	testJSONMarshal(t, &User{}, "{}")
    19  
    20  	u := &User{
    21  		Login:           String("l"),
    22  		ID:              Int64(1),
    23  		URL:             String("u"),
    24  		AvatarURL:       String("a"),
    25  		GravatarID:      String("g"),
    26  		Name:            String("n"),
    27  		Company:         String("c"),
    28  		Blog:            String("b"),
    29  		Location:        String("l"),
    30  		Email:           String("e"),
    31  		Hireable:        Bool(true),
    32  		Bio:             String("b"),
    33  		TwitterUsername: String("t"),
    34  		PublicRepos:     Int(1),
    35  		Followers:       Int(1),
    36  		Following:       Int(1),
    37  		CreatedAt:       &Timestamp{referenceTime},
    38  		SuspendedAt:     &Timestamp{referenceTime},
    39  	}
    40  	want := `{
    41  		"login": "l",
    42  		"id": 1,
    43  		"avatar_url": "a",
    44  		"gravatar_id": "g",
    45  		"name": "n",
    46  		"company": "c",
    47  		"blog": "b",
    48  		"location": "l",
    49  		"email": "e",
    50  		"hireable": true,
    51  		"bio": "b",
    52  		"twitter_username": "t",
    53  		"public_repos": 1,
    54  		"followers": 1,
    55  		"following": 1,
    56  		"created_at": ` + referenceTimeStr + `,
    57  		"suspended_at": ` + referenceTimeStr + `,
    58  		"url": "u"
    59  	}`
    60  	testJSONMarshal(t, u, want)
    61  }
    62  
    63  func TestUsersService_Get_authenticatedUser(t *testing.T) {
    64  	client, mux, _, teardown := setup()
    65  	defer teardown()
    66  
    67  	mux.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) {
    68  		testMethod(t, r, "GET")
    69  		fmt.Fprint(w, `{"id":1}`)
    70  	})
    71  
    72  	user, _, err := client.Users.Get(context.Background(), "")
    73  	if err != nil {
    74  		t.Errorf("Users.Get returned error: %v", err)
    75  	}
    76  
    77  	want := &User{ID: Int64(1)}
    78  	if !reflect.DeepEqual(user, want) {
    79  		t.Errorf("Users.Get returned %+v, want %+v", user, want)
    80  	}
    81  }
    82  
    83  func TestUsersService_Get_specifiedUser(t *testing.T) {
    84  	client, mux, _, teardown := setup()
    85  	defer teardown()
    86  
    87  	mux.HandleFunc("/users/u", func(w http.ResponseWriter, r *http.Request) {
    88  		testMethod(t, r, "GET")
    89  		fmt.Fprint(w, `{"id":1}`)
    90  	})
    91  
    92  	user, _, err := client.Users.Get(context.Background(), "u")
    93  	if err != nil {
    94  		t.Errorf("Users.Get returned error: %v", err)
    95  	}
    96  
    97  	want := &User{ID: Int64(1)}
    98  	if !reflect.DeepEqual(user, want) {
    99  		t.Errorf("Users.Get returned %+v, want %+v", user, want)
   100  	}
   101  }
   102  
   103  func TestUsersService_Get_invalidUser(t *testing.T) {
   104  	client, _, _, teardown := setup()
   105  	defer teardown()
   106  
   107  	_, _, err := client.Users.Get(context.Background(), "%")
   108  	testURLParseError(t, err)
   109  }
   110  
   111  func TestUsersService_GetByID(t *testing.T) {
   112  	client, mux, _, teardown := setup()
   113  	defer teardown()
   114  
   115  	mux.HandleFunc("/user/1", func(w http.ResponseWriter, r *http.Request) {
   116  		testMethod(t, r, "GET")
   117  		fmt.Fprint(w, `{"id":1}`)
   118  	})
   119  
   120  	user, _, err := client.Users.GetByID(context.Background(), 1)
   121  	if err != nil {
   122  		t.Fatalf("Users.GetByID returned error: %v", err)
   123  	}
   124  
   125  	want := &User{ID: Int64(1)}
   126  	if !reflect.DeepEqual(user, want) {
   127  		t.Errorf("Users.GetByID returned %+v, want %+v", user, want)
   128  	}
   129  }
   130  
   131  func TestUsersService_Edit(t *testing.T) {
   132  	client, mux, _, teardown := setup()
   133  	defer teardown()
   134  
   135  	input := &User{Name: String("n")}
   136  
   137  	mux.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) {
   138  		v := new(User)
   139  		json.NewDecoder(r.Body).Decode(v)
   140  
   141  		testMethod(t, r, "PATCH")
   142  		if !reflect.DeepEqual(v, input) {
   143  			t.Errorf("Request body = %+v, want %+v", v, input)
   144  		}
   145  
   146  		fmt.Fprint(w, `{"id":1}`)
   147  	})
   148  
   149  	user, _, err := client.Users.Edit(context.Background(), input)
   150  	if err != nil {
   151  		t.Errorf("Users.Edit returned error: %v", err)
   152  	}
   153  
   154  	want := &User{ID: Int64(1)}
   155  	if !reflect.DeepEqual(user, want) {
   156  		t.Errorf("Users.Edit returned %+v, want %+v", user, want)
   157  	}
   158  }
   159  
   160  func TestUsersService_GetHovercard(t *testing.T) {
   161  	client, mux, _, teardown := setup()
   162  	defer teardown()
   163  
   164  	mux.HandleFunc("/users/u/hovercard", func(w http.ResponseWriter, r *http.Request) {
   165  		testMethod(t, r, "GET")
   166  		testFormValues(t, r, values{"subject_type": "repository", "subject_id": "20180408"})
   167  		fmt.Fprint(w, `{"contexts": [{"message":"Owns this repository", "octicon": "repo"}]}`)
   168  	})
   169  
   170  	opt := &HovercardOptions{SubjectType: "repository", SubjectID: "20180408"}
   171  	hovercard, _, err := client.Users.GetHovercard(context.Background(), "u", opt)
   172  	if err != nil {
   173  		t.Errorf("Users.GetHovercard returned error: %v", err)
   174  	}
   175  
   176  	want := &Hovercard{Contexts: []*UserContext{{Message: String("Owns this repository"), Octicon: String("repo")}}}
   177  	if !reflect.DeepEqual(hovercard, want) {
   178  		t.Errorf("Users.GetHovercard returned %+v, want %+v", hovercard, want)
   179  	}
   180  }
   181  
   182  func TestUsersService_ListAll(t *testing.T) {
   183  	client, mux, _, teardown := setup()
   184  	defer teardown()
   185  
   186  	mux.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
   187  		testMethod(t, r, "GET")
   188  		testFormValues(t, r, values{"since": "1", "page": "2"})
   189  		fmt.Fprint(w, `[{"id":2}]`)
   190  	})
   191  
   192  	opt := &UserListOptions{1, ListOptions{Page: 2}}
   193  	users, _, err := client.Users.ListAll(context.Background(), opt)
   194  	if err != nil {
   195  		t.Errorf("Users.Get returned error: %v", err)
   196  	}
   197  
   198  	want := []*User{{ID: Int64(2)}}
   199  	if !reflect.DeepEqual(users, want) {
   200  		t.Errorf("Users.ListAll returned %+v, want %+v", users, want)
   201  	}
   202  }
   203  
   204  func TestUsersService_ListInvitations(t *testing.T) {
   205  	client, mux, _, teardown := setup()
   206  	defer teardown()
   207  
   208  	mux.HandleFunc("/user/repository_invitations", func(w http.ResponseWriter, r *http.Request) {
   209  		testMethod(t, r, "GET")
   210  		fmt.Fprintf(w, `[{"id":1}, {"id":2}]`)
   211  	})
   212  
   213  	got, _, err := client.Users.ListInvitations(context.Background(), nil)
   214  	if err != nil {
   215  		t.Errorf("Users.ListInvitations returned error: %v", err)
   216  	}
   217  
   218  	want := []*RepositoryInvitation{{ID: Int64(1)}, {ID: Int64(2)}}
   219  	if !reflect.DeepEqual(got, want) {
   220  		t.Errorf("Users.ListInvitations = %+v, want %+v", got, want)
   221  	}
   222  }
   223  
   224  func TestUsersService_ListInvitations_withOptions(t *testing.T) {
   225  	client, mux, _, teardown := setup()
   226  	defer teardown()
   227  
   228  	mux.HandleFunc("/user/repository_invitations", func(w http.ResponseWriter, r *http.Request) {
   229  		testMethod(t, r, "GET")
   230  		testFormValues(t, r, values{
   231  			"page": "2",
   232  		})
   233  		fmt.Fprintf(w, `[{"id":1}, {"id":2}]`)
   234  	})
   235  
   236  	_, _, err := client.Users.ListInvitations(context.Background(), &ListOptions{Page: 2})
   237  	if err != nil {
   238  		t.Errorf("Users.ListInvitations returned error: %v", err)
   239  	}
   240  }
   241  func TestUsersService_AcceptInvitation(t *testing.T) {
   242  	client, mux, _, teardown := setup()
   243  	defer teardown()
   244  
   245  	mux.HandleFunc("/user/repository_invitations/1", func(w http.ResponseWriter, r *http.Request) {
   246  		testMethod(t, r, "PATCH")
   247  		w.WriteHeader(http.StatusNoContent)
   248  	})
   249  
   250  	if _, err := client.Users.AcceptInvitation(context.Background(), 1); err != nil {
   251  		t.Errorf("Users.AcceptInvitation returned error: %v", err)
   252  	}
   253  }
   254  
   255  func TestUsersService_DeclineInvitation(t *testing.T) {
   256  	client, mux, _, teardown := setup()
   257  	defer teardown()
   258  
   259  	mux.HandleFunc("/user/repository_invitations/1", func(w http.ResponseWriter, r *http.Request) {
   260  		testMethod(t, r, "DELETE")
   261  		w.WriteHeader(http.StatusNoContent)
   262  	})
   263  
   264  	if _, err := client.Users.DeclineInvitation(context.Background(), 1); err != nil {
   265  		t.Errorf("Users.DeclineInvitation returned error: %v", err)
   266  	}
   267  }