github.com/google/go-github/v69@v69.2.0/github/users_gpg_keys_test.go (about)

     1  // Copyright 2016 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_ListGPGKeys_authenticatedUser(t *testing.T) {
    19  	t.Parallel()
    20  	client, mux, _ := setup(t)
    21  
    22  	mux.HandleFunc("/user/gpg_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,"primary_key_id":2}]`)
    26  	})
    27  
    28  	opt := &ListOptions{Page: 2}
    29  	ctx := context.Background()
    30  	keys, _, err := client.Users.ListGPGKeys(ctx, "", opt)
    31  	if err != nil {
    32  		t.Errorf("Users.ListGPGKeys returned error: %v", err)
    33  	}
    34  
    35  	want := []*GPGKey{{ID: Ptr(int64(1)), PrimaryKeyID: Ptr(int64(2))}}
    36  	if !cmp.Equal(keys, want) {
    37  		t.Errorf("Users.ListGPGKeys = %+v, want %+v", keys, want)
    38  	}
    39  
    40  	const methodName = "ListGPGKeys"
    41  	testBadOptions(t, methodName, func() (err error) {
    42  		_, _, err = client.Users.ListGPGKeys(ctx, "\n", opt)
    43  		return err
    44  	})
    45  
    46  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    47  		got, resp, err := client.Users.ListGPGKeys(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_ListGPGKeys_specifiedUser(t *testing.T) {
    56  	t.Parallel()
    57  	client, mux, _ := setup(t)
    58  
    59  	mux.HandleFunc("/users/u/gpg_keys", func(w http.ResponseWriter, r *http.Request) {
    60  		testMethod(t, r, "GET")
    61  		fmt.Fprint(w, `[{"id":1,"primary_key_id":2}]`)
    62  	})
    63  
    64  	ctx := context.Background()
    65  	keys, _, err := client.Users.ListGPGKeys(ctx, "u", nil)
    66  	if err != nil {
    67  		t.Errorf("Users.ListGPGKeys returned error: %v", err)
    68  	}
    69  
    70  	want := []*GPGKey{{ID: Ptr(int64(1)), PrimaryKeyID: Ptr(int64(2))}}
    71  	if !cmp.Equal(keys, want) {
    72  		t.Errorf("Users.ListGPGKeys = %+v, want %+v", keys, want)
    73  	}
    74  }
    75  
    76  func TestUsersService_ListGPGKeys_invalidUser(t *testing.T) {
    77  	t.Parallel()
    78  	client, _, _ := setup(t)
    79  
    80  	ctx := context.Background()
    81  	_, _, err := client.Users.ListGPGKeys(ctx, "%", nil)
    82  	testURLParseError(t, err)
    83  }
    84  
    85  func TestUsersService_GetGPGKey(t *testing.T) {
    86  	t.Parallel()
    87  	client, mux, _ := setup(t)
    88  
    89  	mux.HandleFunc("/user/gpg_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.GetGPGKey(ctx, 1)
    96  	if err != nil {
    97  		t.Errorf("Users.GetGPGKey returned error: %v", err)
    98  	}
    99  
   100  	want := &GPGKey{ID: Ptr(int64(1))}
   101  	if !cmp.Equal(key, want) {
   102  		t.Errorf("Users.GetGPGKey = %+v, want %+v", key, want)
   103  	}
   104  
   105  	const methodName = "GetGPGKey"
   106  	testBadOptions(t, methodName, func() (err error) {
   107  		_, _, err = client.Users.GetGPGKey(ctx, -1)
   108  		return err
   109  	})
   110  
   111  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   112  		got, resp, err := client.Users.GetGPGKey(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_CreateGPGKey(t *testing.T) {
   121  	t.Parallel()
   122  	client, mux, _ := setup(t)
   123  
   124  	input := `
   125  -----BEGIN PGP PUBLIC KEY BLOCK-----
   126  Comment: GPGTools - https://gpgtools.org
   127  
   128  mQINBFcEd9kBEACo54TDbGhKlXKWMvJgecEUKPPcv7XdnpKdGb3LRw5MvFwT0V0f
   129  ...
   130  =tqfb
   131  -----END PGP PUBLIC KEY BLOCK-----`
   132  
   133  	mux.HandleFunc("/user/gpg_keys", func(w http.ResponseWriter, r *http.Request) {
   134  		var gpgKey struct {
   135  			ArmoredPublicKey *string `json:"armored_public_key,omitempty"`
   136  		}
   137  		assertNilError(t, json.NewDecoder(r.Body).Decode(&gpgKey))
   138  
   139  		testMethod(t, r, "POST")
   140  		if gpgKey.ArmoredPublicKey == nil || *gpgKey.ArmoredPublicKey != input {
   141  			t.Errorf("gpgKey = %+v, want %q", gpgKey, input)
   142  		}
   143  
   144  		fmt.Fprint(w, `{"id":1}`)
   145  	})
   146  
   147  	ctx := context.Background()
   148  	gpgKey, _, err := client.Users.CreateGPGKey(ctx, input)
   149  	if err != nil {
   150  		t.Errorf("Users.GetGPGKey returned error: %v", err)
   151  	}
   152  
   153  	want := &GPGKey{ID: Ptr(int64(1))}
   154  	if !cmp.Equal(gpgKey, want) {
   155  		t.Errorf("Users.GetGPGKey = %+v, want %+v", gpgKey, want)
   156  	}
   157  
   158  	const methodName = "CreateGPGKey"
   159  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   160  		got, resp, err := client.Users.CreateGPGKey(ctx, input)
   161  		if got != nil {
   162  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   163  		}
   164  		return resp, err
   165  	})
   166  }
   167  
   168  func TestUsersService_DeleteGPGKey(t *testing.T) {
   169  	t.Parallel()
   170  	client, mux, _ := setup(t)
   171  
   172  	mux.HandleFunc("/user/gpg_keys/1", func(w http.ResponseWriter, r *http.Request) {
   173  		testMethod(t, r, "DELETE")
   174  	})
   175  
   176  	ctx := context.Background()
   177  	_, err := client.Users.DeleteGPGKey(ctx, 1)
   178  	if err != nil {
   179  		t.Errorf("Users.DeleteGPGKey returned error: %v", err)
   180  	}
   181  
   182  	const methodName = "DeleteGPGKey"
   183  	testBadOptions(t, methodName, func() (err error) {
   184  		_, err = client.Users.DeleteGPGKey(ctx, -1)
   185  		return err
   186  	})
   187  
   188  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   189  		return client.Users.DeleteGPGKey(ctx, 1)
   190  	})
   191  }
   192  
   193  func TestGPGEmail_Marshal(t *testing.T) {
   194  	t.Parallel()
   195  	testJSONMarshal(t, &GPGEmail{}, "{}")
   196  
   197  	u := &GPGEmail{
   198  		Email:    Ptr("email@abc.com"),
   199  		Verified: Ptr(false),
   200  	}
   201  
   202  	want := `{
   203  		"email" : "email@abc.com",
   204  		"verified" : false
   205  	}`
   206  
   207  	testJSONMarshal(t, u, want)
   208  }
   209  
   210  func TestGPGKey_Marshal(t *testing.T) {
   211  	t.Parallel()
   212  	testJSONMarshal(t, &GPGKey{}, "{}")
   213  
   214  	ti := &Timestamp{}
   215  
   216  	g := &GPGKey{
   217  		ID:           Ptr(int64(1)),
   218  		PrimaryKeyID: Ptr(int64(1)),
   219  		KeyID:        Ptr("someKeyID"),
   220  		RawKey:       Ptr("someRawKeyID"),
   221  		PublicKey:    Ptr("somePublicKey"),
   222  		Emails: []*GPGEmail{
   223  			{
   224  				Email:    Ptr("someEmail"),
   225  				Verified: Ptr(true),
   226  			},
   227  		},
   228  		Subkeys: []*GPGKey{
   229  			{},
   230  		},
   231  		CanSign:           Ptr(true),
   232  		CanEncryptComms:   Ptr(true),
   233  		CanEncryptStorage: Ptr(true),
   234  		CanCertify:        Ptr(true),
   235  		CreatedAt:         ti,
   236  		ExpiresAt:         ti,
   237  	}
   238  
   239  	want := `{
   240  			"id":1,
   241  			"primary_key_id":1,
   242  			"key_id":"someKeyID",
   243  			"raw_key":"someRawKeyID",
   244  			"public_key":"somePublicKey",
   245  			"emails":[
   246  				{
   247  					"email":"someEmail",
   248  					"verified":true
   249  				}
   250  			],
   251  			"subkeys":[
   252  				{}
   253  			],
   254  			"can_sign":true,
   255  			"can_encrypt_comms":true,
   256  			"can_encrypt_storage":true,
   257  			"can_certify":true,
   258  			"created_at":"0001-01-01T00:00:00Z",
   259  			"expires_at":"0001-01-01T00:00:00Z"
   260  		}`
   261  
   262  	testJSONMarshal(t, g, want)
   263  }