github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/cmd/step/create/pr/step_create_pr_versions_test.go (about) 1 // +build unit 2 3 package pr_test 4 5 import ( 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/olli-ai/jx/v2/pkg/cmd/clients/fake" 12 13 "github.com/olli-ai/jx/v2/pkg/cmd/opts/step" 14 15 "github.com/olli-ai/jx/v2/pkg/cmd/step/create/pr" 16 17 "github.com/olli-ai/jx/v2/pkg/helm" 18 "github.com/olli-ai/jx/v2/pkg/tests" 19 "github.com/olli-ai/jx/v2/pkg/util" 20 "github.com/petergtz/pegomock" 21 "github.com/stretchr/testify/assert" 22 "k8s.io/helm/pkg/proto/hapi/chart" 23 24 "github.com/olli-ai/jx/v2/pkg/cmd/opts" 25 "github.com/olli-ai/jx/v2/pkg/gits" 26 helm_test "github.com/olli-ai/jx/v2/pkg/helm/mocks" 27 "github.com/olli-ai/jx/v2/pkg/kube" 28 resources_test "github.com/olli-ai/jx/v2/pkg/kube/resources/mocks" 29 "k8s.io/apimachinery/pkg/runtime" 30 31 "github.com/olli-ai/jx/v2/pkg/cmd/testhelpers" 32 ) 33 34 func TestCreatePullRequestUpdateVersionFilesFn(t *testing.T) { 35 commonOpts := &opts.CommonOptions{} 36 commonOpts.SetFactory(fake.NewFakeFactory()) 37 38 gitter := gits.NewGitCLI() 39 roadRunnerOrg, err := gits.NewFakeRepository("acme", "roadrunner", func(dir string) error { 40 return ioutil.WriteFile(filepath.Join(dir, "README"), []byte("TODO"), 0600) 41 }, gitter) 42 assert.NoError(t, err) 43 wileOrg, err := gits.NewFakeRepository("acme", "wile", func(dir string) error { 44 return ioutil.WriteFile(filepath.Join(dir, "README"), []byte("TODO"), 0600) 45 }, gitter) 46 assert.NoError(t, err) 47 gitProvider := gits.NewFakeProvider(roadRunnerOrg, wileOrg) 48 helmer := helm_test.NewMockHelmer() 49 50 testhelpers.ConfigureTestOptionsWithResources(commonOpts, 51 []runtime.Object{}, 52 []runtime.Object{ 53 kube.NewPermanentEnvironment("EnvWhereApplicationIsDeployed"), 54 }, 55 gitter, 56 gitProvider, 57 helmer, 58 resources_test.NewMockInstaller(), 59 ) 60 o := pr.StepCreatePullRequestVersionsOptions{ 61 StepCreatePrOptions: pr.StepCreatePrOptions{ 62 StepCreateOptions: step.StepCreateOptions{ 63 StepOptions: step.StepOptions{ 64 CommonOptions: commonOpts, 65 }, 66 }, 67 }, 68 } 69 t.Run("star", func(t *testing.T) { 70 pegomock.RegisterMockTestingT(t) 71 72 pegomock.When(helmer.SearchCharts(pegomock.EqString("acme/wile"), pegomock.EqBool(true))).ThenReturn(pegomock.ReturnValue([]helm.ChartSummary{ 73 { 74 Name: "wile", 75 ChartVersion: "1.0.1", 76 AppVersion: "1.0.1", 77 Description: "", 78 }, 79 { 80 Name: "wile", 81 ChartVersion: "1.0.0", 82 AppVersion: "1.0.0", 83 Description: "", 84 }, 85 }), pegomock.ReturnValue(nil)) 86 pegomock.When(helmer.SearchCharts(pegomock.EqString("acme/roadrunner"), pegomock.EqBool(true))).ThenReturn(pegomock.ReturnValue([]helm.ChartSummary{ 87 { 88 Name: "roadrunner", 89 ChartVersion: "2.0.1", 90 AppVersion: "2.0.1", 91 Description: "", 92 }, 93 { 94 Name: "roadrunner", 95 ChartVersion: "1.0.1", 96 AppVersion: "1.0.1", 97 Description: "", 98 }, 99 }), pegomock.ReturnValue(nil)) 100 helm_test.StubFetchChart("acme/wile", "1.0.1", "", &chart.Chart{ 101 Metadata: &chart.Metadata{ 102 Name: "wile", 103 Version: "1.0.1", 104 }, 105 }, helmer) 106 helm_test.StubFetchChart("acme/roadrunner", "2.0.1", "", &chart.Chart{ 107 Metadata: &chart.Metadata{ 108 Name: "roadrunner", 109 Version: "2.0.1", 110 Sources: []string{ 111 "https://fake.git/acme/roadrunner", 112 }, 113 }, 114 }, helmer) 115 pegomock.When(helmer.IsRepoMissing("https://acme.com/charts")).ThenReturn(pegomock.ReturnValue(false), pegomock.ReturnValue("acme"), pegomock.ReturnValue(nil)) 116 fn := o.CreatePullRequestUpdateVersionFilesFn([]string{"*"}, make([]string, 0), "charts", helmer) 117 dir, err := ioutil.TempDir("", "") 118 defer func() { 119 err := os.RemoveAll(dir) 120 assert.NoError(t, err) 121 }() 122 assert.NoError(t, err) 123 err = util.CopyDir(filepath.Join("testdata/TestCreatePullRequestUpdateVersionFilesFn"), dir, true) 124 assert.NoError(t, err) 125 err = gitter.Init(dir) 126 assert.NoError(t, err) 127 err = gitter.Add(dir, "*") 128 assert.NoError(t, err) 129 err = gitter.CommitDir(dir, "Initial commit") 130 assert.NoError(t, err) 131 gitInfo, err := gits.ParseGitURL("https://fake.git/acme/e") 132 answer, err := fn(dir, gitInfo) 133 assert.NoError(t, err) 134 assert.Len(t, answer, 0) 135 tests.AssertFileContains(t, filepath.Join(dir, "charts", "acme", "wile.yml"), "version: 1.0.1") 136 tests.AssertFileContains(t, filepath.Join(dir, "charts", "acme", "roadrunner.yml"), "version: 2.0.1") 137 }) 138 t.Run("excludes", func(t *testing.T) { 139 pegomock.RegisterMockTestingT(t) 140 141 pegomock.When(helmer.SearchCharts(pegomock.EqString("acme/wile"), pegomock.EqBool(true))).ThenReturn(pegomock.ReturnValue([]helm.ChartSummary{ 142 { 143 Name: "wile", 144 ChartVersion: "1.0.1", 145 AppVersion: "1.0.1", 146 Description: "", 147 }, 148 { 149 Name: "wile", 150 ChartVersion: "1.0.0", 151 AppVersion: "1.0.0", 152 Description: "", 153 }, 154 }), pegomock.ReturnValue(nil)) 155 pegomock.When(helmer.SearchCharts(pegomock.EqString("acme/roadrunner"), pegomock.EqBool(true))).ThenReturn(pegomock.ReturnValue([]helm.ChartSummary{ 156 { 157 Name: "roadrunner", 158 ChartVersion: "2.0.1", 159 AppVersion: "2.0.1", 160 Description: "", 161 }, 162 { 163 Name: "roadrunner", 164 ChartVersion: "1.0.1", 165 AppVersion: "1.0.1", 166 Description: "", 167 }, 168 }), pegomock.ReturnValue(nil)) 169 helm_test.StubFetchChart("acme/wile", "1.0.1", "", &chart.Chart{ 170 Metadata: &chart.Metadata{ 171 Name: "wile", 172 Version: "1.0.1", 173 }, 174 }, helmer) 175 helm_test.StubFetchChart("acme/roadrunner", "2.0.1", "", &chart.Chart{ 176 Metadata: &chart.Metadata{ 177 Name: "roadrunner", 178 Version: "2.0.1", 179 Sources: []string{ 180 "https://fake.git/acme/roadrunner", 181 }, 182 }, 183 }, helmer) 184 pegomock.When(helmer.IsRepoMissing("https://acme.com/charts")).ThenReturn(pegomock.ReturnValue(false), pegomock.ReturnValue("acme"), pegomock.ReturnValue(nil)) 185 fn := o.CreatePullRequestUpdateVersionFilesFn([]string{"*"}, []string{"acme/wile"}, "charts", helmer) 186 dir, err := ioutil.TempDir("", "") 187 defer func() { 188 err := os.RemoveAll(dir) 189 assert.NoError(t, err) 190 }() 191 assert.NoError(t, err) 192 err = util.CopyDir(filepath.Join("testdata/TestCreatePullRequestUpdateVersionFilesFn"), dir, true) 193 assert.NoError(t, err) 194 err = gitter.Init(dir) 195 assert.NoError(t, err) 196 err = gitter.Add(dir, "*") 197 assert.NoError(t, err) 198 err = gitter.CommitDir(dir, "Initial commit") 199 assert.NoError(t, err) 200 gitInfo, err := gits.ParseGitURL("https://fake.git/acme/e") 201 answer, err := fn(dir, gitInfo) 202 assert.NoError(t, err) 203 assert.Len(t, answer, 0) 204 tests.AssertFileContains(t, filepath.Join(dir, "charts", "acme", "wile.yml"), "version: 1.0.0") 205 tests.AssertFileContains(t, filepath.Join(dir, "charts", "acme", "roadrunner.yml"), "version: 2.0.1") 206 }) 207 t.Run("specific", func(t *testing.T) { 208 pegomock.RegisterMockTestingT(t) 209 210 pegomock.When(helmer.SearchCharts(pegomock.EqString("acme/wile"), pegomock.EqBool(true))).ThenReturn(pegomock.ReturnValue([]helm.ChartSummary{ 211 { 212 Name: "wile", 213 ChartVersion: "1.0.1", 214 AppVersion: "1.0.1", 215 Description: "", 216 }, 217 { 218 Name: "wile", 219 ChartVersion: "1.0.0", 220 AppVersion: "1.0.0", 221 Description: "", 222 }, 223 }), pegomock.ReturnValue(nil)) 224 pegomock.When(helmer.SearchCharts(pegomock.EqString("acme/roadrunner"), pegomock.EqBool(true))).ThenReturn(pegomock.ReturnValue([]helm.ChartSummary{ 225 { 226 Name: "roadrunner", 227 ChartVersion: "2.0.1", 228 AppVersion: "2.0.1", 229 Description: "", 230 }, 231 { 232 Name: "roadrunner", 233 ChartVersion: "1.0.1", 234 AppVersion: "1.0.1", 235 Description: "", 236 }, 237 }), pegomock.ReturnValue(nil)) 238 helm_test.StubFetchChart("acme/wile", "1.0.1", "", &chart.Chart{ 239 Metadata: &chart.Metadata{ 240 Name: "wile", 241 Version: "1.0.1", 242 }, 243 }, helmer) 244 helm_test.StubFetchChart("acme/roadrunner", "2.0.1", "", &chart.Chart{ 245 Metadata: &chart.Metadata{ 246 Name: "roadrunner", 247 Version: "2.0.1", 248 Sources: []string{ 249 "https://fake.git/acme/roadrunner", 250 }, 251 }, 252 }, helmer) 253 pegomock.When(helmer.IsRepoMissing("https://acme.com/charts")).ThenReturn(pegomock.ReturnValue(false), pegomock.ReturnValue("acme"), pegomock.ReturnValue(nil)) 254 fn := o.CreatePullRequestUpdateVersionFilesFn([]string{"acme/roadrunner"}, make([]string, 0), "charts", helmer) 255 dir, err := ioutil.TempDir("", "") 256 defer func() { 257 err := os.RemoveAll(dir) 258 assert.NoError(t, err) 259 }() 260 assert.NoError(t, err) 261 err = util.CopyDir(filepath.Join("testdata/TestCreatePullRequestUpdateVersionFilesFn"), dir, true) 262 assert.NoError(t, err) 263 err = gitter.Init(dir) 264 assert.NoError(t, err) 265 err = gitter.Add(dir, "*") 266 assert.NoError(t, err) 267 err = gitter.CommitDir(dir, "Initial commit") 268 assert.NoError(t, err) 269 gitInfo, err := gits.ParseGitURL("https://fake.git/acme/e") 270 answer, err := fn(dir, gitInfo) 271 assert.NoError(t, err) 272 assert.Len(t, answer, 0) 273 tests.AssertFileContains(t, filepath.Join(dir, "charts", "acme", "wile.yml"), "version: 1.0.0") 274 tests.AssertFileContains(t, filepath.Join(dir, "charts", "acme", "roadrunner.yml"), "version: 2.0.1") 275 }) 276 }