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