package service import ( "atsflare/common" "testing" ) func TestIsVersionNewer(t *testing.T) { testCases := []struct { name string current string latest string expected bool }{ {name: "newer patch", current: "v1.2.3", latest: "v1.2.4", expected: true}, {name: "same version", current: "v1.2.3", latest: "v1.2.3", expected: false}, {name: "older remote", current: "v1.3.0", latest: "v1.2.9", expected: false}, {name: "double digit segment", current: "v1.9.9", latest: "v1.10.0", expected: true}, {name: "dev build", current: "dev", latest: "v0.4.0", expected: true}, } for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { actual := isVersionNewer(testCase.current, testCase.latest) if actual != testCase.expected { t.Fatalf("unexpected compare result: current=%s latest=%s actual=%v expected=%v", testCase.current, testCase.latest, actual, testCase.expected) } }) } } func TestBuildLatestServerReleaseView(t *testing.T) { originalVersion := common.Version common.Version = "v0.4.0" t.Cleanup(func() { common.Version = originalVersion serverUpgradeState.Lock() serverUpgradeState.inProgress = false serverUpgradeState.Unlock() }) serverUpgradeState.Lock() serverUpgradeState.inProgress = true serverUpgradeState.Unlock() view := buildLatestServerReleaseView(&githubReleaseResponse{ TagName: "v0.5.0", Body: "release notes", HTMLURL: "https://github.com/Rain-kl/ATSFlare/releases/tag/v0.5.0", PublishedAt: "2026-03-11T00:00:00Z", }) if view.CurrentVersion != "v0.4.0" { t.Fatalf("unexpected current version: %s", view.CurrentVersion) } if !view.HasUpdate { t.Fatal("expected has_update to be true") } if !view.InProgress { t.Fatal("expected in_progress to reflect upgrade state") } if view.TagName != "v0.5.0" { t.Fatalf("unexpected tag name: %s", view.TagName) } } func TestBuildLatestServerReleaseViewDevBuild(t *testing.T) { originalVersion := common.Version common.Version = "dev" t.Cleanup(func() { common.Version = originalVersion serverUpgradeState.Lock() serverUpgradeState.inProgress = false serverUpgradeState.Unlock() }) view := buildLatestServerReleaseView(&githubReleaseResponse{ TagName: "v0.5.0", }) if view.HasUpdate { t.Fatal("expected dev build not to report update availability") } if view.UpgradeSupported { t.Fatal("expected dev build not to support self-upgrade") } }