github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/milestone/milestone_test.go (about)

     1  package milestone
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/goreleaser/goreleaser/internal/client"
     7  	"github.com/goreleaser/goreleaser/internal/testctx"
     8  	"github.com/goreleaser/goreleaser/internal/testlib"
     9  	"github.com/goreleaser/goreleaser/pkg/config"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestContinueOnError(t *testing.T) {
    14  	require.True(t, Pipe{}.ContinueOnError())
    15  }
    16  
    17  func TestDefaultWithRepoConfig(t *testing.T) {
    18  	testlib.Mktmp(t)
    19  	testlib.GitInit(t)
    20  	testlib.GitRemoteAdd(t, "git@github.com:githubowner/githubrepo.git")
    21  
    22  	ctx := testctx.NewWithCfg(config.Project{
    23  		Milestones: []config.Milestone{
    24  			{
    25  				Repo: config.Repo{
    26  					Name:  "configrepo",
    27  					Owner: "configowner",
    28  				},
    29  			},
    30  		},
    31  	}, testctx.GitHubTokenType)
    32  	require.NoError(t, Pipe{}.Default(ctx))
    33  	require.Equal(t, "configrepo", ctx.Config.Milestones[0].Repo.Name)
    34  	require.Equal(t, "configowner", ctx.Config.Milestones[0].Repo.Owner)
    35  }
    36  
    37  func TestDefaultWithInvalidRemote(t *testing.T) {
    38  	testlib.Mktmp(t)
    39  	testlib.GitInit(t)
    40  	testlib.GitRemoteAdd(t, "git@github.com:githubowner.git")
    41  
    42  	ctx := testctx.NewWithCfg(config.Project{
    43  		Milestones: []config.Milestone{{}},
    44  	}, testctx.GitHubTokenType)
    45  	require.Error(t, Pipe{}.Default(ctx))
    46  }
    47  
    48  func TestDefaultWithRepoRemote(t *testing.T) {
    49  	testlib.Mktmp(t)
    50  	testlib.GitInit(t)
    51  	testlib.GitRemoteAdd(t, "git@github.com:githubowner/githubrepo.git")
    52  
    53  	ctx := testctx.NewWithCfg(config.Project{
    54  		Milestones: []config.Milestone{{}},
    55  	}, testctx.GitHubTokenType)
    56  	require.NoError(t, Pipe{}.Default(ctx))
    57  	require.Equal(t, "githubrepo", ctx.Config.Milestones[0].Repo.Name)
    58  	require.Equal(t, "githubowner", ctx.Config.Milestones[0].Repo.Owner)
    59  }
    60  
    61  func TestDefaultWithNameTemplate(t *testing.T) {
    62  	ctx := testctx.NewWithCfg(config.Project{
    63  		Milestones: []config.Milestone{
    64  			{
    65  				NameTemplate: "confignametemplate",
    66  			},
    67  		},
    68  	})
    69  	require.NoError(t, Pipe{}.Default(ctx))
    70  	require.Equal(t, "confignametemplate", ctx.Config.Milestones[0].NameTemplate)
    71  }
    72  
    73  func TestDefaultWithoutGitRepo(t *testing.T) {
    74  	testlib.Mktmp(t)
    75  	ctx := testctx.NewWithCfg(config.Project{
    76  		Milestones: []config.Milestone{{}},
    77  	}, testctx.GitHubTokenType)
    78  	require.EqualError(t, Pipe{}.Default(ctx), "current folder is not a git repository")
    79  	require.Empty(t, ctx.Config.Milestones[0].Repo.String())
    80  }
    81  
    82  func TestDefaultWithoutGitRepoOrigin(t *testing.T) {
    83  	testlib.Mktmp(t)
    84  	ctx := testctx.NewWithCfg(config.Project{
    85  		Milestones: []config.Milestone{{}},
    86  	}, testctx.GitHubTokenType)
    87  	testlib.GitInit(t)
    88  	require.EqualError(t, Pipe{}.Default(ctx), "no remote configured to list refs from")
    89  	require.Empty(t, ctx.Config.Milestones[0].Repo.String())
    90  }
    91  
    92  func TestDefaultWithoutGitRepoSnapshot(t *testing.T) {
    93  	testlib.Mktmp(t)
    94  	ctx := testctx.NewWithCfg(config.Project{
    95  		Milestones: []config.Milestone{{}},
    96  	}, testctx.GitHubTokenType, testctx.Snapshot)
    97  	require.NoError(t, Pipe{}.Default(ctx))
    98  	require.Empty(t, ctx.Config.Milestones[0].Repo.String())
    99  }
   100  
   101  func TestDefaultWithoutNameTemplate(t *testing.T) {
   102  	ctx := testctx.NewWithCfg(config.Project{
   103  		Milestones: []config.Milestone{{}},
   104  	})
   105  	require.NoError(t, Pipe{}.Default(ctx))
   106  	require.Equal(t, "{{ .Tag }}", ctx.Config.Milestones[0].NameTemplate)
   107  }
   108  
   109  func TestString(t *testing.T) {
   110  	require.NotEmpty(t, Pipe{}.String())
   111  }
   112  
   113  func TestPublishCloseDisabled(t *testing.T) {
   114  	ctx := testctx.NewWithCfg(config.Project{
   115  		Milestones: []config.Milestone{
   116  			{
   117  				Close: false,
   118  			},
   119  		},
   120  	})
   121  	client := client.NewMock()
   122  	testlib.AssertSkipped(t, doPublish(ctx, client))
   123  	require.Equal(t, "", client.ClosedMilestone)
   124  }
   125  
   126  func TestPublishCloseEnabled(t *testing.T) {
   127  	ctx := testctx.NewWithCfg(config.Project{
   128  		Milestones: []config.Milestone{
   129  			{
   130  				Close:        true,
   131  				NameTemplate: defaultNameTemplate,
   132  				Repo: config.Repo{
   133  					Name:  "configrepo",
   134  					Owner: "configowner",
   135  				},
   136  			},
   137  		},
   138  	}, testctx.WithCurrentTag("v1.0.0"))
   139  	client := client.NewMock()
   140  	require.NoError(t, doPublish(ctx, client))
   141  	require.Equal(t, "v1.0.0", client.ClosedMilestone)
   142  }
   143  
   144  func TestPublishCloseError(t *testing.T) {
   145  	config := config.Project{
   146  		Milestones: []config.Milestone{
   147  			{
   148  				Close:        true,
   149  				NameTemplate: defaultNameTemplate,
   150  				Repo: config.Repo{
   151  					Name:  "configrepo",
   152  					Owner: "configowner",
   153  				},
   154  			},
   155  		},
   156  	}
   157  	ctx := testctx.NewWithCfg(config, testctx.WithCurrentTag("v1.0.0"))
   158  	client := &client.Mock{
   159  		FailToCloseMilestone: true,
   160  	}
   161  	require.NoError(t, doPublish(ctx, client))
   162  	require.Equal(t, "", client.ClosedMilestone)
   163  }
   164  
   165  func TestPublishCloseFailOnError(t *testing.T) {
   166  	config := config.Project{
   167  		Milestones: []config.Milestone{
   168  			{
   169  				Close:        true,
   170  				FailOnError:  true,
   171  				NameTemplate: defaultNameTemplate,
   172  				Repo: config.Repo{
   173  					Name:  "configrepo",
   174  					Owner: "configowner",
   175  				},
   176  			},
   177  		},
   178  	}
   179  	ctx := testctx.NewWithCfg(config, testctx.WithCurrentTag("v1.0.0"))
   180  	client := &client.Mock{
   181  		FailToCloseMilestone: true,
   182  	}
   183  	require.Error(t, doPublish(ctx, client))
   184  	require.Equal(t, "", client.ClosedMilestone)
   185  }
   186  
   187  func TestSkip(t *testing.T) {
   188  	t.Run("skip", func(t *testing.T) {
   189  		require.True(t, Pipe{}.Skip(testctx.New()))
   190  	})
   191  
   192  	t.Run("dont skip", func(t *testing.T) {
   193  		ctx := testctx.NewWithCfg(config.Project{
   194  			Milestones: []config.Milestone{
   195  				{},
   196  			},
   197  		})
   198  		require.False(t, Pipe{}.Skip(ctx))
   199  	})
   200  }