64 lines
2.6 KiB
Go
64 lines
2.6 KiB
Go
package contract
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/cli/cli/v2/pkg/cmd/auth/shared"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// This HelperConfig contract exist to ensure that any HelperConfig implementation conforms to this behaviour.
|
|
// This is useful because we can swap in fake implementations for testing, rather than requiring our tests to be
|
|
// isolated from git.
|
|
//
|
|
// See for example, TestAuthenticatingGitCredentials for LoginFlow.
|
|
type HelperConfig struct {
|
|
NewHelperConfig func(t *testing.T) shared.HelperConfig
|
|
ConfigureHelper func(t *testing.T, hostname string)
|
|
}
|
|
|
|
func (contract HelperConfig) Test(t *testing.T) {
|
|
t.Run("when there are no credential helpers, configures gh for repo and gist host", func(t *testing.T) {
|
|
hc := contract.NewHelperConfig(t)
|
|
require.NoError(t, hc.ConfigureOurs("github.com"))
|
|
|
|
repoHelper, err := hc.ConfiguredHelper("github.com")
|
|
require.NoError(t, err)
|
|
require.True(t, repoHelper.IsConfigured(), "expected our helper to be configured")
|
|
require.True(t, repoHelper.IsOurs(), "expected the helper to be ours but was %q", repoHelper.Cmd)
|
|
|
|
gistHelper, err := hc.ConfiguredHelper("gist.github.com")
|
|
require.NoError(t, err)
|
|
require.True(t, gistHelper.IsConfigured(), "expected our helper to be configured")
|
|
require.True(t, gistHelper.IsOurs(), "expected the helper to be ours but was %q", gistHelper.Cmd)
|
|
})
|
|
|
|
t.Run("when there is a global credential helper, it should be configured but not ours", func(t *testing.T) {
|
|
hc := contract.NewHelperConfig(t)
|
|
contract.ConfigureHelper(t, "credential.helper")
|
|
|
|
helper, err := hc.ConfiguredHelper("github.com")
|
|
require.NoError(t, err)
|
|
require.True(t, helper.IsConfigured(), "expected helper to be configured")
|
|
require.False(t, helper.IsOurs(), "expected the helper not to be ours but was %q", helper.Cmd)
|
|
})
|
|
|
|
t.Run("when there is a host credential helper, it should be configured but not ours", func(t *testing.T) {
|
|
hc := contract.NewHelperConfig(t)
|
|
contract.ConfigureHelper(t, "credential.https://github.com.helper")
|
|
|
|
helper, err := hc.ConfiguredHelper("github.com")
|
|
require.NoError(t, err)
|
|
require.True(t, helper.IsConfigured(), "expected helper to be configured")
|
|
require.False(t, helper.IsOurs(), "expected the helper not to be ours but was %q", helper.Cmd)
|
|
})
|
|
|
|
t.Run("returns non configured helper when no helpers are configured", func(t *testing.T) {
|
|
hc := contract.NewHelperConfig(t)
|
|
|
|
helper, err := hc.ConfiguredHelper("github.com")
|
|
require.NoError(t, err)
|
|
require.False(t, helper.IsConfigured(), "expected no helper to be configured")
|
|
require.False(t, helper.IsOurs(), "expected the helper not to be ours but was %q", helper.Cmd)
|
|
})
|
|
}
|