ci_ingo/ci_ingo_test.go

410 lines
8.2 KiB
Go

package ci_ingo
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
)
var environment = map[string]string{
"APPVEYOR": "true",
"APPVEYOR_X": "1",
"CODEBUILD": "",
}
func TestSimpleMatcher(t *testing.T) {
params := []struct {
name string
envvar string
expect bool
}{
{"appveyor present", "APPVEYOR", true},
{"codebuild present", "CODEBUILD", true},
{"travis not present", "TRAVIS", false},
}
for _, p := range params {
t.Run(p.name, func(t *testing.T) {
matcher := simpleEnvMatcher{p.envvar}
res := matcher.matchEnv(environment)
assert.Equal(t, p.expect, res)
})
}
}
func TestAnyMatcher(t *testing.T) {
params := []struct {
name string
envvars []string
expect bool
}{
{"appveyor present", []string{"APPVEYOR_X", "APPVEYOR"}, true},
{"codebuild present", []string{"CODEBUILD", "CODEBUILD_X"}, true},
{"travis not present", []string{"TRAVIS_X", "TRAVIS"}, false},
}
for _, p := range params {
t.Run(p.name, func(t *testing.T) {
matcher := anyEnvMatcher{p.envvars}
res := matcher.matchEnv(environment)
assert.Equal(t, p.expect, res)
})
}
}
func TestAllMatcher(t *testing.T) {
params := []struct {
name string
envvars []string
expect bool
}{
{"appveyor present", []string{"APPVEYOR_X", "APPVEYOR"}, true},
{"codebuild not present", []string{"CODEBUILD", "CODEBUILD_X"}, false},
{"travis not present", []string{"TRAVIS_X", "TRAVIS"}, false},
}
for _, p := range params {
t.Run(p.name, func(t *testing.T) {
matcher := allEnvMatcher{p.envvars}
res := matcher.matchEnv(environment)
assert.Equal(t, p.expect, res)
})
}
}
func TestNeMatcher(t *testing.T) {
params := []struct {
name string
envvar string
cmp string
expect bool
}{
{"appveyor present", "APPVEYOR", "false", true},
{"codebuild not present", "CODEBUILD", "", false},
{"travis not present", "TRAVIS", "true", false},
}
for _, p := range params {
t.Run(p.name, func(t *testing.T) {
matcher := neEnvMatcher{p.envvar, p.cmp}
res := matcher.matchEnv(environment)
assert.Equal(t, p.expect, res)
})
}
}
func TestGetCI(t *testing.T) {
params := []struct {
name string
envvars map[string]string
ciName string
ciConstant string
isPR bool
}{
{
"AppVeyor - PR",
map[string]string{"APPVEYOR": "true", "APPVEYOR_PULL_REQUEST_NUMBER": "42"},
"AppVeyor", "APPVEYOR", true,
},
{
"AppVeyor - No PR",
map[string]string{"APPVEYOR": "true"},
"AppVeyor", "APPVEYOR", false,
},
{
"Azure Pipelines - PR",
map[string]string{
"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI": "https://dev.azure.com/Contoso",
"SYSTEM_PULLREQUEST_PULLREQUESTID": "42",
},
"Azure Pipelines", "AZURE_PIPELINES", true,
},
{
"Azure Pipelines - No PR",
map[string]string{
"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI": "https://dev.azure.com/Contoso",
},
"Azure Pipelines", "AZURE_PIPELINES", false,
},
{
"Bitbucket Pipelines - PR",
map[string]string{
"BITBUCKET_COMMIT": "true",
"BITBUCKET_PR_ID": "42",
},
"Bitbucket Pipelines", "BITBUCKET", true,
},
{
"Bitbucket Pipelines - No PR",
map[string]string{
"BITBUCKET_COMMIT": "true",
},
"Bitbucket Pipelines", "BITBUCKET", false,
},
{
"Buildkite - PR",
map[string]string{
"BUILDKITE": "true",
"BUILDKITE_PULL_REQUEST": "42",
},
"Buildkite", "BUILDKITE", true,
},
{
"Buildkite - No PR",
map[string]string{
"BUILDKITE": "true",
"BUILDKITE_PULL_REQUEST": "false",
},
"Buildkite", "BUILDKITE", false,
},
{
"CircleCI - PR",
map[string]string{
"CIRCLECI": "true",
"CIRCLE_PULL_REQUEST": "42",
},
"CircleCI", "CIRCLE", true,
},
{
"CircleCI - No PR",
map[string]string{
"CIRCLECI": "true",
},
"CircleCI", "CIRCLE", false,
},
{
"Cirrus CI - PR",
map[string]string{
"CIRRUS_CI": "true",
"CIRRUS_PR": "42",
},
"Cirrus CI", "CIRRUS", true,
},
{
"Cirrus CI - No PR",
map[string]string{
"CIRRUS_CI": "true",
},
"Cirrus CI", "CIRRUS", false,
},
{
"Codefresh - PR",
map[string]string{
"CF_BUILD_ID": "true",
"CF_PULL_REQUEST_ID": "42",
},
"Codefresh", "CODEFRESH", true,
},
{
"Codefresh - No PR",
map[string]string{
"CF_BUILD_ID": "true",
},
"Codefresh", "CODEFRESH", false,
},
{
"LayerCI - PR",
map[string]string{
"LAYERCI": "true",
"LAYERCI_PULL_REQUEST": "https://link-to-pr/5",
},
"LayerCI", "LAYERCI", true,
},
{
"LayerCI - No PR",
map[string]string{
"LAYERCI": "true",
},
"LayerCI", "LAYERCI", false,
},
{
"Appcircle",
map[string]string{"AC_APPCIRCLE": "true"},
"Appcircle", "APPCIRCLE", false,
},
{
"Render - PR",
map[string]string{
"RENDER": "true",
"IS_PULL_REQUEST": "true",
},
"Render", "RENDER", true,
},
{
"Render - No PR",
map[string]string{
"RENDER": "true",
"IS_PULL_REQUEST": "false",
},
"Render", "RENDER", false,
},
{
"Semaphore - PR",
map[string]string{
"SEMAPHORE": "true",
"PULL_REQUEST_NUMBER": "42",
},
"Semaphore", "SEMAPHORE", true,
},
{
"Semaphore - No PR",
map[string]string{
"SEMAPHORE": "true",
},
"Semaphore", "SEMAPHORE", false,
},
{
"Shippable - PR",
map[string]string{
"SHIPPABLE": "true",
"IS_PULL_REQUEST": "true",
},
"Shippable", "SHIPPABLE", true,
},
{
"Shippable - No PR",
map[string]string{
"SHIPPABLE": "true",
"IS_PULL_REQUEST": "false",
},
"Shippable", "SHIPPABLE", false,
},
{
"Solano CI - PR",
map[string]string{
"TDDIUM": "true",
"TDDIUM_PR_ID": "42",
},
"Solano CI", "SOLANO", true,
},
{
"Solano CI - No PR",
map[string]string{
"TDDIUM": "true",
},
"Solano CI", "SOLANO", false,
},
{
"Travis CI - PR",
map[string]string{
"TRAVIS": "true",
"TRAVIS_PULL_REQUEST": "42",
},
"Travis CI", "TRAVIS", true,
},
{
"Travis CI - No PR",
map[string]string{
"TRAVIS": "true",
"TRAVIS_PULL_REQUEST": "false",
},
"Travis CI", "TRAVIS", false,
},
{
"Netlify CI - PR",
map[string]string{
"NETLIFY": "true",
"PULL_REQUEST": "true",
},
"Netlify CI", "NETLIFY", true,
},
{
"Netlify CI - No PR",
map[string]string{
"NETLIFY": "true",
"PULL_REQUEST": "false",
},
"Netlify CI", "NETLIFY", false,
},
{
"Vercel",
map[string]string{"NOW_BUILDER": "1"},
"Vercel", "VERCEL", false,
},
{
"Nevercode - PR",
map[string]string{
"NEVERCODE": "true",
"NEVERCODE_PULL_REQUEST": "true",
},
"Nevercode", "NEVERCODE", true,
},
{
"Nevercode - No PR",
map[string]string{
"NEVERCODE": "true",
"NEVERCODE_PULL_REQUEST": "false",
},
"Nevercode", "NEVERCODE", false,
},
{
"GitHub Actions - PR",
map[string]string{
"GITHUB_ACTIONS": "true",
"GITHUB_EVENT_NAME": "pull_request",
},
"GitHub Actions", "GITHUB_ACTIONS", true,
},
{
"GitHub Actions - No PR",
map[string]string{
"GITHUB_ACTIONS": "true",
"GITHUB_EVENT_NAME": "push",
},
"GitHub Actions", "GITHUB_ACTIONS", false,
},
{
"Screwdriver - PR",
map[string]string{
"SCREWDRIVER": "true",
"SD_PULL_REQUEST": "1",
},
"Screwdriver", "SCREWDRIVER", true,
},
{
"Screwdriver - No PR",
map[string]string{
"SCREWDRIVER": "true",
"SD_PULL_REQUEST": "false",
},
"Screwdriver", "SCREWDRIVER", false,
},
{
"Visual Studio App Center",
map[string]string{"APPCENTER_BUILD_ID": "1"},
"Visual Studio App Center", "APPCENTER", false,
},
{
"Unknown CI",
map[string]string{"CI": "true"},
"Unknown CI", "CI", false,
},
}
for _, p := range params {
t.Run(p.name, func(t *testing.T) {
os.Clearenv()
for envvar, value := range p.envvars {
_ = os.Setenv(envvar, value)
}
ci := GetCI()
assert.True(t, IsCI())
assert.Equal(t, p.ciName, ci.Name)
assert.Equal(t, p.ciConstant, ci.Constant)
assert.Equal(t, p.isPR, ci.IsPR)
})
}
}
func TestNoCI(t *testing.T) {
os.Clearenv()
ci := GetCI()
assert.False(t, IsCI())
assert.Nil(t, ci)
}