package version

import (
	"strings"
	"testing"
)

func TestDefaultVersionRequiresBuildInjection(t *testing.T) {
	if Version != "unknown" {
		t.Fatalf("Version = %q, want build-injected version or unknown default", Version)
	}
}

func TestKnownCommitRejectsPlaceholder(t *testing.T) {
	oldCommit := Commit
	t.Cleanup(func() {
		Commit = oldCommit
	})

	Commit = "none"
	if got := KnownCommit(); got != "" {
		t.Fatalf("KnownCommit() = %q, want empty placeholder", got)
	}
	Commit = "abc123"
	if got := KnownCommit(); got != "abc123" {
		t.Fatalf("KnownCommit() = %q, want abc123", got)
	}
}

func TestGoToolchainVersionUsesInjectedValue(t *testing.T) {
	oldGoVersion := GoVersion
	t.Cleanup(func() {
		GoVersion = oldGoVersion
	})

	GoVersion = "go-test"

	if got := GoToolchainVersion(); got != "go-test" {
		t.Fatalf("GoToolchainVersion() = %q, want %q", got, "go-test")
	}
}

func TestGoToolchainVersionFallsBackToBuildInfo(t *testing.T) {
	oldGoVersion := GoVersion
	t.Cleanup(func() {
		GoVersion = oldGoVersion
	})

	GoVersion = "unknown"

	got := GoToolchainVersion()
	if got == "" || got == "unknown" {
		t.Fatalf("GoToolchainVersion() = %q, want build info Go version", got)
	}
	if !strings.HasPrefix(got, "go") {
		t.Fatalf("GoToolchainVersion() = %q, want Go version string", got)
	}
}
