wails-release/internal/wails/cli_test.go
2026-05-02 11:47:13 +10:00

84 lines
2.1 KiB
Go

package wails_test
import (
"context"
"errors"
"strings"
"testing"
"lmika.dev/actions/wails-release/internal/runner"
"lmika.dev/actions/wails-release/internal/wails"
)
func TestParseInstalledVersion(t *testing.T) {
cases := map[string]string{
"Wails CLI v2.11.0": "v2.11.0",
"Wails CLI v2.10.1\n": "v2.10.1",
"Wails v2.9.0": "v2.9.0",
}
for in, want := range cases {
got, err := wails.ParseCLIVersion([]byte(in))
if err != nil {
t.Fatalf("unexpected error parsing %q: %v", in, err)
}
if got != want {
t.Fatalf("input %q: got %q want %q", in, got, want)
}
}
}
func TestParseInstalledVersion_Unparseable(t *testing.T) {
_, err := wails.ParseCLIVersion([]byte("nope"))
if err == nil {
t.Fatal("expected error")
}
}
func TestEnsureCLI_AlreadyInstalledMatchingSkipsInstall(t *testing.T) {
f := &runner.Fake{}
f.On("wails", []string{"-v"}).Return([]byte("Wails CLI v2.11.0"), nil)
err := wails.EnsureCLI(context.Background(), f, "v2.11.0")
if err != nil {
t.Fatalf("unexpected: %v", err)
}
for _, c := range f.Calls {
if c.Name == "go" {
t.Fatalf("expected no `go install`, got call: %+v", c)
}
}
}
func TestEnsureCLI_MismatchTriggersInstall(t *testing.T) {
f := &runner.Fake{}
f.On("wails", []string{"-v"}).Return([]byte("Wails CLI v2.10.0"), nil)
f.On("go", []string{"install", "github.com/wailsapp/wails/v2/cmd/wails@v2.11.0"}).Return(nil, nil)
err := wails.EnsureCLI(context.Background(), f, "v2.11.0")
if err != nil {
t.Fatalf("unexpected: %v", err)
}
saw := false
for _, c := range f.Calls {
if c.Name == "go" && c.Args[0] == "install" && strings.Contains(c.Args[1], "@v2.11.0") {
saw = true
}
}
if !saw {
t.Fatal("expected go install call, did not see one")
}
}
func TestEnsureCLI_NotInstalledTriggersInstall(t *testing.T) {
f := &runner.Fake{}
f.On("wails", []string{"-v"}).Return(nil, errors.New("exec: not found"))
f.On("go", []string{"install", "github.com/wailsapp/wails/v2/cmd/wails@v2.11.0"}).Return(nil, nil)
err := wails.EnsureCLI(context.Background(), f, "v2.11.0")
if err != nil {
t.Fatalf("unexpected: %v", err)
}
}