core/mise/mise_test.go
core/mise/mise_test.goBrowse 1970 files
1,735 tokens
5,236 bytes
Token encoding: o200k_base
Snapshot 21a254f
← Back to SKILL.md
1package mise2 3import (4 "fmt"5 "os"6 "strings"7 "testing"8 9 "github.com/stretchr/testify/require"10)11 12func TestMistGetLatestVersion(t *testing.T) {13 tempDir, err := os.MkdirTemp("", "mise-test")14 if err != nil {15 t.Fatalf("failed to create temp dir: %v", err)16 }17 defer func() { _ = os.RemoveAll(tempDir) }()18 19 mise, err := New(tempDir)20 if err != nil {21 t.Fatalf("failed to create mise: %v", err)22 }23 24 tests := []struct {25 name string26 runtime string27 version string28 wantPrefix string29 wantErr bool30 }{31 {32 name: "node latest version",33 runtime: "node",34 version: "22",35 wantPrefix: "22",36 },37 {38 name: "bun latest version",39 runtime: "bun",40 version: "latest",41 },42 {43 name: "non-existent latest version",44 runtime: "node",45 version: "999",46 wantErr: true,47 },48 }49 50 for _, tt := range tests {51 t.Run(tt.name, func(t *testing.T) {52 got, err := mise.GetLatestVersion(tt.runtime, tt.version)53 if (err != nil) != tt.wantErr {54 t.Errorf("GetLatestVersion() error = %v, wantErr %v", err, tt.wantErr)55 return56 }57 if !tt.wantErr {58 if tt.wantPrefix != "" && !strings.HasPrefix(got, tt.wantPrefix) {59 t.Errorf("GetLatestVersion() got = %v, want prefix %v", got, tt.wantPrefix)60 }61 if got == "" {62 t.Error("GetLatestVersion() got empty version")63 }64 }65 })66 }67}68 69func TestMiseGetLatestVersionLTS(t *testing.T) {70 tempDir, err := os.MkdirTemp("", "mise-test")71 if err != nil {72 t.Fatalf("failed to create temp dir: %v", err)73 }74 defer func() { _ = os.RemoveAll(tempDir) }()75 76 mise, err := New(tempDir)77 if err != nil {78 t.Fatalf("failed to create mise: %v", err)79 }80 81 latest, err := mise.GetLatestVersion("node", "lts")82 require.NoError(t, err)83 require.Regexp(t, `^\d+\.\d+\.\d+$`, latest)84}85 86func TestVersionQueryCandidates(t *testing.T) {87 tests := []struct {88 name string89 version string90 expected []string91 }{92 {name: "major", version: "22", expected: []string{"22"}},93 {name: "major and minor", version: "22.1", expected: []string{"22.1"}},94 {name: "full version", version: "22.1.3", expected: []string{"22.1.3"}},95 {name: "prefixed version", version: "v22", expected: []string{"22", "v22"}},96 {name: "embedded version", version: "node-22.1", expected: []string{"22.1", "node-22.1"}},97 {name: "alias", version: "lts", expected: []string{"lts"}},98 }99 100 for _, tt := range tests {101 t.Run(tt.name, func(t *testing.T) {102 require.Equal(t, tt.expected, versionQueryCandidates(tt.version))103 })104 }105}106 107func TestMiseGetAllVersions(t *testing.T) {108 tempDir, err := os.MkdirTemp("", "mise-test")109 if err != nil {110 t.Fatalf("failed to create temp dir: %v", err)111 }112 defer func() { _ = os.RemoveAll(tempDir) }()113 114 mise, err := New(tempDir)115 if err != nil {116 t.Fatalf("failed to create mise: %v", err)117 }118 119 tests := []struct {120 name string121 runtime string122 version string123 versions []string124 wantErr bool125 }{126 {127 name: "node all versions",128 runtime: "node",129 version: "18.20",130 versions: []string{"18.20.0", "18.20.1", "18.20.2", "18.20.3", "18.20.4", "18.20.5", "18.20.6", "18.20.7", "18.20.8"},131 },132 {133 name: "bun all versions",134 runtime: "bun",135 version: "0.8",136 versions: []string{"0.8.0", "0.8.1"},137 },138 {139 name: "php all versions",140 runtime: "php",141 version: "7.4.2",142 versions: []string{"7.4.2", "7.4.20", "7.4.21", "7.4.22", "7.4.23", "7.4.24", "7.4.25", "7.4.26", "7.4.27", "7.4.28", "7.4.29"},143 },144 {145 name: "non-existent all versions",146 runtime: "node",147 version: "999",148 wantErr: true,149 },150 }151 152 for _, tt := range tests {153 t.Run(tt.name, func(t *testing.T) {154 got, err := mise.GetAllVersions(tt.runtime, tt.version)155 if (err != nil) != tt.wantErr {156 t.Errorf("GetAllVersions() error = %v, wantErr %v", err, tt.wantErr)157 return158 }159 160 if !tt.wantErr {161 require.Equal(t, tt.versions, got)162 }163 })164 }165}166 167func TestMiseVersion(t *testing.T) {168 require.NotEmpty(t, Version, "mise version file should not be empty")169 require.Equal(t, strings.TrimSpace(Version), Version, "mise version file should be trimmed")170 require.Regexp(t, `^\d+\.\d+\.\d+$`, Version, "mise version should match format YYYY.M.D")171}172 173func TestGetAssetName(t *testing.T) {174 tests := []struct {175 goos string176 goarch string177 expected string178 }{179 {goos: "linux", goarch: "amd64", expected: "linux-x64-musl.tar.gz"},180 {goos: "linux", goarch: "arm64", expected: "linux-arm64-musl.tar.gz"},181 {goos: "linux", goarch: "arm", expected: "linux-armv7-musl.tar.gz"},182 {goos: "darwin", goarch: "amd64", expected: "macos-x64.tar.gz"},183 {goos: "darwin", goarch: "arm64", expected: "macos-arm64.tar.gz"},184 {goos: "windows", goarch: "amd64", expected: "windows-x64.zip"},185 {goos: "windows", goarch: "arm64", expected: "windows-arm64.zip"},186 }187 188 for _, tt := range tests {189 t.Run(tt.goos+"-"+tt.goarch, func(t *testing.T) {190 assetName, err := getAssetName(tt.goos, tt.goarch)191 require.NoError(t, err)192 require.Equal(t, fmt.Sprintf("mise-v%s-%s", Version, tt.expected), assetName)193 })194 }195}196 197func TestGetAssetNameUnsupportedPlatform(t *testing.T) {198 _, err := getAssetName("plan9", "amd64")199 require.EqualError(t, err, "unsupported platform: plan9 amd64")200}201