mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-01-06 03:13:48 +02:00
8706fd2e89
Currently, GoReleaser will assume you're running against github, gitea or gitlab. You could set `release.disable: true`, but it would still set and try to use some defaults that could break things up. Now, if you disable the release, goreleaser will not set these defaults. It'll also hard error in some cases in which it would happily produce invalid resources before, namely, if `release.disable` is set, and, for example, `brews.url_template` is empty (in which case it would try to use the one from the release, usually github). closes #4208
184 lines
4.6 KiB
Go
184 lines
4.6 KiB
Go
package client
|
|
|
|
import (
|
|
"math/rand"
|
|
"testing"
|
|
|
|
"github.com/goreleaser/goreleaser/internal/testctx"
|
|
"github.com/goreleaser/goreleaser/internal/testlib"
|
|
"github.com/goreleaser/goreleaser/pkg/config"
|
|
"github.com/goreleaser/goreleaser/pkg/context"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestClientEmpty(t *testing.T) {
|
|
ctx := testctx.New()
|
|
client, err := New(ctx)
|
|
require.Nil(t, client)
|
|
require.EqualError(t, err, `invalid client token type: ""`)
|
|
}
|
|
|
|
func TestNewReleaseClient(t *testing.T) {
|
|
t.Run("normal", func(t *testing.T) {
|
|
cli, err := NewReleaseClient(testctx.New(
|
|
testctx.WithTokenType(context.TokenTypeGitHub),
|
|
))
|
|
require.NoError(t, err)
|
|
require.IsType(t, &githubClient{}, cli)
|
|
})
|
|
|
|
t.Run("bad tmpl", func(t *testing.T) {
|
|
_, err := NewReleaseClient(testctx.NewWithCfg(
|
|
config.Project{
|
|
Release: config.Release{
|
|
Disable: "{{ .Nope }}",
|
|
},
|
|
},
|
|
testctx.WithTokenType(context.TokenTypeGitHub),
|
|
))
|
|
testlib.RequireTemplateError(t, err)
|
|
})
|
|
|
|
t.Run("disabled", func(t *testing.T) {
|
|
cli, err := NewReleaseClient(testctx.NewWithCfg(
|
|
config.Project{
|
|
Release: config.Release{
|
|
Disable: "true",
|
|
},
|
|
},
|
|
testctx.WithTokenType(context.TokenTypeGitHub),
|
|
))
|
|
require.NoError(t, err)
|
|
require.IsType(t, errURLTemplater{}, cli)
|
|
|
|
url, err := cli.ReleaseURLTemplate(nil)
|
|
require.Empty(t, url)
|
|
require.ErrorIs(t, err, ErrReleaseDisabled)
|
|
})
|
|
}
|
|
|
|
func TestClientNewGitea(t *testing.T) {
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
GiteaURLs: config.GiteaURLs{
|
|
// TODO: use a mocked http server to cover version api
|
|
API: "https://gitea.com/api/v1",
|
|
Download: "https://gitea.com",
|
|
},
|
|
}, testctx.GiteaTokenType)
|
|
client, err := New(ctx)
|
|
require.NoError(t, err)
|
|
_, ok := client.(*giteaClient)
|
|
require.True(t, ok)
|
|
}
|
|
|
|
func TestClientNewGiteaInvalidURL(t *testing.T) {
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
GiteaURLs: config.GiteaURLs{
|
|
API: "://gitea.com/api/v1",
|
|
},
|
|
}, testctx.GiteaTokenType)
|
|
client, err := New(ctx)
|
|
require.Error(t, err)
|
|
require.Nil(t, client)
|
|
}
|
|
|
|
func TestClientNewGitLab(t *testing.T) {
|
|
ctx := testctx.New(testctx.GitLabTokenType)
|
|
client, err := New(ctx)
|
|
require.NoError(t, err)
|
|
_, ok := client.(*gitlabClient)
|
|
require.True(t, ok)
|
|
}
|
|
|
|
func TestCheckBodyMaxLength(t *testing.T) {
|
|
letters := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
|
b := make([]rune, maxReleaseBodyLength)
|
|
for i := range b {
|
|
b[i] = letters[rand.Intn(len(letters))]
|
|
}
|
|
out := truncateReleaseBody(string(b))
|
|
require.Len(t, out, maxReleaseBodyLength)
|
|
}
|
|
|
|
func TestNewIfToken(t *testing.T) {
|
|
t.Run("valid", func(t *testing.T) {
|
|
ctx := testctx.New(testctx.GitLabTokenType)
|
|
client, err := New(ctx)
|
|
require.NoError(t, err)
|
|
_, ok := client.(*gitlabClient)
|
|
require.True(t, ok)
|
|
|
|
ctx = testctx.NewWithCfg(config.Project{
|
|
Env: []string{"VAR=giteatoken"},
|
|
GiteaURLs: config.GiteaURLs{
|
|
API: "https://gitea.com/api/v1",
|
|
},
|
|
}, testctx.GiteaTokenType)
|
|
client, err = NewIfToken(ctx, client, "{{ .Env.VAR }}")
|
|
require.NoError(t, err)
|
|
_, ok = client.(*giteaClient)
|
|
require.True(t, ok)
|
|
})
|
|
|
|
t.Run("empty", func(t *testing.T) {
|
|
ctx := testctx.New(testctx.GitLabTokenType)
|
|
|
|
client, err := New(ctx)
|
|
require.NoError(t, err)
|
|
|
|
client, err = NewIfToken(ctx, client, "")
|
|
require.NoError(t, err)
|
|
_, ok := client.(*gitlabClient)
|
|
require.True(t, ok)
|
|
})
|
|
|
|
t.Run("invalid tmpl", func(t *testing.T) {
|
|
ctx := testctx.New(testctx.GitLabTokenType)
|
|
_, err := NewIfToken(ctx, nil, "nope")
|
|
require.EqualError(t, err, `expected {{ .Env.VAR_NAME }} only (no plain-text or other interpolation)`)
|
|
})
|
|
}
|
|
|
|
func TestNewWithToken(t *testing.T) {
|
|
t.Run("gitlab", func(t *testing.T) {
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Env: []string{"TK=token"},
|
|
}, testctx.GitLabTokenType)
|
|
|
|
cli, err := newWithToken(ctx, "{{ .Env.TK }}")
|
|
require.NoError(t, err)
|
|
|
|
_, ok := cli.(*gitlabClient)
|
|
require.True(t, ok)
|
|
})
|
|
|
|
t.Run("gitea", func(t *testing.T) {
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Env: []string{"TK=token"},
|
|
GiteaURLs: config.GiteaURLs{
|
|
API: "https://gitea.com/api/v1",
|
|
},
|
|
}, testctx.GiteaTokenType)
|
|
|
|
cli, err := newWithToken(ctx, "{{ .Env.TK }}")
|
|
require.NoError(t, err)
|
|
|
|
_, ok := cli.(*giteaClient)
|
|
require.True(t, ok)
|
|
})
|
|
|
|
t.Run("invalid", func(t *testing.T) {
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Env: []string{"TK=token"},
|
|
}, testctx.WithTokenType(context.TokenType("nope")))
|
|
cli, err := newWithToken(ctx, "{{ .Env.TK }}")
|
|
require.EqualError(t, err, `invalid client token type: "nope"`)
|
|
require.Nil(t, cli)
|
|
})
|
|
}
|
|
|
|
func TestClientBlanks(t *testing.T) {
|
|
repo := Repo{}
|
|
require.Equal(t, "", repo.String())
|
|
}
|