github.com/goreleaser/goreleaser@v1.25.1/internal/client/client_test.go (about) 1 package client 2 3 import ( 4 "math/rand" 5 "testing" 6 7 "github.com/goreleaser/goreleaser/internal/testctx" 8 "github.com/goreleaser/goreleaser/internal/testlib" 9 "github.com/goreleaser/goreleaser/pkg/config" 10 "github.com/goreleaser/goreleaser/pkg/context" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestClientEmpty(t *testing.T) { 15 ctx := testctx.New() 16 client, err := New(ctx) 17 require.Nil(t, client) 18 require.EqualError(t, err, `invalid client token type: ""`) 19 } 20 21 func TestNewReleaseClient(t *testing.T) { 22 t.Run("normal", func(t *testing.T) { 23 cli, err := NewReleaseClient(testctx.New( 24 testctx.WithTokenType(context.TokenTypeGitHub), 25 )) 26 require.NoError(t, err) 27 require.IsType(t, &githubClient{}, cli) 28 }) 29 30 t.Run("bad tmpl", func(t *testing.T) { 31 _, err := NewReleaseClient(testctx.NewWithCfg( 32 config.Project{ 33 Release: config.Release{ 34 Disable: "{{ .Nope }}", 35 }, 36 }, 37 testctx.WithTokenType(context.TokenTypeGitHub), 38 )) 39 testlib.RequireTemplateError(t, err) 40 }) 41 42 t.Run("disabled", func(t *testing.T) { 43 cli, err := NewReleaseClient(testctx.NewWithCfg( 44 config.Project{ 45 Release: config.Release{ 46 Disable: "true", 47 }, 48 }, 49 testctx.WithTokenType(context.TokenTypeGitHub), 50 )) 51 require.NoError(t, err) 52 require.IsType(t, errURLTemplater{}, cli) 53 54 url, err := cli.ReleaseURLTemplate(nil) 55 require.Empty(t, url) 56 require.ErrorIs(t, err, ErrReleaseDisabled) 57 }) 58 } 59 60 func TestClientNewGitea(t *testing.T) { 61 ctx := testctx.NewWithCfg(config.Project{ 62 GiteaURLs: config.GiteaURLs{ 63 // TODO: use a mocked http server to cover version api 64 API: "https://gitea.com/api/v1", 65 Download: "https://gitea.com", 66 }, 67 }, testctx.GiteaTokenType) 68 client, err := New(ctx) 69 require.NoError(t, err) 70 _, ok := client.(*giteaClient) 71 require.True(t, ok) 72 } 73 74 func TestClientNewGiteaInvalidURL(t *testing.T) { 75 ctx := testctx.NewWithCfg(config.Project{ 76 GiteaURLs: config.GiteaURLs{ 77 API: "://gitea.com/api/v1", 78 }, 79 }, testctx.GiteaTokenType) 80 client, err := New(ctx) 81 require.Error(t, err) 82 require.Nil(t, client) 83 } 84 85 func TestClientNewGitLab(t *testing.T) { 86 ctx := testctx.New(testctx.GitLabTokenType) 87 client, err := New(ctx) 88 require.NoError(t, err) 89 _, ok := client.(*gitlabClient) 90 require.True(t, ok) 91 } 92 93 func TestCheckBodyMaxLength(t *testing.T) { 94 letters := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") 95 b := make([]rune, maxReleaseBodyLength) 96 for i := range b { 97 b[i] = letters[rand.Intn(len(letters))] 98 } 99 out := truncateReleaseBody(string(b)) 100 require.Len(t, out, maxReleaseBodyLength) 101 } 102 103 func TestNewIfToken(t *testing.T) { 104 t.Run("valid", func(t *testing.T) { 105 ctx := testctx.New(testctx.GitLabTokenType) 106 client, err := New(ctx) 107 require.NoError(t, err) 108 _, ok := client.(*gitlabClient) 109 require.True(t, ok) 110 111 ctx = testctx.NewWithCfg(config.Project{ 112 Env: []string{"VAR=giteatoken"}, 113 GiteaURLs: config.GiteaURLs{ 114 API: "https://gitea.com/api/v1", 115 }, 116 }, testctx.GiteaTokenType) 117 client, err = NewIfToken(ctx, client, "{{ .Env.VAR }}") 118 require.NoError(t, err) 119 _, ok = client.(*giteaClient) 120 require.True(t, ok) 121 }) 122 123 t.Run("empty", func(t *testing.T) { 124 ctx := testctx.New(testctx.GitLabTokenType) 125 126 client, err := New(ctx) 127 require.NoError(t, err) 128 129 client, err = NewIfToken(ctx, client, "") 130 require.NoError(t, err) 131 _, ok := client.(*gitlabClient) 132 require.True(t, ok) 133 }) 134 135 t.Run("invalid tmpl", func(t *testing.T) { 136 ctx := testctx.New(testctx.GitLabTokenType) 137 _, err := NewIfToken(ctx, nil, "nope") 138 require.EqualError(t, err, `expected {{ .Env.VAR_NAME }} only (no plain-text or other interpolation)`) 139 }) 140 } 141 142 func TestNewWithToken(t *testing.T) { 143 t.Run("gitlab", func(t *testing.T) { 144 ctx := testctx.NewWithCfg(config.Project{ 145 Env: []string{"TK=token"}, 146 }, testctx.GitLabTokenType) 147 148 cli, err := newWithToken(ctx, "{{ .Env.TK }}") 149 require.NoError(t, err) 150 151 _, ok := cli.(*gitlabClient) 152 require.True(t, ok) 153 }) 154 155 t.Run("gitea", func(t *testing.T) { 156 ctx := testctx.NewWithCfg(config.Project{ 157 Env: []string{"TK=token"}, 158 GiteaURLs: config.GiteaURLs{ 159 API: "https://gitea.com/api/v1", 160 }, 161 }, testctx.GiteaTokenType) 162 163 cli, err := newWithToken(ctx, "{{ .Env.TK }}") 164 require.NoError(t, err) 165 166 _, ok := cli.(*giteaClient) 167 require.True(t, ok) 168 }) 169 170 t.Run("invalid", func(t *testing.T) { 171 ctx := testctx.NewWithCfg(config.Project{ 172 Env: []string{"TK=token"}, 173 }, testctx.WithTokenType(context.TokenType("nope"))) 174 cli, err := newWithToken(ctx, "{{ .Env.TK }}") 175 require.EqualError(t, err, `invalid client token type: "nope"`) 176 require.Nil(t, cli) 177 }) 178 } 179 180 func TestClientBlanks(t *testing.T) { 181 repo := Repo{} 182 require.Equal(t, "", repo.String()) 183 }