...

Source file src/github.com/google/go-github/v55/github/users_keys_test.go

Documentation: github.com/google/go-github/v55/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 TestUsersService_ListKeys_authenticatedUser(t *testing.T) {
    19  	client, mux, _, teardown := setup()
    20  	defer teardown()
    21  
    22  	mux.HandleFunc("/user/keys", 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  	keys, _, err := client.Users.ListKeys(ctx, "", opt)
    31  	if err != nil {
    32  		t.Errorf("Users.ListKeys returned error: %v", err)
    33  	}
    34  
    35  	want := []*Key{{ID: Int64(1)}}
    36  	if !cmp.Equal(keys, want) {
    37  		t.Errorf("Users.ListKeys returned %+v, want %+v", keys, want)
    38  	}
    39  
    40  	const methodName = "ListKeys"
    41  	testBadOptions(t, methodName, func() (err error) {
    42  		_, _, err = client.Users.ListKeys(ctx, "\n", opt)
    43  		return err
    44  	})
    45  
    46  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    47  		got, resp, err := client.Users.ListKeys(ctx, "", 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 TestUsersService_ListKeys_specifiedUser(t *testing.T) {
    56  	client, mux, _, teardown := setup()
    57  	defer teardown()
    58  
    59  	mux.HandleFunc("/users/u/keys", func(w http.ResponseWriter, r *http.Request) {
    60  		testMethod(t, r, "GET")
    61  		fmt.Fprint(w, `[{"id":1}]`)
    62  	})
    63  
    64  	ctx := context.Background()
    65  	keys, _, err := client.Users.ListKeys(ctx, "u", nil)
    66  	if err != nil {
    67  		t.Errorf("Users.ListKeys returned error: %v", err)
    68  	}
    69  
    70  	want := []*Key{{ID: Int64(1)}}
    71  	if !cmp.Equal(keys, want) {
    72  		t.Errorf("Users.ListKeys returned %+v, want %+v", keys, want)
    73  	}
    74  }
    75  
    76  func TestUsersService_ListKeys_invalidUser(t *testing.T) {
    77  	client, _, _, teardown := setup()
    78  	defer teardown()
    79  
    80  	ctx := context.Background()
    81  	_, _, err := client.Users.ListKeys(ctx, "%", nil)
    82  	testURLParseError(t, err)
    83  }
    84  
    85  func TestUsersService_GetKey(t *testing.T) {
    86  	client, mux, _, teardown := setup()
    87  	defer teardown()
    88  
    89  	mux.HandleFunc("/user/keys/1", func(w http.ResponseWriter, r *http.Request) {
    90  		testMethod(t, r, "GET")
    91  		fmt.Fprint(w, `{"id":1}`)
    92  	})
    93  
    94  	ctx := context.Background()
    95  	key, _, err := client.Users.GetKey(ctx, 1)
    96  	if err != nil {
    97  		t.Errorf("Users.GetKey returned error: %v", err)
    98  	}
    99  
   100  	want := &Key{ID: Int64(1)}
   101  	if !cmp.Equal(key, want) {
   102  		t.Errorf("Users.GetKey returned %+v, want %+v", key, want)
   103  	}
   104  
   105  	const methodName = "GetKey"
   106  	testBadOptions(t, methodName, func() (err error) {
   107  		_, _, err = client.Users.GetKey(ctx, -1)
   108  		return err
   109  	})
   110  
   111  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   112  		got, resp, err := client.Users.GetKey(ctx, 1)
   113  		if got != nil {
   114  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   115  		}
   116  		return resp, err
   117  	})
   118  }
   119  
   120  func TestUsersService_CreateKey(t *testing.T) {
   121  	client, mux, _, teardown := setup()
   122  	defer teardown()
   123  
   124  	input := &Key{Key: String("k"), Title: String("t")}
   125  
   126  	mux.HandleFunc("/user/keys", func(w http.ResponseWriter, r *http.Request) {
   127  		v := new(Key)
   128  		json.NewDecoder(r.Body).Decode(v)
   129  
   130  		testMethod(t, r, "POST")
   131  		if !cmp.Equal(v, input) {
   132  			t.Errorf("Request body = %+v, want %+v", v, input)
   133  		}
   134  
   135  		fmt.Fprint(w, `{"id":1}`)
   136  	})
   137  
   138  	ctx := context.Background()
   139  	key, _, err := client.Users.CreateKey(ctx, input)
   140  	if err != nil {
   141  		t.Errorf("Users.CreateKey returned error: %v", err)
   142  	}
   143  
   144  	want := &Key{ID: Int64(1)}
   145  	if !cmp.Equal(key, want) {
   146  		t.Errorf("Users.CreateKey returned %+v, want %+v", key, want)
   147  	}
   148  
   149  	const methodName = "CreateKey"
   150  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   151  		got, resp, err := client.Users.CreateKey(ctx, input)
   152  		if got != nil {
   153  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   154  		}
   155  		return resp, err
   156  	})
   157  }
   158  
   159  func TestUsersService_DeleteKey(t *testing.T) {
   160  	client, mux, _, teardown := setup()
   161  	defer teardown()
   162  
   163  	mux.HandleFunc("/user/keys/1", func(w http.ResponseWriter, r *http.Request) {
   164  		testMethod(t, r, "DELETE")
   165  	})
   166  
   167  	ctx := context.Background()
   168  	_, err := client.Users.DeleteKey(ctx, 1)
   169  	if err != nil {
   170  		t.Errorf("Users.DeleteKey returned error: %v", err)
   171  	}
   172  
   173  	const methodName = "DeleteKey"
   174  	testBadOptions(t, methodName, func() (err error) {
   175  		_, err = client.Users.DeleteKey(ctx, -1)
   176  		return err
   177  	})
   178  
   179  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   180  		return client.Users.DeleteKey(ctx, 1)
   181  	})
   182  }
   183  
   184  func TestKey_Marshal(t *testing.T) {
   185  	testJSONMarshal(t, &Key{}, "{}")
   186  
   187  	u := &Key{
   188  		ID:        Int64(1),
   189  		Key:       String("abc"),
   190  		URL:       String("url"),
   191  		Title:     String("title"),
   192  		ReadOnly:  Bool(true),
   193  		Verified:  Bool(true),
   194  		CreatedAt: &Timestamp{referenceTime},
   195  	}
   196  
   197  	want := `{
   198  		"id": 1,
   199  		"key": "abc",
   200  		"url": "url",
   201  		"title": "title",
   202  		"read_only": true,
   203  		"verified": true,
   204  		"created_at": ` + referenceTimeStr + `
   205  	}`
   206  
   207  	testJSONMarshal(t, u, want)
   208  }
   209  

View as plain text