99 lines
2.3 KiB
Go
99 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestResolveTokenPrefersEnvironment(t *testing.T) {
|
|
called := false
|
|
token, err := resolveTokenWith(
|
|
context.Background(),
|
|
"https://api.github.com/graphql",
|
|
func(name string) string {
|
|
if name == "GH_TOKEN" {
|
|
return "from-environment"
|
|
}
|
|
return ""
|
|
},
|
|
func(context.Context, string, ...string) ([]byte, error) {
|
|
called = true
|
|
return nil, nil
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if token != "from-environment" {
|
|
t.Fatalf("token = %q", token)
|
|
}
|
|
if called {
|
|
t.Fatal("gh was called even though an environment token was available")
|
|
}
|
|
}
|
|
|
|
func TestResolveTokenFallsBackToActiveGHAccount(t *testing.T) {
|
|
var command string
|
|
var args []string
|
|
token, err := resolveTokenWith(
|
|
context.Background(),
|
|
"https://api.github.com/graphql",
|
|
func(string) string { return "" },
|
|
func(_ context.Context, name string, values ...string) ([]byte, error) {
|
|
command, args = name, values
|
|
return []byte("from-gh\n"), nil
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if token != "from-gh" {
|
|
t.Fatalf("token = %q", token)
|
|
}
|
|
if command != "gh" || !reflect.DeepEqual(args, []string{"auth", "token", "--hostname", "github.com"}) {
|
|
t.Fatalf("command = %q, args = %#v", command, args)
|
|
}
|
|
}
|
|
|
|
func TestResolveTokenUsesEnterpriseHostname(t *testing.T) {
|
|
var args []string
|
|
_, err := resolveTokenWith(
|
|
context.Background(),
|
|
"https://github.example.com/api/graphql",
|
|
func(string) string { return "" },
|
|
func(_ context.Context, _ string, values ...string) ([]byte, error) {
|
|
args = values
|
|
return []byte("token"), nil
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !reflect.DeepEqual(args, []string{"auth", "token", "--hostname", "github.example.com"}) {
|
|
t.Fatalf("args = %#v", args)
|
|
}
|
|
}
|
|
|
|
func TestResolveTokenExplainsGHAuthenticationFailure(t *testing.T) {
|
|
_, err := resolveTokenWith(
|
|
context.Background(),
|
|
"https://api.github.com/graphql",
|
|
func(string) string { return "" },
|
|
func(context.Context, string, ...string) ([]byte, error) {
|
|
return nil, errors.New("exit status 4")
|
|
},
|
|
)
|
|
if err == nil || !strings.Contains(err.Error(), "gh auth login --hostname github.com") {
|
|
t.Fatalf("error = %v", err)
|
|
}
|
|
}
|
|
|
|
func TestGitHubHostRejectsInvalidEndpoint(t *testing.T) {
|
|
if _, err := githubHost("not-a-url"); err == nil {
|
|
t.Fatal("expected invalid endpoint error")
|
|
}
|
|
}
|