11package semrel
22
33import (
4+ "fmt"
45 "strings"
56 "testing"
67
@@ -13,11 +14,11 @@ func TestCaluclateChange(t *testing.T) {
1314 {SHA : "b" , Change : Change {false , true , false }},
1415 {SHA : "c" , Change : Change {false , false , true }},
1516 }
16- change := CaluclateChange (commits , & Release {})
17+ change := CalculateChange (commits , & Release {})
1718 if ! change .Major || ! change .Minor || ! change .Patch {
1819 t .Fail ()
1920 }
20- change = CaluclateChange (commits , & Release {SHA : "a" })
21+ change = CalculateChange (commits , & Release {SHA : "a" })
2122 if change .Major || change .Minor || change .Patch {
2223 t .Fail ()
2324 }
@@ -29,42 +30,44 @@ func TestCaluclateChange(t *testing.T) {
2930}
3031
3132func TestApplyChange (t * testing.T ) {
32- version , _ := semver .NewVersion ("1.0.0" )
33- newVersion := ApplyChange (version , Change {false , false , false })
34- if newVersion != nil {
35- t .Fail ()
36- }
37- newVersion = ApplyChange (version , Change {false , false , true })
38- if newVersion .String () != "1.0.1" {
39- t .Fail ()
40- }
41- newVersion = ApplyChange (version , Change {false , true , true })
42- if newVersion .String () != "1.1.0" {
43- t .Fail ()
44- }
45- newVersion = ApplyChange (version , Change {true , true , true })
46- if newVersion .String () != "2.0.0" {
47- t .Fail ()
48- }
49- version , _ = semver .NewVersion ("0.1.0" )
50- newVersion = ApplyChange (version , Change {})
51- if newVersion .String () != "1.0.0" {
52- t .Fail ()
53- }
54- version , _ = semver .NewVersion ("2.0.0-beta" )
55- newVersion = ApplyChange (version , Change {true , true , true })
56- if newVersion .String () != "2.0.0-beta.1" {
57- t .Fail ()
58- }
59- version , _ = semver .NewVersion ("2.0.0-beta.2" )
60- newVersion = ApplyChange (version , Change {true , true , true })
61- if newVersion .String () != "2.0.0-beta.3" {
62- t .Fail ()
33+ NoChange := Change {false , false , false }
34+ PatchChange := Change {false , false , true }
35+ MinorChange := Change {false , true , true }
36+ MajorChange := Change {true , true , true }
37+
38+ testCases := []struct {
39+ currentVersion string
40+ change Change
41+ expectedVersion string
42+ }{
43+ {"1.0.0" , NoChange , "" },
44+ {"1.0.0" , PatchChange , "1.0.1" },
45+ {"1.0.0" , MinorChange , "1.1.0" },
46+ {"1.0.0" , MajorChange , "2.0.0" },
47+ {"0.1.0" , NoChange , "1.0.0" },
48+
49+ {"2.0.0-beta" , MajorChange , "2.0.0-beta.1" },
50+ {"2.0.0-beta.2" , MajorChange , "2.0.0-beta.3" },
51+ {"2.0.0-beta.1.1" , MajorChange , "2.0.0-beta.2" },
6352 }
64- version , _ = semver .NewVersion ("2.0.0-beta.1.1" )
65- newVersion = ApplyChange (version , Change {true , true , true })
66- if newVersion .String () != "2.0.0-beta.2" {
67- t .Fail ()
53+
54+ for _ , tc := range testCases {
55+ t .Run (fmt .Sprintf ("Version: %s, Change: %v, Expected: %s" , tc .currentVersion , tc .change , tc .expectedVersion ), func (t * testing.T ) {
56+ current , err := semver .NewVersion (tc .currentVersion )
57+
58+ if err != nil {
59+ t .Errorf ("failed to create version: %v" , err )
60+ }
61+
62+ actual := ApplyChange (current , tc .change )
63+
64+ // Handle no new version case
65+ if actual != nil && tc .expectedVersion == "" {
66+ if actual .String () != tc .expectedVersion {
67+ t .Errorf ("expected: %s, got: %s" , tc .expectedVersion , actual )
68+ }
69+ }
70+ })
6871 }
6972}
7073
0 commit comments