diff options
Diffstat (limited to 'cli/internal/ci/ci_test.go')
| -rw-r--r-- | cli/internal/ci/ci_test.go | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/cli/internal/ci/ci_test.go b/cli/internal/ci/ci_test.go new file mode 100644 index 0000000..333ff61 --- /dev/null +++ b/cli/internal/ci/ci_test.go @@ -0,0 +1,105 @@ +package ci + +import ( + "os" + "reflect" + "strings" + "testing" +) + +func getVendor(name string) Vendor { + for _, v := range Vendors { + if v.Name == name { + return v + } + } + return Vendor{} +} + +func TestInfo(t *testing.T) { + tests := []struct { + name string + setEnv []string + want Vendor + }{ + { + name: "AppVeyor", + setEnv: []string{"APPVEYOR"}, + want: getVendor("AppVeyor"), + }, + { + name: "Vercel", + setEnv: []string{"VERCEL", "NOW_BUILDER"}, + want: getVendor("Vercel"), + }, + { + name: "Render", + setEnv: []string{"RENDER"}, + want: getVendor("Render"), + }, + { + name: "Netlify", + setEnv: []string{"NETLIFY"}, + want: getVendor("Netlify CI"), + }, + { + name: "Jenkins", + setEnv: []string{"BUILD_ID", "JENKINS_URL"}, + want: getVendor("Jenkins"), + }, + { + name: "Jenkins - failing", + setEnv: []string{"BUILD_ID"}, + want: getVendor(""), + }, + { + name: "GitHub Actions", + setEnv: []string{"GITHUB_ACTIONS"}, + want: getVendor("GitHub Actions"), + }, + { + name: "Codeship", + setEnv: []string{"CI_NAME=codeship"}, + want: getVendor("Codeship"), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // unset existing envs + liveCi := "" + if Name() == "GitHub Actions" { + liveCi = os.Getenv("GITHUB_ACTIONS") + err := os.Unsetenv("GITHUB_ACTIONS") + if err != nil { + t.Errorf("Error un-setting GITHUB_ACTIONS env: %s", err) + } + } + // set envs + for _, env := range tt.setEnv { + envParts := strings.Split(env, "=") + val := "some value" + if len(envParts) > 1 { + val = envParts[1] + } + err := os.Setenv(envParts[0], val) + if err != nil { + t.Errorf("Error setting %s for %s test", envParts[0], tt.name) + } + defer os.Unsetenv(envParts[0]) //nolint errcheck + + } + // run test + if got := Info(); !reflect.DeepEqual(got, tt.want) { + t.Errorf("Info() = %v, want %v", got, tt.want) + } + + // reset env + if Name() == "GitHub Actions" { + err := os.Setenv("GITHUB_ACTIONS", liveCi) + if err != nil { + t.Errorf("Error re-setting GITHUB_ACTIONS env: %s", err) + } + } + }) + } +} |
