github.com/joselitofilho/goreleaser@v0.155.1-0.20210123221854-e4891856c593/internal/pipe/milestone/milestone_test.go (about)

     1  package milestone
     2  
     3  import (
     4  	"errors"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/goreleaser/goreleaser/internal/artifact"
     9  	"github.com/goreleaser/goreleaser/internal/client"
    10  	"github.com/goreleaser/goreleaser/internal/testlib"
    11  	"github.com/goreleaser/goreleaser/pkg/config"
    12  	"github.com/goreleaser/goreleaser/pkg/context"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestDefaultWithRepoConfig(t *testing.T) {
    17  	testlib.Mktmp(t)
    18  	testlib.GitInit(t)
    19  	testlib.GitRemoteAdd(t, "git@github.com:githubowner/githubrepo.git")
    20  
    21  	var ctx = &context.Context{
    22  		Config: config.Project{
    23  			Milestones: []config.Milestone{
    24  				{
    25  					Repo: config.Repo{
    26  						Name:  "configrepo",
    27  						Owner: "configowner",
    28  					},
    29  				},
    30  			},
    31  		},
    32  	}
    33  	ctx.TokenType = context.TokenTypeGitHub
    34  	require.NoError(t, Pipe{}.Default(ctx))
    35  	require.Equal(t, "configrepo", ctx.Config.Milestones[0].Repo.Name)
    36  	require.Equal(t, "configowner", ctx.Config.Milestones[0].Repo.Owner)
    37  }
    38  
    39  func TestDefaultWithRepoRemote(t *testing.T) {
    40  	testlib.Mktmp(t)
    41  	testlib.GitInit(t)
    42  	testlib.GitRemoteAdd(t, "git@github.com:githubowner/githubrepo.git")
    43  
    44  	var ctx = context.New(config.Project{})
    45  	ctx.TokenType = context.TokenTypeGitHub
    46  	require.NoError(t, Pipe{}.Default(ctx))
    47  	require.Equal(t, "githubrepo", ctx.Config.Milestones[0].Repo.Name)
    48  	require.Equal(t, "githubowner", ctx.Config.Milestones[0].Repo.Owner)
    49  }
    50  
    51  func TestDefaultWithNameTemplate(t *testing.T) {
    52  	var ctx = &context.Context{
    53  		Config: config.Project{
    54  			Milestones: []config.Milestone{
    55  				{
    56  					NameTemplate: "confignametemplate",
    57  				},
    58  			},
    59  		},
    60  	}
    61  	require.NoError(t, Pipe{}.Default(ctx))
    62  	require.Equal(t, "confignametemplate", ctx.Config.Milestones[0].NameTemplate)
    63  }
    64  
    65  func TestDefaultWithoutGitRepo(t *testing.T) {
    66  	testlib.Mktmp(t)
    67  	var ctx = &context.Context{
    68  		Config: config.Project{},
    69  	}
    70  	ctx.TokenType = context.TokenTypeGitHub
    71  	require.EqualError(t, Pipe{}.Default(ctx), "current folder is not a git repository")
    72  	require.Empty(t, ctx.Config.Milestones[0].Repo.String())
    73  }
    74  
    75  func TestDefaultWithoutGitRepoOrigin(t *testing.T) {
    76  	testlib.Mktmp(t)
    77  	var ctx = &context.Context{
    78  		Config: config.Project{},
    79  	}
    80  	ctx.TokenType = context.TokenTypeGitHub
    81  	testlib.GitInit(t)
    82  	require.EqualError(t, Pipe{}.Default(ctx), "repository doesn't have an `origin` remote")
    83  	require.Empty(t, ctx.Config.Milestones[0].Repo.String())
    84  }
    85  
    86  func TestDefaultWithoutGitRepoSnapshot(t *testing.T) {
    87  	testlib.Mktmp(t)
    88  	var ctx = &context.Context{
    89  		Config: config.Project{},
    90  	}
    91  	ctx.TokenType = context.TokenTypeGitHub
    92  	ctx.Snapshot = true
    93  	require.NoError(t, Pipe{}.Default(ctx))
    94  	require.Empty(t, ctx.Config.Milestones[0].Repo.String())
    95  }
    96  
    97  func TestDefaultWithoutNameTemplate(t *testing.T) {
    98  	var ctx = &context.Context{
    99  		Config: config.Project{
   100  			Milestones: []config.Milestone{},
   101  		},
   102  	}
   103  	require.NoError(t, Pipe{}.Default(ctx))
   104  	require.Equal(t, "{{ .Tag }}", ctx.Config.Milestones[0].NameTemplate)
   105  }
   106  
   107  func TestString(t *testing.T) {
   108  	require.NotEmpty(t, Pipe{}.String())
   109  }
   110  
   111  func TestPublishCloseDisabled(t *testing.T) {
   112  	var ctx = context.New(config.Project{
   113  		Milestones: []config.Milestone{
   114  			{
   115  				Close: false,
   116  			},
   117  		},
   118  	})
   119  	client := &DummyClient{}
   120  	testlib.AssertSkipped(t, doPublish(ctx, client))
   121  	require.Equal(t, "", client.ClosedMilestone)
   122  }
   123  
   124  func TestPublishCloseEnabled(t *testing.T) {
   125  	var ctx = context.New(config.Project{
   126  		Milestones: []config.Milestone{
   127  			{
   128  				Close:        true,
   129  				NameTemplate: defaultNameTemplate,
   130  				Repo: config.Repo{
   131  					Name:  "configrepo",
   132  					Owner: "configowner",
   133  				},
   134  			},
   135  		},
   136  	})
   137  	ctx.Git.CurrentTag = "v1.0.0"
   138  	client := &DummyClient{}
   139  	require.NoError(t, doPublish(ctx, client))
   140  	require.Equal(t, "v1.0.0", client.ClosedMilestone)
   141  }
   142  
   143  func TestPublishCloseError(t *testing.T) {
   144  	var config = config.Project{
   145  		Milestones: []config.Milestone{
   146  			{
   147  				Close:        true,
   148  				NameTemplate: defaultNameTemplate,
   149  				Repo: config.Repo{
   150  					Name:  "configrepo",
   151  					Owner: "configowner",
   152  				},
   153  			},
   154  		},
   155  	}
   156  	var ctx = context.New(config)
   157  	ctx.Git.CurrentTag = "v1.0.0"
   158  	client := &DummyClient{
   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  	var 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  	var ctx = context.New(config)
   180  	ctx.Git.CurrentTag = "v1.0.0"
   181  	client := &DummyClient{
   182  		FailToCloseMilestone: true,
   183  	}
   184  	require.Error(t, doPublish(ctx, client))
   185  	require.Equal(t, "", client.ClosedMilestone)
   186  }
   187  
   188  type DummyClient struct {
   189  	ClosedMilestone      string
   190  	FailToCloseMilestone bool
   191  }
   192  
   193  func (c *DummyClient) CloseMilestone(ctx *context.Context, repo client.Repo, title string) error {
   194  	if c.FailToCloseMilestone {
   195  		return errors.New("milestone failed")
   196  	}
   197  
   198  	c.ClosedMilestone = title
   199  
   200  	return nil
   201  }
   202  
   203  func (c *DummyClient) CreateRelease(ctx *context.Context, body string) (string, error) {
   204  	return "", nil
   205  }
   206  
   207  func (c *DummyClient) ReleaseURLTemplate(ctx *context.Context) (string, error) {
   208  	return "", nil
   209  }
   210  
   211  func (c *DummyClient) CreateFile(ctx *context.Context, commitAuthor config.CommitAuthor, repo client.Repo, content []byte, path, msg string) error {
   212  	return nil
   213  }
   214  
   215  func (c *DummyClient) Upload(ctx *context.Context, releaseID string, artifact *artifact.Artifact, file *os.File) error {
   216  	return nil
   217  }