github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/scripts/internal/workflow-helpers/workflow_test.go (about) 1 package workflow_helpers 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/blang/semver" 8 "github.com/google/go-github/v45/github" 9 "github.com/thoas/go-funk" 10 ) 11 12 func Test_issueWithVersionAssert(t *testing.T) { 13 type args struct { 14 issues []*github.Issue 15 assertion Assertion 16 versionToCompare semver.Version 17 } 18 tests := []struct { 19 name string 20 args args 21 want []int 22 }{ 23 { 24 name: "no version", 25 args: args{ 26 issues: []*github.Issue{ 27 { 28 Title: github.String("this is a commit message"), 29 Number: github.Int(1), 30 }, 31 }, 32 assertion: AssertLT, 33 versionToCompare: semver.MustParse("1.2.3"), 34 }, 35 want: []int{}, 36 }, 37 { 38 name: "Only higher versions when asserting LT", 39 args: args{ 40 issues: funk.Shuffle([]*github.Issue{ 41 { 42 Title: github.String(VersionedPRPrefix + "1.2.4"), 43 Number: github.Int(1), 44 }, 45 { 46 Title: github.String(VersionedPRPrefix + "2.3.4"), 47 Number: github.Int(2), 48 }, 49 }).([]*github.Issue), 50 assertion: AssertLT, 51 versionToCompare: semver.MustParse("1.2.3"), 52 }, 53 want: []int{}, 54 }, 55 { 56 name: "Don't include version being compared with LT", 57 args: args{ 58 issues: funk.Shuffle([]*github.Issue{ 59 { 60 Title: github.String(VersionedPRPrefix + "1.2.2"), 61 Number: github.Int(1), 62 }, 63 { 64 Title: github.String(VersionedPRPrefix + "1.2.3"), 65 Number: github.Int(2), 66 }, 67 }).([]*github.Issue), 68 assertion: AssertLT, 69 versionToCompare: semver.MustParse("1.2.3"), 70 }, 71 want: []int{1}, 72 }, 73 { 74 name: "Matching version when asserting LT", 75 args: args{ 76 issues: funk.Shuffle([]*github.Issue{ 77 { 78 Title: github.String(VersionedPRPrefix + "1.2.2"), 79 Number: github.Int(1), 80 }, 81 { 82 Title: github.String(VersionedPRPrefix + "2.3.4"), 83 Number: github.Int(2), 84 }, 85 }).([]*github.Issue), 86 assertion: AssertLT, 87 versionToCompare: semver.MustParse("1.2.3"), 88 }, 89 want: []int{1}, 90 }, 91 { 92 name: "Multiple matching version when asserting LT", 93 args: args{ 94 issues: funk.Shuffle([]*github.Issue{ 95 { 96 Title: github.String(VersionedPRPrefix + "1.2.2"), 97 Number: github.Int(1), 98 }, 99 { 100 Title: github.String(VersionedPRPrefix + "2.3.4"), 101 Number: github.Int(2), 102 }, 103 { 104 Title: github.String(VersionedPRPrefix + "1.0.0"), 105 Number: github.Int(3), 106 }, 107 }).([]*github.Issue), 108 assertion: AssertLT, 109 versionToCompare: semver.MustParse("1.2.3"), 110 }, 111 want: []int{1, 3}, // Should be ordered by closest matching 112 }, 113 { 114 name: "Only lower versions when asserting GT", 115 args: args{ 116 issues: funk.Shuffle([]*github.Issue{ 117 { 118 Title: github.String(VersionedPRPrefix + "1.2.1"), 119 Number: github.Int(1), 120 }, 121 { 122 Title: github.String(VersionedPRPrefix + "0.1.2"), 123 Number: github.Int(2), 124 }, 125 }).([]*github.Issue), 126 assertion: AssertGT, 127 versionToCompare: semver.MustParse("1.2.3"), 128 }, 129 want: []int{}, 130 }, 131 { 132 name: "Matching version when asserting GT", 133 args: args{ 134 issues: funk.Shuffle([]*github.Issue{ 135 { 136 Title: github.String(VersionedPRPrefix + "1.2.2"), 137 Number: github.Int(1), 138 }, 139 { 140 Title: github.String(VersionedPRPrefix + "2.3.4"), 141 Number: github.Int(2), 142 }, 143 }).([]*github.Issue), 144 assertion: AssertGT, 145 versionToCompare: semver.MustParse("1.2.3"), 146 }, 147 want: []int{2}, 148 }, 149 { 150 name: "Don't include version being compared with GT", 151 args: args{ 152 issues: funk.Shuffle([]*github.Issue{ 153 { 154 Title: github.String(VersionedPRPrefix + "1.2.4"), 155 Number: github.Int(1), 156 }, 157 { 158 Title: github.String(VersionedPRPrefix + "1.2.3"), 159 Number: github.Int(2), 160 }, 161 }).([]*github.Issue), 162 assertion: AssertGT, 163 versionToCompare: semver.MustParse("1.2.3"), 164 }, 165 want: []int{1}, 166 }, 167 { 168 name: "Multiple matching version when asserting GT", 169 args: args{ 170 issues: funk.Shuffle([]*github.Issue{ 171 { 172 Title: github.String(VersionedPRPrefix + "1.2.2"), 173 Number: github.Int(1), 174 }, 175 { 176 Title: github.String(VersionedPRPrefix + "5.4.3"), 177 Number: github.Int(2), 178 }, 179 { 180 Title: github.String(VersionedPRPrefix + "2.3.4"), 181 Number: github.Int(3), 182 }, 183 }).([]*github.Issue), 184 assertion: AssertGT, 185 versionToCompare: semver.MustParse("1.2.3"), 186 }, 187 want: []int{3, 2}, // Should be ordered by closest matching 188 }, 189 } 190 for _, tt := range tests { 191 t.Run(tt.name, func(t *testing.T) { 192 got := issuesWithVersionAssert(tt.args.issues, tt.args.assertion, tt.args.versionToCompare) 193 gotN := []int{} 194 for _, v := range got { 195 gotN = append(gotN, v.GetNumber()) 196 } 197 if !reflect.DeepEqual(gotN, tt.want) { 198 t.Errorf("issueWithVersionLT() = %v, want %v", gotN, tt.want) 199 } 200 }) 201 } 202 }