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 }