diff --git a/pkg/action/bump_test.go b/pkg/action/bump_test.go index 66e0c4226..bf6bb70d2 100644 --- a/pkg/action/bump_test.go +++ b/pkg/action/bump_test.go @@ -33,340 +33,183 @@ func TestNewBump(t *testing.T) { require.Equal(t, cfg, client.cfg) } -func TestBump_Run_Major(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, +func TestBump_Run(t *testing.T) { + type variant struct { + name string + bumpType string + wantVersion string } - - t.Run("Major bump with valid version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("major", "") - require.NoError(t, err) - require.Equal(t, "2.0.0", result) - }) - - t.Run("Major bump with invalid version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2" - result, err := client.Run("major", "") - require.Error(t, err) - require.Empty(t, result) - }) - - t.Run("Major bump with invalid major version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.a" - result, err := client.Run("major", "") - require.Error(t, err) - require.Empty(t, result) - }) -} - -func TestBump_Run_Minor(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, + tests := []struct { + originVersion string + variant []variant + wantErr bool + }{ + { + originVersion: "1.2.3", + variant: []variant{ + {name: "Major bump with valid version", bumpType: "major", wantVersion: "2.0.0"}, + {name: "Minor bump with valid version", bumpType: "minor", wantVersion: "1.3.0"}, + {name: "Patch bump with valid version", bumpType: "patch", wantVersion: "1.2.4"}, + {name: "Dev bump with valid version", bumpType: "dev", wantVersion: "1.2.3-dev.1"}, + {name: "RC bump with valid version", bumpType: "rc", wantVersion: "1.2.3-rc.1"}, + {name: "Alpha bump with valid version", bumpType: "alpha", wantVersion: "1.2.3-alpha.1"}, + {name: "Post bump with valid version", bumpType: "post", wantVersion: "1.2.3-post.1"}, + {name: "Explicit version", bumpType: "2.0.1", wantVersion: "2.0.1"}, + {name: "Explicit version", bumpType: "1.8.9-post.1", wantVersion: "1.8.9-post.1"}, + }, + wantErr: false, + }, + { + originVersion: "1.2", + variant: []variant{ + {name: "Major bump with invalid version", bumpType: "major", wantVersion: ""}, + {name: "Minor bump with invalid version", bumpType: "minor", wantVersion: ""}, + {name: "Patch bump with invalid version", bumpType: "patch", wantVersion: ""}, + {name: "Dev bump with invalid version", bumpType: "dev", wantVersion: ""}, + {name: "Beta bump with invalid version", bumpType: "beta", wantVersion: ""}, + {name: "RC bump with invalid version", bumpType: "rc", wantVersion: ""}, + {name: "Post bump with invalid version", bumpType: "post", wantVersion: ""}, + }, + wantErr: true, + }, + { + originVersion: "1.2.a", + variant: []variant{ + {name: "Major bump with invalid version", bumpType: "major", wantVersion: ""}, + {name: "Minor bump with invalid version", bumpType: "minor", wantVersion: ""}, + {name: "Patch bump with invalid version", bumpType: "patch", wantVersion: ""}, + {name: "Dev bump with invalid version", bumpType: "dev", wantVersion: ""}, + {name: "Beta bump with invalid version", bumpType: "beta", wantVersion: ""}, + {name: "RC bump with invalid version", bumpType: "rc", wantVersion: ""}, + {name: "Post bump with invalid version", bumpType: "post", wantVersion: ""}, + }, + wantErr: true, + }, + { + originVersion: "1.a.3", + variant: []variant{ + {name: "Major bump with invalid version", bumpType: "major", wantVersion: ""}, + {name: "Minor bump with invalid version", bumpType: "minor", wantVersion: ""}, + {name: "Patch bump with invalid version", bumpType: "patch", wantVersion: ""}, + {name: "Dev bump with invalid version", bumpType: "dev", wantVersion: ""}, + {name: "Beta bump with invalid version", bumpType: "beta", wantVersion: ""}, + {name: "RC bump with invalid version", bumpType: "rc", wantVersion: ""}, + {name: "Post bump with invalid version", bumpType: "post", wantVersion: ""}, + {name: "Explicit version", bumpType: "2.0.1", wantVersion: ""}, + {name: "Explicit version", bumpType: "1.8.9-post.1", wantVersion: ""}, + }, + wantErr: true, + }, + { + originVersion: "1.2.3-alpha", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "Alpha bump with pre-release version", bumpType: "alpha", wantVersion: "1.2.3-alpha.1"}, + }, + wantErr: false, + }, + { + originVersion: "1.2.3-alpha.1", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "Alpha bump with pre-release version", bumpType: "alpha", wantVersion: "1.2.3-alpha.2"}, + {name: "Explicit version", bumpType: "2.0.1", wantVersion: "2.0.1"}, + {name: "Explicit version", bumpType: "1.8.9-post.1", wantVersion: "1.8.9-post.1"}, + }, + wantErr: false, + }, + { + + originVersion: "1.2.3-beta", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "Beta bump with pre-release version", bumpType: "beta", wantVersion: "1.2.3-beta.1"}, + }, + wantErr: false, + }, + { + originVersion: "1.2.3-beta.1", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "Beta bump with pre-release version", bumpType: "beta", wantVersion: "1.2.3-beta.2"}, + {name: "Explicit version", bumpType: "2.0.1", wantVersion: "2.0.1"}, + }, + wantErr: false, + }, + { + originVersion: "1.2.3-rc", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "RC bump with pre-release version", bumpType: "rc", wantVersion: "1.2.3-rc.1"}, + }, + wantErr: false, + }, + { + originVersion: "1.2.3-rc.1", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "Rc bump with pre-release version", bumpType: "rc", wantVersion: "1.2.3-rc.2"}, + {name: "Explicit version", bumpType: "1.8.9-post.1", wantVersion: "1.8.9-post.1"}, + }, + wantErr: false, + }, + { + originVersion: "1.2.3-post", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "Post bump with pre-release version", bumpType: "post", wantVersion: "1.2.3-post.1"}, + }, + wantErr: false, + }, + { + + originVersion: "1.2.3-post.1", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "RC bump with pre-release version", bumpType: "post", wantVersion: "1.2.3-post.2"}, + {name: "Explicit version", bumpType: "2.0.1", wantVersion: "2.0.1"}, + }, + wantErr: false, + }, + { + originVersion: "1.2.3-dev", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "Dev bump with pre-release version", bumpType: "dev", wantVersion: "1.2.3-dev.1"}, + {name: "Explicit version", bumpType: "2.0.1", wantVersion: "2.0.1"}, + }, + wantErr: false, + }, + { + + originVersion: "1.2.3-dev.1", + variant: []variant{ + {name: "Stable bump with pre-release version", bumpType: "stable", wantVersion: "1.2.3"}, + {name: "Dev bump with pre-release version", bumpType: "dev", wantVersion: "1.2.3-dev.2"}, + {name: "Explicit version", bumpType: "2.0.1", wantVersion: "2.0.1"}, + {name: "Explicit version", bumpType: "1.8.9-post.1", wantVersion: "1.8.9-post.1"}, + }, + wantErr: false, + }, } - - t.Run("Minor bump with valid version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("minor", "") - require.NoError(t, err) - require.Equal(t, "1.3.0", result) - }) - - t.Run("Minor bump with invalid version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2" - result, err := client.Run("minor", "") - require.Error(t, err) - require.Empty(t, result) - }) - - t.Run("Minor bump with invalid minor version", func(t *testing.T) { - client.chart.Metadata.Version = "1.a.3" - result, err := client.Run("minor", "") - require.Error(t, err) - require.Empty(t, result) - }) -} - -func TestBump_Run_Patch(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, + for _, tt := range tests { + for _, v := range tt.variant { + t.Run(v.name, func(t *testing.T) { + cfg := actionConfigFixture(t) + client := NewBump(cfg) + client.chart = &chart.Chart{ + Metadata: &chart.Metadata{Name: "test", Version: tt.originVersion}, + } + + result, err := client.Run(v.bumpType, "") + if tt.wantErr { + require.Error(t, err) + require.Empty(t, result) + } else { + require.NoError(t, err) + require.Equal(t, v.wantVersion, result) + } + }) + } } - - t.Run("Patch bump with valid version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("patch", "") - require.NoError(t, err) - require.Equal(t, "1.2.4", result) - }) - - t.Run("Patch bump with invalid version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2" - result, err := client.Run("patch", "") - require.Error(t, err) - require.Empty(t, result) - }) - - t.Run("Patch bump with invalid patch version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.a" - result, err := client.Run("patch", "") - require.Error(t, err) - require.Empty(t, result) - }) -} - -func TestBump_Run_Stable(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, - } - - t.Run("Stable bump with pre-release version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-alpha" - result, err := client.Run("stable", "") - require.NoError(t, err) - require.Equal(t, "1.2.3", result) - }) - - t.Run("Stable bump with pre-release version with number", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-alpha.1" - result, err := client.Run("stable", "") - require.NoError(t, err) - require.Equal(t, "1.2.3", result) - }) - - t.Run("Stable bump with invalid version format", func(t *testing.T) { - client.chart.Metadata.Version = "1.2" - result, err := client.Run("stable", "") - require.Error(t, err) - require.Empty(t, result) - }) -} - -func TestBump_Run_Alpha(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, - } - - t.Run("Alpha bump with version without pre-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("alpha", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-alpha.1", result) - }) - - t.Run("Alpha bump with version with pre-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-alpha" - result, err := client.Run("alpha", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-alpha.1", result) - }) - - t.Run("Alpha bump with version with pre-release number", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-alpha.1" - result, err := client.Run("alpha", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-alpha.2", result) - }) - - t.Run("Alpha bump with invalid version format", func(t *testing.T) { - client.chart.Metadata.Version = "1.2" - result, err := client.Run("alpha", "") - require.Error(t, err) - require.Empty(t, result) - }) -} - -func TestBump_Run_Beta(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, - } - - t.Run("Beta bump with version without pre-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("beta", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-beta.1", result) - }) - - t.Run("Beta bump with version with pre-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-beta" - result, err := client.Run("beta", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-beta.1", result) - }) - - t.Run("Beta bump with version with pre-release number", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-beta.1" - result, err := client.Run("beta", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-beta.2", result) - }) - - t.Run("Beta bump with invalid version format", func(t *testing.T) { - client.chart.Metadata.Version = "1.2" - result, err := client.Run("beta", "") - require.Error(t, err) - require.Empty(t, result) - }) -} - -func TestBump_Run_RC(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, - } - - t.Run("RC bump with version without pre-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("rc", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-rc.1", result) - }) - - t.Run("RC bump with version with pre-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-rc" - result, err := client.Run("rc", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-rc.1", result) - }) - - t.Run("RC bump with version with pre-release number", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-rc.1" - result, err := client.Run("rc", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-rc.2", result) - }) - - t.Run("RC bump with invalid version format", func(t *testing.T) { - client.chart.Metadata.Version = "1.2" - result, err := client.Run("rc", "") - require.Error(t, err) - require.Empty(t, result) - }) -} - -func TestBump_Run_Post(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, - } - - t.Run("Post bump with version without pre-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("post", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-post.1", result) - }) - - t.Run("Post bump with version with post-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-post" - result, err := client.Run("post", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-post.1", result) - }) - - t.Run("Post bump with version with pre-release number", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-post.1" - result, err := client.Run("post", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-post.2", result) - }) - - t.Run("Post bump with invalid version format", func(t *testing.T) { - client.chart.Metadata.Version = "1.2" - result, err := client.Run("post", "") - require.Error(t, err) - require.Empty(t, result) - }) -} - -func TestBump_Run_Dev(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, - } - - t.Run("Dev bump with version without pre-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("dev", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-dev.1", result) - }) - - t.Run("Dev bump with version with pre-release", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-dev" - result, err := client.Run("dev", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-dev.1", result) - }) - - t.Run("Dev bump with version with pre-release number", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3-dev.1" - result, err := client.Run("dev", "") - require.NoError(t, err) - require.Equal(t, "1.2.3-dev.2", result) - }) - - t.Run("Dev bump with invalid version format", func(t *testing.T) { - client.chart.Metadata.Version = "1.2" - result, err := client.Run("dev", "") - require.Error(t, err) - require.Empty(t, result) - }) -} - -func TestBump_Run_ExplicitVersion(t *testing.T) { - t.Parallel() - - cfg := actionConfigFixture(t) - client := NewBump(cfg) - client.chart = &chart.Chart{ - Metadata: &chart.Metadata{Name: "test"}, - } - - t.Run("Explicit version with valid format", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("2.0.1", "") - require.NoError(t, err) - require.Equal(t, "2.0.1", result) - }) - - t.Run("Explicit version with post version", func(t *testing.T) { - client.chart.Metadata.Version = "1.2.3" - result, err := client.Run("1.5.3-post.1", "") - require.NoError(t, err) - require.Equal(t, "1.5.3-post.1", result) - }) } diff --git a/pkg/cmd/bump_test.go b/pkg/cmd/bump_test.go index e95cc5f1c..82662278d 100644 --- a/pkg/cmd/bump_test.go +++ b/pkg/cmd/bump_test.go @@ -16,6 +16,7 @@ limitations under the License. package cmd import ( + "fmt" "io" "os" "path/filepath" @@ -23,51 +24,62 @@ import ( ) func TestBump(t *testing.T) { - tempChartDir := t.TempDir() - - testChartFile := filepath.Join("testdata", "testcharts", "empty", "Chart.yaml") - - destFile := filepath.Join(tempChartDir, "Chart.yaml") - - srcFile, err := os.Open(testChartFile) - if err != nil { - t.Fatalf("error on opening test file: %v", err) - } - defer srcFile.Close() - - destFileHandle, err := os.Create(destFile) - if err != nil { - t.Fatalf("error on creating test file: %v", err) - } - - _, err = io.Copy(destFileHandle, srcFile) - if err != nil { - t.Fatalf("error on copying test file: %v", err) - } - if err := destFileHandle.Close(); err != nil { - t.Fatalf("error on closing test file: %v", err) - } - tests := []cmdTestCase{{ name: "no args", cmd: "bump", wantError: true, }, { name: "default", - cmd: "bump " + tempChartDir, + cmd: "bump %s", golden: "output/bump-default.txt", }, { name: "patch", - cmd: "bump patch " + tempChartDir, + cmd: "bump patch %s", golden: "output/bump-patch.txt", }, { name: "with bump type", - cmd: "bump minor " + tempChartDir, + cmd: "bump minor %s", golden: "output/bump-minor.txt", }, { name: "with explicit version", - cmd: "bump 2.0.0 " + tempChartDir, + cmd: "bump 2.0.0 %s", golden: "output/bump-explicit.txt", }} - runTestCmd(t, tests) + + // Run tests with a fresh copy of test chart for each test case + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + tempChartDir := t.TempDir() + testChartFile := filepath.Join("testdata", "testcharts", "empty", "Chart.yaml") + destFile := filepath.Join(tempChartDir, "Chart.yaml") + + srcFile, err := os.Open(testChartFile) + if err != nil { + t.Fatalf("error on opening test file: %v", err) + } + defer srcFile.Close() + + destFileHandle, err := os.Create(destFile) + if err != nil { + t.Fatalf("error on creating test file: %v", err) + } + + _, err = io.Copy(destFileHandle, srcFile) + if err != nil { + t.Fatalf("error on copying test file: %v", err) + } + if err := destFileHandle.Close(); err != nil { + t.Fatalf("error on closing test file: %v", err) + } + + // Run the test case with updated command + testCase := cmdTestCase{ + name: tc.name, + cmd: fmt.Sprintf(tc.cmd, tempChartDir), + golden: tc.golden, + wantError: tc.wantError, + } + runTestCmd(t, []cmdTestCase{testCase}) + }) + } } diff --git a/pkg/cmd/testdata/output/bump-patch.txt b/pkg/cmd/testdata/output/bump-patch.txt index 70cc90c57..f642a03e6 100644 --- a/pkg/cmd/testdata/output/bump-patch.txt +++ b/pkg/cmd/testdata/output/bump-patch.txt @@ -1 +1 @@ -changed chart version to "0.1.2" +changed chart version to "0.1.1"