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  }