github.com/google/go-github/v49@v49.1.0/github/users_ssh_signing_keys_test.go (about) 1 // Copyright 2022 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_ListSSHSigningKeys_authenticatedUser(t *testing.T) { 19 client, mux, _, teardown := setup() 20 defer teardown() 21 22 mux.HandleFunc("/user/ssh_signing_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.ListSSHSigningKeys(ctx, "", opt) 31 if err != nil { 32 t.Errorf("Users.ListSSHSigningKeys returned error: %v", err) 33 } 34 35 want := []*SSHSigningKey{{ID: Int64(1)}} 36 if !cmp.Equal(keys, want) { 37 t.Errorf("Users.ListSSHSigningKeys returned %+v, want %+v", keys, want) 38 } 39 40 const methodName = "ListSSHSigningKeys" 41 testBadOptions(t, methodName, func() (err error) { 42 _, _, err = client.Users.ListSSHSigningKeys(ctx, "\n", opt) 43 return err 44 }) 45 46 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 47 got, resp, err := client.Users.ListSSHSigningKeys(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_ListSSHSigningKeys_specifiedUser(t *testing.T) { 56 client, mux, _, teardown := setup() 57 defer teardown() 58 59 mux.HandleFunc("/users/u/ssh_signing_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.ListSSHSigningKeys(ctx, "u", nil) 66 if err != nil { 67 t.Errorf("Users.ListSSHSigningKeys returned error: %v", err) 68 } 69 70 want := []*SSHSigningKey{{ID: Int64(1)}} 71 if !cmp.Equal(keys, want) { 72 t.Errorf("Users.ListSSHSigningKeys returned %+v, want %+v", keys, want) 73 } 74 } 75 76 func TestUsersService_ListSSHSigningKeys_invalidUser(t *testing.T) { 77 client, _, _, teardown := setup() 78 defer teardown() 79 80 ctx := context.Background() 81 _, _, err := client.Users.ListSSHSigningKeys(ctx, "%", nil) 82 testURLParseError(t, err) 83 } 84 85 func TestUsersService_GetSSHSigningKey(t *testing.T) { 86 client, mux, _, teardown := setup() 87 defer teardown() 88 89 mux.HandleFunc("/user/ssh_signing_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.GetSSHSigningKey(ctx, 1) 96 if err != nil { 97 t.Errorf("Users.GetSSHSigningKey returned error: %v", err) 98 } 99 100 want := &SSHSigningKey{ID: Int64(1)} 101 if !cmp.Equal(key, want) { 102 t.Errorf("Users.GetSSHSigningKey returned %+v, want %+v", key, want) 103 } 104 105 const methodName = "GetSSHSigningKey" 106 testBadOptions(t, methodName, func() (err error) { 107 _, _, err = client.Users.GetSSHSigningKey(ctx, -1) 108 return err 109 }) 110 111 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 112 got, resp, err := client.Users.GetSSHSigningKey(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_CreateSSHSigningKey(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/ssh_signing_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.CreateSSHSigningKey(ctx, input) 140 if err != nil { 141 t.Errorf("Users.CreateSSHSigningKey returned error: %v", err) 142 } 143 144 want := &SSHSigningKey{ID: Int64(1)} 145 if !cmp.Equal(key, want) { 146 t.Errorf("Users.CreateSSHSigningKey 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_DeleteSSHSigningKey(t *testing.T) { 160 client, mux, _, teardown := setup() 161 defer teardown() 162 163 mux.HandleFunc("/user/ssh_signing_keys/1", func(w http.ResponseWriter, r *http.Request) { 164 testMethod(t, r, "DELETE") 165 }) 166 167 ctx := context.Background() 168 _, err := client.Users.DeleteSSHSigningKey(ctx, 1) 169 if err != nil { 170 t.Errorf("Users.DeleteSSHSigningKey returned error: %v", err) 171 } 172 173 const methodName = "DeleteSSHSigningKey" 174 testBadOptions(t, methodName, func() (err error) { 175 _, err = client.Users.DeleteSSHSigningKey(ctx, -1) 176 return err 177 }) 178 179 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 180 return client.Users.DeleteSSHSigningKey(ctx, 1) 181 }) 182 } 183 184 func TestSSHSigningKey_Marshal(t *testing.T) { 185 testJSONMarshal(t, &SSHSigningKey{}, "{}") 186 187 u := &Key{ 188 ID: Int64(1), 189 Key: String("abc"), 190 Title: String("title"), 191 CreatedAt: &Timestamp{referenceTime}, 192 } 193 194 want := `{ 195 "id": 1, 196 "key": "abc", 197 "title": "title", 198 "created_at": ` + referenceTimeStr + ` 199 }` 200 201 testJSONMarshal(t, u, want) 202 }