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 }