oh-my-posh/src/segments/gcp_test.go
2023-01-17 10:56:12 +01:00

144 lines
3.3 KiB
Go

package segments
import (
"path"
"testing"
"github.com/jandedobbeleer/oh-my-posh/src/mock"
"github.com/jandedobbeleer/oh-my-posh/src/platform"
"github.com/stretchr/testify/assert"
mock2 "github.com/stretchr/testify/mock"
)
func TestGcpSegment(t *testing.T) {
cases := []struct {
Case string
CfgData string
ActiveConfig string
ExpectedEnabled bool
ExpectedString string
}{
{
Case: "happy path",
ExpectedEnabled: true,
ActiveConfig: "production",
CfgData: `
[core]
account = test@example.com
project = test-test-test
[compute]
region = europe-test1
`,
ExpectedString: "test-test-test :: europe-test1 :: test@example.com",
},
{
Case: "no active config",
ExpectedEnabled: false,
},
{
Case: "empty config",
ActiveConfig: "production",
ExpectedEnabled: false,
},
{
Case: "bad config",
ActiveConfig: "production",
CfgData: "{bad}",
ExpectedEnabled: false,
},
}
for _, tc := range cases {
env := new(mock.MockedEnvironment)
env.On("Getenv", "CLOUDSDK_CONFIG").Return("config")
fcPath := path.Join("config", "active_config")
env.On("FileContent", fcPath).Return(tc.ActiveConfig)
cfgpath := path.Join("config", "configurations", "config_production")
env.On("FileContent", cfgpath).Return(tc.CfgData)
env.On("Error", mock2.Anything).Return()
g := &Gcp{
env: env,
}
assert.Equal(t, tc.ExpectedEnabled, g.Enabled(), tc.Case)
if tc.ExpectedEnabled {
assert.Equal(t, tc.ExpectedString, renderTemplate(env, "{{.Project}} :: {{.Region}} :: {{.Account}}", g), tc.Case)
}
}
}
func TestGetConfigDirectory(t *testing.T) {
cases := []struct {
Case string
GOOS string
Home string
AppData string
CloudSDKConfig string
Expected string
}{
{
Case: "CLOUDSDK_CONFIG",
CloudSDKConfig: "/Users/posh/.config/gcloud",
Expected: "/Users/posh/.config/gcloud",
},
{
Case: "Windows",
GOOS: platform.WINDOWS,
AppData: "/Users/posh/.config",
Expected: "/Users/posh/.config/gcloud",
},
{
Case: "default",
Home: "/Users/posh2/",
Expected: "/Users/posh2/.config/gcloud",
},
}
for _, tc := range cases {
env := new(mock.MockedEnvironment)
env.On("Getenv", "CLOUDSDK_CONFIG").Return(tc.CloudSDKConfig)
env.On("Getenv", "APPDATA").Return(tc.AppData)
env.On("Home").Return(tc.Home)
env.On("GOOS").Return(tc.GOOS)
g := &Gcp{
env: env,
}
assert.Equal(t, tc.Expected, g.getConfigDirectory(), tc.Case)
}
}
func TestGetActiveConfig(t *testing.T) {
cases := []struct {
Case string
ActiveConfig string
ExpectedString string
ExpectedError string
}{
{
Case: "No active config",
ExpectedError: GCPNOACTIVECONFIG,
},
{
Case: "No active config",
ActiveConfig: "production",
ExpectedString: "production",
},
}
for _, tc := range cases {
env := new(mock.MockedEnvironment)
env.On("FileContent", "active_config").Return(tc.ActiveConfig)
g := &Gcp{
env: env,
}
got, err := g.getActiveConfig("")
assert.Equal(t, tc.ExpectedString, got, tc.Case)
if len(tc.ExpectedError) > 0 {
assert.EqualError(t, err, tc.ExpectedError, tc.Case)
} else {
assert.NoError(t, err, tc.Case)
}
}
}