...

Source file src/github.com/cli/go-gh/v2/pkg/api/client_options_test.go

Documentation: github.com/cli/go-gh/v2/pkg/api

     1  package api
     2  
     3  import (
     4  	"net/http"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestResolveOptions(t *testing.T) {
    11  	stubConfig(t, testConfigWithSocket())
    12  
    13  	tests := []struct {
    14  		name          string
    15  		opts          ClientOptions
    16  		wantAuthToken string
    17  		wantHost      string
    18  		wantSocket    string
    19  	}{
    20  		{
    21  			name: "honors consumer provided ClientOptions",
    22  			opts: ClientOptions{
    23  				Host:             "test.com",
    24  				AuthToken:        "token_from_opts",
    25  				UnixDomainSocket: "socket_from_opts",
    26  			},
    27  			wantAuthToken: "token_from_opts",
    28  			wantHost:      "test.com",
    29  			wantSocket:    "socket_from_opts",
    30  		},
    31  		{
    32  			name:          "uses config values if there are no consumer provided ClientOptions",
    33  			opts:          ClientOptions{},
    34  			wantAuthToken: "token",
    35  			wantHost:      "github.com",
    36  			wantSocket:    "socket",
    37  		},
    38  	}
    39  
    40  	for _, tt := range tests {
    41  		t.Run(tt.name, func(t *testing.T) {
    42  			opts, err := resolveOptions(tt.opts)
    43  			assert.NoError(t, err)
    44  			assert.Equal(t, tt.wantHost, opts.Host)
    45  			assert.Equal(t, tt.wantAuthToken, opts.AuthToken)
    46  			assert.Equal(t, tt.wantSocket, opts.UnixDomainSocket)
    47  		})
    48  	}
    49  }
    50  
    51  func TestOptionsNeedResolution(t *testing.T) {
    52  	tests := []struct {
    53  		name string
    54  		opts ClientOptions
    55  		out  bool
    56  	}{
    57  		{
    58  			name: "Host, AuthToken, and UnixDomainSocket specified",
    59  			opts: ClientOptions{
    60  				Host:             "test.com",
    61  				AuthToken:        "token",
    62  				UnixDomainSocket: "socket",
    63  			},
    64  			out: false,
    65  		},
    66  		{
    67  			name: "Host, AuthToken, and Transport specified",
    68  			opts: ClientOptions{
    69  				Host:      "test.com",
    70  				AuthToken: "token",
    71  				Transport: http.DefaultTransport,
    72  			},
    73  			out: false,
    74  		},
    75  		{
    76  			name: "Host, and AuthToken specified",
    77  			opts: ClientOptions{
    78  				Host:      "test.com",
    79  				AuthToken: "token",
    80  			},
    81  			out: true,
    82  		},
    83  		{
    84  			name: "Host, and UnixDomainSocket specified",
    85  			opts: ClientOptions{
    86  				Host:             "test.com",
    87  				UnixDomainSocket: "socket",
    88  			},
    89  			out: true,
    90  		},
    91  		{
    92  			name: "Host, and Transport specified",
    93  			opts: ClientOptions{
    94  				Host:      "test.com",
    95  				Transport: http.DefaultTransport,
    96  			},
    97  			out: true,
    98  		},
    99  		{
   100  			name: "AuthToken, and UnixDomainSocket specified",
   101  			opts: ClientOptions{
   102  				AuthToken:        "token",
   103  				UnixDomainSocket: "socket",
   104  			},
   105  			out: true,
   106  		},
   107  		{
   108  			name: "AuthToken, and Transport specified",
   109  			opts: ClientOptions{
   110  				AuthToken: "token",
   111  				Transport: http.DefaultTransport,
   112  			},
   113  			out: true,
   114  		},
   115  		{
   116  			name: "Host specified",
   117  			opts: ClientOptions{
   118  				Host: "test.com",
   119  			},
   120  			out: true,
   121  		},
   122  		{
   123  			name: "AuthToken specified",
   124  			opts: ClientOptions{
   125  				AuthToken: "token",
   126  			},
   127  			out: true,
   128  		},
   129  		{
   130  			name: "UnixDomainSocket specified",
   131  			opts: ClientOptions{
   132  				UnixDomainSocket: "socket",
   133  			},
   134  			out: true,
   135  		},
   136  		{
   137  			name: "Transport specified",
   138  			opts: ClientOptions{
   139  				Transport: http.DefaultTransport,
   140  			},
   141  			out: true,
   142  		},
   143  	}
   144  
   145  	for _, tt := range tests {
   146  		t.Run(tt.name, func(t *testing.T) {
   147  			assert.Equal(t, tt.out, optionsNeedResolution(tt.opts))
   148  		})
   149  	}
   150  }
   151  
   152  func testConfig() string {
   153  	return `
   154  hosts:
   155    github.com:
   156      user: user1
   157      oauth_token: abc123
   158      git_protocol: ssh
   159  `
   160  }
   161  
   162  func testConfigWithSocket() string {
   163  	return `
   164  http_unix_socket: socket
   165  hosts:
   166    github.com:
   167      user: user1
   168      oauth_token: token
   169      git_protocol: ssh
   170  `
   171  }
   172  

View as plain text