Files
diple/auth_test.go
2026-07-27 14:04:08 +02:00

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")
}
}