2019-08-26 09:31:38 +02:00
|
|
|
package client
|
|
|
|
|
|
|
|
import (
|
2021-11-11 14:31:01 +02:00
|
|
|
"math/rand"
|
2019-08-26 09:31:38 +02:00
|
|
|
"testing"
|
|
|
|
|
2024-05-26 20:02:57 +02:00
|
|
|
"github.com/goreleaser/goreleaser/v2/internal/testctx"
|
|
|
|
"github.com/goreleaser/goreleaser/v2/internal/testlib"
|
|
|
|
"github.com/goreleaser/goreleaser/v2/pkg/config"
|
|
|
|
"github.com/goreleaser/goreleaser/v2/pkg/context"
|
2020-10-06 14:48:04 +02:00
|
|
|
"github.com/stretchr/testify/require"
|
2019-08-26 09:31:38 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestClientEmpty(t *testing.T) {
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx := testctx.New()
|
2019-08-26 09:31:38 +02:00
|
|
|
client, err := New(ctx)
|
2020-10-06 14:48:04 +02:00
|
|
|
require.Nil(t, client)
|
2021-09-27 13:13:56 +02:00
|
|
|
require.EqualError(t, err, `invalid client token type: ""`)
|
2019-08-26 09:31:38 +02:00
|
|
|
}
|
|
|
|
|
feat: allow goreleaser to run in gerrit, soft-serve and others (#4271)
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
2023-09-04 16:23:38 +02:00
|
|
|
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)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2019-08-26 09:31:38 +02:00
|
|
|
func TestClientNewGitea(t *testing.T) {
|
2023-03-02 05:01:11 +02:00
|
|
|
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",
|
2019-08-26 09:31:38 +02:00
|
|
|
},
|
2023-03-02 05:01:11 +02:00
|
|
|
}, testctx.GiteaTokenType)
|
2019-08-26 09:31:38 +02:00
|
|
|
client, err := New(ctx)
|
2020-10-06 14:48:04 +02:00
|
|
|
require.NoError(t, err)
|
2019-08-26 09:31:38 +02:00
|
|
|
_, ok := client.(*giteaClient)
|
2020-10-06 14:48:04 +02:00
|
|
|
require.True(t, ok)
|
2019-08-26 09:31:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestClientNewGiteaInvalidURL(t *testing.T) {
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
|
|
GiteaURLs: config.GiteaURLs{
|
|
|
|
API: "://gitea.com/api/v1",
|
2019-08-26 09:31:38 +02:00
|
|
|
},
|
2023-03-02 05:01:11 +02:00
|
|
|
}, testctx.GiteaTokenType)
|
2019-08-26 09:31:38 +02:00
|
|
|
client, err := New(ctx)
|
2020-10-06 14:48:04 +02:00
|
|
|
require.Error(t, err)
|
|
|
|
require.Nil(t, client)
|
2019-08-26 09:31:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestClientNewGitLab(t *testing.T) {
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx := testctx.New(testctx.GitLabTokenType)
|
2019-08-26 09:31:38 +02:00
|
|
|
client, err := New(ctx)
|
2020-10-06 14:48:04 +02:00
|
|
|
require.NoError(t, err)
|
2019-08-26 09:31:38 +02:00
|
|
|
_, ok := client.(*gitlabClient)
|
2020-10-06 14:48:04 +02:00
|
|
|
require.True(t, ok)
|
2019-08-26 09:31:38 +02:00
|
|
|
}
|
2021-09-18 15:21:29 +02:00
|
|
|
|
2021-11-11 14:31:01 +02:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2021-09-18 15:21:29 +02:00
|
|
|
func TestNewIfToken(t *testing.T) {
|
|
|
|
t.Run("valid", func(t *testing.T) {
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx := testctx.New(testctx.GitLabTokenType)
|
2021-09-18 15:21:29 +02:00
|
|
|
client, err := New(ctx)
|
|
|
|
require.NoError(t, err)
|
|
|
|
_, ok := client.(*gitlabClient)
|
|
|
|
require.True(t, ok)
|
|
|
|
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx = testctx.NewWithCfg(config.Project{
|
2023-07-14 03:36:48 +02:00
|
|
|
Env: []string{"VAR=giteatoken"},
|
2023-03-02 05:01:11 +02:00
|
|
|
GiteaURLs: config.GiteaURLs{
|
|
|
|
API: "https://gitea.com/api/v1",
|
2021-09-18 15:21:29 +02:00
|
|
|
},
|
2023-03-02 05:01:11 +02:00
|
|
|
}, testctx.GiteaTokenType)
|
2021-09-18 15:21:29 +02:00
|
|
|
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) {
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx := testctx.New(testctx.GitLabTokenType)
|
2021-09-18 15:21:29 +02:00
|
|
|
|
|
|
|
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) {
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx := testctx.New(testctx.GitLabTokenType)
|
2021-09-18 15:21:29 +02:00
|
|
|
_, 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) {
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
|
|
Env: []string{"TK=token"},
|
|
|
|
}, testctx.GitLabTokenType)
|
2021-09-18 15:21:29 +02:00
|
|
|
|
|
|
|
cli, err := newWithToken(ctx, "{{ .Env.TK }}")
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
_, ok := cli.(*gitlabClient)
|
|
|
|
require.True(t, ok)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("gitea", func(t *testing.T) {
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
|
|
Env: []string{"TK=token"},
|
|
|
|
GiteaURLs: config.GiteaURLs{
|
|
|
|
API: "https://gitea.com/api/v1",
|
2021-09-18 15:21:29 +02:00
|
|
|
},
|
2023-03-02 05:01:11 +02:00
|
|
|
}, testctx.GiteaTokenType)
|
2021-09-18 15:21:29 +02:00
|
|
|
|
|
|
|
cli, err := newWithToken(ctx, "{{ .Env.TK }}")
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
_, ok := cli.(*giteaClient)
|
|
|
|
require.True(t, ok)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("invalid", func(t *testing.T) {
|
2023-03-02 05:01:11 +02:00
|
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
|
|
Env: []string{"TK=token"},
|
|
|
|
}, testctx.WithTokenType(context.TokenType("nope")))
|
2021-09-18 15:21:29 +02:00
|
|
|
cli, err := newWithToken(ctx, "{{ .Env.TK }}")
|
2021-09-27 13:13:56 +02:00
|
|
|
require.EqualError(t, err, `invalid client token type: "nope"`)
|
2021-09-18 15:21:29 +02:00
|
|
|
require.Nil(t, cli)
|
|
|
|
})
|
|
|
|
}
|
2021-10-25 15:29:19 +02:00
|
|
|
|
|
|
|
func TestClientBlanks(t *testing.T) {
|
|
|
|
repo := Repo{}
|
|
|
|
require.Equal(t, "", repo.String())
|
|
|
|
}
|