test(ci services): add test for travis

This commit is contained in:
Nightapes
2019-07-16 20:26:57 +02:00
parent 13afcea8a0
commit c86ad684c6
5 changed files with 95 additions and 5 deletions

1
go.mod
View File

@@ -10,6 +10,7 @@ require (
github.com/kevinburke/ssh_config v0.0.0-20190630040420-2e50c441276c // indirect github.com/kevinburke/ssh_config v0.0.0-20190630040420-2e50c441276c // indirect
github.com/sirupsen/logrus v1.4.2 github.com/sirupsen/logrus v1.4.2
github.com/spf13/cobra v0.0.5 github.com/spf13/cobra v0.0.5
github.com/stretchr/testify v1.3.0
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect
golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45

View File

@@ -21,7 +21,7 @@ type ProviderConfig struct {
//Service interface //Service interface
type Service interface { type Service interface {
Detect() (*ProviderConfig, error) detect() (*ProviderConfig, error)
} }
//GetCIProvider get provider //GetCIProvider get provider
@@ -33,12 +33,12 @@ func GetCIProvider(gitUtil *gitutil.GitUtil) (*ProviderConfig, error) {
} }
for _, service := range services { for _, service := range services {
config, err := service.Detect() config, err := service.detect()
if err == nil { if err == nil {
log.Infof("Found CI: %s", config.Name) log.Infof("Found CI: %s", config.Name)
return config, nil return config, nil
} }
log.Debugf("%s", err.Error()) log.Infof("%s", err.Error())
} }
return nil, fmt.Errorf("could not find any CI, if running locally set env CI=true") return nil, fmt.Errorf("could not find any CI, if running locally set env CI=true")
} }

86
internal/ci/ci_test.go Normal file
View File

@@ -0,0 +1,86 @@
package ci_test
import (
"testing"
"github.com/Nightapes/go-semantic-release/internal/ci"
"github.com/Nightapes/go-semantic-release/internal/gitutil"
"github.com/stretchr/testify/assert"
"gopkg.in/src-d/go-git.v4"
"gopkg.in/src-d/go-git.v4/storage/memory"
"os"
)
func TestSum(t *testing.T) {
testConfigs := []struct {
service string
envs map[string]string
result *ci.ProviderConfig
hasError bool
}{
{
service: "none",
envs: map[string]string{},
result: nil,
hasError: true,
},
// {
// service: "Git",
// envs: map[string]string{
// "CI": "true",
// },
// result: &ci.ProviderConfig{IsPR: true, PR: "10", PRBranch: "pr", Branch: "master", Tag: "TAG", Commit: "190bfd6aa60022afd0ef830342cfb07e33c45f37", BuildURL: "https://travis-ci.com/owner/repo/builds/1234", Service: "travis", Name: "Travis CI"},
// hasError: false,
// },
{
service: "Travis PR",
envs: map[string]string{
"TRAVIS": "true",
"TRAVIS_PULL_REQUEST": "10",
"TRAVIS_COMMIT": "190bfd6aa60022afd0ef830342cfb07e33c45f37",
"TRAVIS_TAG": "TAG",
"TRAVIS_BUILD_WEB_URL": "https://travis-ci.com/owner/repo/builds/1234",
"TRAVIS_BRANCH": "master",
"TRAVIS_PULL_REQUEST_BRANCH": "pr",
},
result: &ci.ProviderConfig{IsPR: true, PR: "10", PRBranch: "pr", Branch: "master", Tag: "TAG", Commit: "190bfd6aa60022afd0ef830342cfb07e33c45f37", BuildURL: "https://travis-ci.com/owner/repo/builds/1234", Service: "travis", Name: "Travis CI"},
hasError: false,
},
{
service: "Travis Push",
envs: map[string]string{
"TRAVIS": "true",
"TRAVIS_PULL_REQUEST": "false",
"TRAVIS_COMMIT": "190bfd6aa60022afd0ef830342cfb07e33c45f37",
"TRAVIS_TAG": "TAG",
"TRAVIS_BUILD_WEB_URL": "https://travis-ci.com/owner/repo/builds/1234",
"TRAVIS_BRANCH": "master",
},
result: &ci.ProviderConfig{IsPR: false, PR: "", PRBranch: "", Branch: "master", Tag: "TAG", Commit: "190bfd6aa60022afd0ef830342cfb07e33c45f37", BuildURL: "https://travis-ci.com/owner/repo/builds/1234", Service: "travis", Name: "Travis CI"},
hasError: false,
},
}
repository, err := git.Init(memory.NewStorage(), nil)
assert.NoError(t, err, "should open git repository")
gitUtilInMemory := &gitutil.GitUtil{
Repository: repository,
}
for _, config := range testConfigs {
for key, value := range config.envs {
os.Setenv(key, value)
}
provider, err := ci.GetCIProvider(gitUtilInMemory)
assert.Equalf(t, config.hasError, err != nil, "Service %s should have error: %t -> %s", config.service, config.hasError, err)
assert.Equalf(t, config.result, provider, "Service %s should have provider", config.service)
for key, _ := range config.envs {
os.Unsetenv(key)
}
}
}

View File

@@ -12,7 +12,7 @@ type Git struct {
} }
//Detect if on Git //Detect if on Git
func (t Git) Detect() (*ProviderConfig, error) { func (t Git) detect() (*ProviderConfig, error) {
if _, exists := os.LookupEnv("CI"); !exists { if _, exists := os.LookupEnv("CI"); !exists {
return nil, fmt.Errorf("running not git only") return nil, fmt.Errorf("running not git only")

View File

@@ -10,7 +10,7 @@ import (
type Travis struct{} type Travis struct{}
//Detect if on travis //Detect if on travis
func (t Travis) Detect() (*ProviderConfig, error) { func (t Travis) detect() (*ProviderConfig, error) {
if _, exists := os.LookupEnv("TRAVIS"); !exists { if _, exists := os.LookupEnv("TRAVIS"); !exists {
return nil, fmt.Errorf("not running on travis") return nil, fmt.Errorf("not running on travis")
@@ -19,11 +19,13 @@ func (t Travis) Detect() (*ProviderConfig, error) {
isPR := false isPR := false
value := os.Getenv("TRAVIS_PULL_REQUEST") value := os.Getenv("TRAVIS_PULL_REQUEST")
pr := ""
if value == "false" { if value == "false" {
log.Debugf("TRAVIS_PULL_REQUEST=%s, not running on pr", value) log.Debugf("TRAVIS_PULL_REQUEST=%s, not running on pr", value)
} else { } else {
isPR = true isPR = true
pr = value
} }
return &ProviderConfig{ return &ProviderConfig{
@@ -34,6 +36,7 @@ func (t Travis) Detect() (*ProviderConfig, error) {
BuildURL: os.Getenv("TRAVIS_BUILD_WEB_URL"), BuildURL: os.Getenv("TRAVIS_BUILD_WEB_URL"),
Branch: os.Getenv("TRAVIS_BRANCH"), Branch: os.Getenv("TRAVIS_BRANCH"),
IsPR: isPR, IsPR: isPR,
PR: pr,
PRBranch: os.Getenv("TRAVIS_PULL_REQUEST_BRANCH"), PRBranch: os.Getenv("TRAVIS_PULL_REQUEST_BRANCH"),
}, nil }, nil
} }