mirror of
https://github.com/juanfont/headscale.git
synced 2025-10-28 10:51:44 +01:00
294 lines
8.4 KiB
Go
294 lines
8.4 KiB
Go
package cli
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestFilterPreReleasesIfStable(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
currentVersion string
|
|
tag string
|
|
expectedFilter bool
|
|
description string
|
|
}{
|
|
{
|
|
name: "stable version filters alpha tag",
|
|
currentVersion: "0.23.0",
|
|
tag: "v0.24.0-alpha.1",
|
|
expectedFilter: true,
|
|
description: "When on stable release, alpha tags should be filtered",
|
|
},
|
|
{
|
|
name: "stable version filters beta tag",
|
|
currentVersion: "0.23.0",
|
|
tag: "v0.24.0-beta.2",
|
|
expectedFilter: true,
|
|
description: "When on stable release, beta tags should be filtered",
|
|
},
|
|
{
|
|
name: "stable version filters rc tag",
|
|
currentVersion: "0.23.0",
|
|
tag: "v0.24.0-rc.1",
|
|
expectedFilter: true,
|
|
description: "When on stable release, rc tags should be filtered",
|
|
},
|
|
{
|
|
name: "stable version allows stable tag",
|
|
currentVersion: "0.23.0",
|
|
tag: "v0.24.0",
|
|
expectedFilter: false,
|
|
description: "When on stable release, stable tags should not be filtered",
|
|
},
|
|
{
|
|
name: "alpha version allows alpha tag",
|
|
currentVersion: "0.23.0-alpha.1",
|
|
tag: "v0.24.0-alpha.2",
|
|
expectedFilter: false,
|
|
description: "When on alpha release, alpha tags should not be filtered",
|
|
},
|
|
{
|
|
name: "alpha version allows beta tag",
|
|
currentVersion: "0.23.0-alpha.1",
|
|
tag: "v0.24.0-beta.1",
|
|
expectedFilter: false,
|
|
description: "When on alpha release, beta tags should not be filtered",
|
|
},
|
|
{
|
|
name: "alpha version allows rc tag",
|
|
currentVersion: "0.23.0-alpha.1",
|
|
tag: "v0.24.0-rc.1",
|
|
expectedFilter: false,
|
|
description: "When on alpha release, rc tags should not be filtered",
|
|
},
|
|
{
|
|
name: "alpha version allows stable tag",
|
|
currentVersion: "0.23.0-alpha.1",
|
|
tag: "v0.24.0",
|
|
expectedFilter: false,
|
|
description: "When on alpha release, stable tags should not be filtered",
|
|
},
|
|
{
|
|
name: "beta version allows alpha tag",
|
|
currentVersion: "0.23.0-beta.1",
|
|
tag: "v0.24.0-alpha.1",
|
|
expectedFilter: false,
|
|
description: "When on beta release, alpha tags should not be filtered",
|
|
},
|
|
{
|
|
name: "beta version allows beta tag",
|
|
currentVersion: "0.23.0-beta.2",
|
|
tag: "v0.24.0-beta.3",
|
|
expectedFilter: false,
|
|
description: "When on beta release, beta tags should not be filtered",
|
|
},
|
|
{
|
|
name: "beta version allows rc tag",
|
|
currentVersion: "0.23.0-beta.1",
|
|
tag: "v0.24.0-rc.1",
|
|
expectedFilter: false,
|
|
description: "When on beta release, rc tags should not be filtered",
|
|
},
|
|
{
|
|
name: "beta version allows stable tag",
|
|
currentVersion: "0.23.0-beta.1",
|
|
tag: "v0.24.0",
|
|
expectedFilter: false,
|
|
description: "When on beta release, stable tags should not be filtered",
|
|
},
|
|
{
|
|
name: "rc version allows alpha tag",
|
|
currentVersion: "0.23.0-rc.1",
|
|
tag: "v0.24.0-alpha.1",
|
|
expectedFilter: false,
|
|
description: "When on rc release, alpha tags should not be filtered",
|
|
},
|
|
{
|
|
name: "rc version allows beta tag",
|
|
currentVersion: "0.23.0-rc.1",
|
|
tag: "v0.24.0-beta.1",
|
|
expectedFilter: false,
|
|
description: "When on rc release, beta tags should not be filtered",
|
|
},
|
|
{
|
|
name: "rc version allows rc tag",
|
|
currentVersion: "0.23.0-rc.2",
|
|
tag: "v0.24.0-rc.3",
|
|
expectedFilter: false,
|
|
description: "When on rc release, rc tags should not be filtered",
|
|
},
|
|
{
|
|
name: "rc version allows stable tag",
|
|
currentVersion: "0.23.0-rc.1",
|
|
tag: "v0.24.0",
|
|
expectedFilter: false,
|
|
description: "When on rc release, stable tags should not be filtered",
|
|
},
|
|
{
|
|
name: "stable version with patch filters alpha",
|
|
currentVersion: "0.23.1",
|
|
tag: "v0.24.0-alpha.1",
|
|
expectedFilter: true,
|
|
description: "Stable version with patch number should filter alpha tags",
|
|
},
|
|
{
|
|
name: "stable version with patch allows stable",
|
|
currentVersion: "0.23.1",
|
|
tag: "v0.24.0",
|
|
expectedFilter: false,
|
|
description: "Stable version with patch number should allow stable tags",
|
|
},
|
|
{
|
|
name: "tag with alpha substring in version number",
|
|
currentVersion: "0.23.0",
|
|
tag: "v1.0.0-alpha.1",
|
|
expectedFilter: true,
|
|
description: "Tags with alpha in version string should be filtered on stable",
|
|
},
|
|
{
|
|
name: "tag with beta substring in version number",
|
|
currentVersion: "0.23.0",
|
|
tag: "v1.0.0-beta.1",
|
|
expectedFilter: true,
|
|
description: "Tags with beta in version string should be filtered on stable",
|
|
},
|
|
{
|
|
name: "tag with rc substring in version number",
|
|
currentVersion: "0.23.0",
|
|
tag: "v1.0.0-rc.1",
|
|
expectedFilter: true,
|
|
description: "Tags with rc in version string should be filtered on stable",
|
|
},
|
|
{
|
|
name: "empty tag on stable version",
|
|
currentVersion: "0.23.0",
|
|
tag: "",
|
|
expectedFilter: false,
|
|
description: "Empty tags should not be filtered",
|
|
},
|
|
{
|
|
name: "dev version allows all tags",
|
|
currentVersion: "0.23.0-dev",
|
|
tag: "v0.24.0-alpha.1",
|
|
expectedFilter: false,
|
|
description: "Dev versions should not filter any tags (pre-release allows all)",
|
|
},
|
|
{
|
|
name: "stable version filters dev tag",
|
|
currentVersion: "0.23.0",
|
|
tag: "v0.24.0-dev",
|
|
expectedFilter: true,
|
|
description: "When on stable release, dev tags should be filtered",
|
|
},
|
|
{
|
|
name: "dev version allows dev tag",
|
|
currentVersion: "0.23.0-dev",
|
|
tag: "v0.24.0-dev.1",
|
|
expectedFilter: false,
|
|
description: "When on dev release, dev tags should not be filtered",
|
|
},
|
|
{
|
|
name: "dev version allows stable tag",
|
|
currentVersion: "0.23.0-dev",
|
|
tag: "v0.24.0",
|
|
expectedFilter: false,
|
|
description: "When on dev release, stable tags should not be filtered",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := filterPreReleasesIfStable(func() string { return tt.currentVersion })(tt.tag)
|
|
if result != tt.expectedFilter {
|
|
t.Errorf("%s: got %v, want %v\nDescription: %s\nCurrent version: %s, Tag: %s",
|
|
tt.name,
|
|
result,
|
|
tt.expectedFilter,
|
|
tt.description,
|
|
tt.currentVersion,
|
|
tt.tag,
|
|
)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIsPreReleaseVersion(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
version string
|
|
expected bool
|
|
description string
|
|
}{
|
|
{
|
|
name: "stable version",
|
|
version: "0.23.0",
|
|
expected: false,
|
|
description: "Stable version should not be pre-release",
|
|
},
|
|
{
|
|
name: "alpha version",
|
|
version: "0.23.0-alpha.1",
|
|
expected: true,
|
|
description: "Alpha version should be pre-release",
|
|
},
|
|
{
|
|
name: "beta version",
|
|
version: "0.23.0-beta.1",
|
|
expected: true,
|
|
description: "Beta version should be pre-release",
|
|
},
|
|
{
|
|
name: "rc version",
|
|
version: "0.23.0-rc.1",
|
|
expected: true,
|
|
description: "RC version should be pre-release",
|
|
},
|
|
{
|
|
name: "version with alpha substring",
|
|
version: "0.23.0-alphabetical",
|
|
expected: true,
|
|
description: "Version containing 'alpha' should be pre-release",
|
|
},
|
|
{
|
|
name: "version with beta substring",
|
|
version: "0.23.0-betamax",
|
|
expected: true,
|
|
description: "Version containing 'beta' should be pre-release",
|
|
},
|
|
{
|
|
name: "dev version",
|
|
version: "0.23.0-dev",
|
|
expected: true,
|
|
description: "Dev version should be pre-release",
|
|
},
|
|
{
|
|
name: "empty version",
|
|
version: "",
|
|
expected: false,
|
|
description: "Empty version should not be pre-release",
|
|
},
|
|
{
|
|
name: "version with patch number",
|
|
version: "0.23.1",
|
|
expected: false,
|
|
description: "Stable version with patch should not be pre-release",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
result := isPreReleaseVersion(tt.version)
|
|
if result != tt.expected {
|
|
t.Errorf("%s: got %v, want %v\nDescription: %s\nVersion: %s",
|
|
tt.name,
|
|
result,
|
|
tt.expected,
|
|
tt.description,
|
|
tt.version,
|
|
)
|
|
}
|
|
})
|
|
}
|
|
}
|