package api import ( "encoding/json" "fmt" "io" "net/http" "net/http/httptest" "regexp" "strings" "testing" "github.com/MakeNowJust/heredoc" "github.com/cli/cli/v2/pkg/iostreams" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestNewHTTPClient(t *testing.T) { type args struct { config tokenGetter appVersion string logVerboseHTTP bool } tests := []struct { name string args args host string wantHeader map[string]string wantStderr string }{ { name: "github.com", args: args{ config: tinyConfig{"github.com:oauth_token": "MYTOKEN"}, appVersion: "v1.2.3", logVerboseHTTP: false, }, host: "github.com", wantHeader: map[string]string{ "authorization": "token MYTOKEN", "user-agent": "GitHub CLI v1.2.3", "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", }, wantStderr: "", }, { name: "GHES", args: args{ config: tinyConfig{"example.com:oauth_token": "GHETOKEN"}, appVersion: "v1.2.3", }, host: "example.com", wantHeader: map[string]string{ "authorization": "token GHETOKEN", "user-agent": "GitHub CLI v1.2.3", "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", }, wantStderr: "", }, { name: "github.com no authentication token", args: args{ config: tinyConfig{"example.com:oauth_token": "MYTOKEN"}, appVersion: "v1.2.3", logVerboseHTTP: false, }, host: "github.com", wantHeader: map[string]string{ "authorization": "", "user-agent": "GitHub CLI v1.2.3", "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", }, wantStderr: "", }, { name: "GHES no authentication token", args: args{ config: tinyConfig{"github.com:oauth_token": "MYTOKEN"}, appVersion: "v1.2.3", logVerboseHTTP: false, }, host: "example.com", wantHeader: map[string]string{ "authorization": "", "user-agent": "GitHub CLI v1.2.3", "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", }, wantStderr: "", }, { name: "github.com in verbose mode", args: args{ config: tinyConfig{"github.com:oauth_token": "MYTOKEN"}, appVersion: "v1.2.3", logVerboseHTTP: true, }, host: "github.com", wantHeader: map[string]string{ "authorization": "token MYTOKEN", "user-agent": "GitHub CLI v1.2.3", "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", }, wantStderr: heredoc.Doc(` * Request at