(t *testing.T)
| 236 | } |
| 237 | |
| 238 | func TestMajorVersionPreference(t *testing.T) { |
| 239 | // Test that the version selection logic prefers major-only versions (v8) |
| 240 | // over full semantic versions (v8.0.0) when they are semantically equal. |
| 241 | // This follows GitHub Actions best practice of using major version tags. |
| 242 | |
| 243 | tests := []struct { |
| 244 | name string |
| 245 | releases []string |
| 246 | currentVersion string |
| 247 | allowMajor bool |
| 248 | expectedVersion string |
| 249 | expectedPreferred string // The version that should be preferred (v8 over v8.0.0.0) |
| 250 | }{ |
| 251 | { |
| 252 | name: "prefer v8 over v8.0.0", |
| 253 | releases: []string{"v8.0.0", "v8", "v7.0.0"}, |
| 254 | currentVersion: "v8", |
| 255 | allowMajor: false, |
| 256 | expectedVersion: "v8", |
| 257 | expectedPreferred: "v8", |
| 258 | }, |
| 259 | { |
| 260 | name: "prefer v6 over v6.0.0", |
| 261 | releases: []string{"v6.0.0", "v6", "v5.0.0"}, |
| 262 | currentVersion: "v6", |
| 263 | allowMajor: false, |
| 264 | expectedVersion: "v6", |
| 265 | expectedPreferred: "v6", |
| 266 | }, |
| 267 | { |
| 268 | name: "prefer v8 over v8.0.0.0 (four-part version)", |
| 269 | releases: []string{"v8.0.0.0", "v8"}, |
| 270 | currentVersion: "v8", |
| 271 | allowMajor: false, |
| 272 | expectedVersion: "v8", |
| 273 | expectedPreferred: "v8", |
| 274 | }, |
| 275 | { |
| 276 | name: "prefer newest when versions differ", |
| 277 | releases: []string{"v8.1.0", "v8.0.0", "v8"}, |
| 278 | currentVersion: "v8", |
| 279 | allowMajor: false, |
| 280 | expectedVersion: "v8.1.0", |
| 281 | expectedPreferred: "v8.1.0", |
| 282 | }, |
| 283 | } |
| 284 | |
| 285 | for _, tt := range tests { |
| 286 | t.Run(tt.name, func(t *testing.T) { |
| 287 | currentVer := parseVersion(tt.currentVersion) |
| 288 | if currentVer == nil { |
| 289 | t.Fatalf("Failed to parse current version: %s", tt.currentVersion) |
| 290 | } |
| 291 | |
| 292 | var latestCompatible string |
| 293 | var latestCompatibleVersion *semverutil.SemanticVersion |
| 294 | |
| 295 | for _, release := range tt.releases { |
nothing calls this directly
no test coverage detected