257 lines
5.9 KiB
Go
257 lines
5.9 KiB
Go
package provider
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/go-semantic-release/semantic-release/v2/pkg/provider"
|
|
"github.com/go-semantic-release/semantic-release/v2/pkg/semrel"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestNewZexlabRepository(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
|
|
var repo *ZexlabRepository
|
|
repo = &ZexlabRepository{}
|
|
err := repo.Init(map[string]string{})
|
|
assertions.EqualError(err, "zexlab token missing")
|
|
|
|
repo = &ZexlabRepository{}
|
|
|
|
err = repo.Init(map[string]string{
|
|
"server_url": server.URL,
|
|
"slug": fmt.Sprintf("%s/%s", zexlabUser, zexlabRepo),
|
|
"token": "token",
|
|
})
|
|
assertions.NoError(err)
|
|
}
|
|
|
|
func TestVersionAndNameReturn(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
repo := createTestZexlabRepo(t)
|
|
assertions.Equal("dev", repo.Version())
|
|
assertions.Equal("Zexlab", repo.Name())
|
|
}
|
|
|
|
func TestZexlabGetInfo(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
repo := createTestZexlabRepo(t)
|
|
|
|
repoInfo, err := repo.GetInfo()
|
|
|
|
assertions.NoError(err)
|
|
assertions.Equal(zexlabDefaultBranch, repoInfo.DefaultBranch)
|
|
assertions.True(repoInfo.Private)
|
|
assertions.Equal(zexlabUser, repoInfo.Owner)
|
|
assertions.Equal(zexlabRepo, repoInfo.Repo)
|
|
}
|
|
|
|
func TestZexlabGetCommits(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
repo := createTestZexlabRepo(t)
|
|
|
|
commits, err := repo.GetCommits("", "sa213445t6")
|
|
|
|
assertions.NoError(err)
|
|
for i, c := range commits {
|
|
assertions.Equal(c.SHA, zexlabCommits[i].SHA)
|
|
assertions.Equal(c.RawMessage, zexlabCommits[i].RepoCommit.Message)
|
|
assertions.Equal(c.Annotations["author_name"], zexlabCommits[i].Author.FullName)
|
|
assertions.Equal(c.Annotations["author_email"], zexlabCommits[i].Author.Email)
|
|
assertions.Equal(c.Annotations["committer_name"], zexlabCommits[i].Committer.FullName)
|
|
assertions.Equal(c.Annotations["committer_email"], zexlabCommits[i].Committer.Email)
|
|
assertions.Equal(c.Annotations["author_date"], zexlabCommits[i].RepoCommit.Author.Date)
|
|
assertions.Equal(c.Annotations["committer_date"], zexlabCommits[i].RepoCommit.Committer.Date)
|
|
}
|
|
}
|
|
|
|
func TestZexlabGetReleases(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
repo := createTestZexlabRepo(t)
|
|
|
|
testCases := []struct {
|
|
vRange string
|
|
re string
|
|
expectedSHA string
|
|
expectedVersion string
|
|
}{
|
|
{"", "", testSHA, "2020.4.19"},
|
|
{"", "^v[0-9]*", testSHA, "2.0.0"},
|
|
{"2-beta", "", testSHA, "2.1.0-beta"},
|
|
{"3-beta", "", testSHA, "3.0.0-beta.2"},
|
|
{"4-beta", "", testSHA, "4.0.0-beta"},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(fmt.Sprintf("VersionRange: %s, Regex: %s", tc.vRange, tc.re), func(t *testing.T) {
|
|
releases, err := repo.GetReleases(tc.re)
|
|
assertions.NoError(err)
|
|
release, err := semrel.GetLatestReleaseFromReleases(releases, tc.vRange)
|
|
require.NoError(t, err)
|
|
assertions.Equal(tc.expectedSHA, release.SHA)
|
|
assertions.Equal(tc.expectedVersion, release.Version)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestZexlabCreateRelease(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
repo := createTestZexlabRepo(t)
|
|
|
|
err := repo.CreateRelease(&provider.CreateReleaseConfig{
|
|
NewVersion: "5.0.0",
|
|
Prerelease: false,
|
|
Branch: "",
|
|
SHA: testSHA,
|
|
})
|
|
assertions.NoError(err)
|
|
}
|
|
|
|
func TestZexlabCreateReleaseStripPrefix(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
repo := &ZexlabRepository{}
|
|
|
|
err := repo.Init(map[string]string{
|
|
"server_url": server.URL,
|
|
"slug": fmt.Sprintf("%s/%s", zexlabUser, zexlabRepo),
|
|
"token": "token",
|
|
"strip_v_tag_prefix": "true",
|
|
})
|
|
|
|
assertions.NoError(err)
|
|
|
|
err = repo.CreateRelease(&provider.CreateReleaseConfig{
|
|
NewVersion: "5.0.0",
|
|
Prerelease: false,
|
|
Branch: "",
|
|
SHA: testSHA,
|
|
})
|
|
assertions.NoError(err)
|
|
}
|
|
|
|
func TestZexlabInvalidTag(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
repo := &ZexlabRepository{}
|
|
|
|
err := repo.Init(map[string]string{
|
|
"server_url": server.URL,
|
|
"slug": fmt.Sprintf("%s/%s", zexlabUser, zexlabRepo),
|
|
"token": "token",
|
|
})
|
|
|
|
assertions.NoError(err)
|
|
|
|
err = repo.CreateRelease(&provider.CreateReleaseConfig{
|
|
NewVersion: "1.0.1",
|
|
Prerelease: false,
|
|
Branch: "",
|
|
SHA: testSHA,
|
|
})
|
|
assertions.Errorf(err, "invalid tag name")
|
|
}
|
|
|
|
func TestZexlabEnvironmentVars(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
testCases := []struct {
|
|
name string
|
|
envVarName string
|
|
envVarValue string
|
|
}{
|
|
{
|
|
"Gitea Environment Var Slug",
|
|
"GITEA_REPOSITORY",
|
|
fmt.Sprintf("%s/%s",
|
|
zexlabUser,
|
|
zexlabRepo),
|
|
},
|
|
{
|
|
"GitHub Actions Environment Var Slug",
|
|
"GITHUB_REPOSITORY",
|
|
fmt.Sprintf("%s/%s",
|
|
zexlabUser,
|
|
zexlabRepo),
|
|
},
|
|
{
|
|
"WoodpeckerCI Environment Var Slug",
|
|
"CI_REPO_NAME",
|
|
fmt.Sprintf("%s/%s",
|
|
zexlabUser,
|
|
zexlabRepo),
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
_ = os.Setenv(tc.envVarName, tc.envVarValue)
|
|
|
|
repo := &ZexlabRepository{}
|
|
err := repo.Init(map[string]string{
|
|
"server_url": server.URL,
|
|
"token": "token",
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
_ = os.Unsetenv(tc.envVarName)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestZexlabTokenNotSet(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
|
|
repo := &ZexlabRepository{}
|
|
err := repo.Init(map[string]string{
|
|
"server_url": server.URL,
|
|
})
|
|
|
|
assertions.Errorf(err, "zexlab token missing")
|
|
}
|
|
|
|
func TestZexlabNonBooleanStripPrefix(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
assertions := require.New(t)
|
|
|
|
repo := &ZexlabRepository{}
|
|
err := repo.Init(map[string]string{
|
|
"server_url": server.URL,
|
|
"slug": fmt.Sprintf("%s/%s", zexlabUser, zexlabRepo),
|
|
"strip_v_tag_prefix": "something",
|
|
"token": "token",
|
|
})
|
|
|
|
assertions.Errorf(err, "failed to set property strip_v_tag_prefix: strconv.ParseBool: parsing \"something\": invalid syntax")
|
|
}
|