Files
semver-generator/cmd/utils/config_test.go
T

202 lines
3.8 KiB
Go

package utils
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
)
func TestApplyForcedVersioning(t *testing.T) {
tests := []struct {
name string
force Force
semver SemVer
want SemVer
}{
{
name: "No forced versioning",
force: Force{
Major: 0,
Minor: 0,
Patch: 0,
},
semver: SemVer{
Major: 1,
Minor: 2,
Patch: 3,
},
want: SemVer{
Major: 1,
Minor: 2,
Patch: 3,
},
},
{
name: "Force major version",
force: Force{
Major: 5,
Minor: 0,
Patch: 0,
},
semver: SemVer{
Major: 1,
Minor: 2,
Patch: 3,
},
want: SemVer{
Major: 5,
Minor: 2,
Patch: 3,
},
},
{
name: "Force minor version",
force: Force{
Major: 0,
Minor: 7,
Patch: 0,
},
semver: SemVer{
Major: 1,
Minor: 2,
Patch: 3,
},
want: SemVer{
Major: 1,
Minor: 7,
Patch: 3,
},
},
{
name: "Force patch version",
force: Force{
Major: 0,
Minor: 0,
Patch: 9,
},
semver: SemVer{
Major: 1,
Minor: 2,
Patch: 3,
},
want: SemVer{
Major: 1,
Minor: 2,
Patch: 9,
},
},
{
name: "Force all versions",
force: Force{
Major: 5,
Minor: 7,
Patch: 9,
},
semver: SemVer{
Major: 1,
Minor: 2,
Patch: 3,
},
want: SemVer{
Major: 5,
Minor: 7,
Patch: 9,
},
},
}
// Initialize logger for tests
InitLogger(false)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
semver := tt.semver
ApplyForcedVersioning(tt.force, &semver)
assert.Equal(t, tt.want.Major, semver.Major, "Major version mismatch")
assert.Equal(t, tt.want.Minor, semver.Minor, "Minor version mismatch")
assert.Equal(t, tt.want.Patch, semver.Patch, "Patch version mismatch")
})
}
}
func TestReadConfig(t *testing.T) {
// Create a temporary config file for testing
configContent := `
version: 1
force:
major: 2
minor: 3
patch: 4
commit: abcdef1234567890
existing: true
strict: false
blacklist:
- "Merge branch"
- "Merge pull request"
wording:
patch:
- update
- fix
minor:
- change
- feature
major:
- breaking
release:
- release-candidate
`
tempFile, err := os.CreateTemp("", "semver-config-*.yaml")
if err != nil {
t.Fatalf("Failed to create temp file: %v", err)
}
defer os.Remove(tempFile.Name())
if _, err := tempFile.Write([]byte(configContent)); err != nil {
t.Fatalf("Failed to write to temp file: %v", err)
}
if err := tempFile.Close(); err != nil {
t.Fatalf("Failed to close temp file: %v", err)
}
// Initialize logger for tests
InitLogger(false)
// Test reading the config
config, err := ReadConfig(tempFile.Name())
assert.NoError(t, err)
assert.NotNil(t, config)
// Verify force settings
assert.Equal(t, 2, config.Force.Major)
assert.Equal(t, 3, config.Force.Minor)
assert.Equal(t, 4, config.Force.Patch)
assert.Equal(t, "abcdef1234567890", config.Force.Commit)
assert.True(t, config.Force.Existing)
assert.False(t, config.Force.Strict)
// Verify blacklist
assert.Len(t, config.Blacklist, 2)
assert.Contains(t, config.Blacklist, "Merge branch")
assert.Contains(t, config.Blacklist, "Merge pull request")
// Verify wording
assert.Len(t, config.Wording.Patch, 2)
assert.Contains(t, config.Wording.Patch, "update")
assert.Contains(t, config.Wording.Patch, "fix")
assert.Len(t, config.Wording.Minor, 2)
assert.Contains(t, config.Wording.Minor, "change")
assert.Contains(t, config.Wording.Minor, "feature")
assert.Len(t, config.Wording.Major, 1)
assert.Contains(t, config.Wording.Major, "breaking")
assert.Len(t, config.Wording.Release, 1)
assert.Contains(t, config.Wording.Release, "release-candidate")
// Test reading a non-existent config
_, err = ReadConfig("non-existent-file.yaml")
assert.Error(t, err)
}