Files
mrleo1nidandClaude Opus 5 4a346c4ed9
CI / test (push) Successful in 21s
Release / release (push) Successful in 29s
В обновлении видно изменения всех пропущенных версий
Панель показывала описание только последнего релиза. Пропустив пару
версий, человек не узнал бы, что менялось в промежутке, — теперь
запрашивается список релизов и показываются все, что новее установленной,
каждая со своим заголовком и датой. Черновики и предрелизы отбрасываются,
порядок восстанавливается по номерам версий, а не по тому, как их отдал
Gitea.

Заодно в карточке профиля появились подсказки: сколько на машине ОЗУ (не
выбирать же лимит JVM вслепую) и что означает пустое поле начальной
памяти.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 02:25:16 +03:00

90 lines
3.1 KiB
Go

package updater
import "testing"
func TestIsNewer(t *testing.T) {
cases := []struct {
current, latest string
want bool
}{
{"v1.0.0", "v1.0.1", true},
{"v1.0.0", "v1.1.0", true},
{"v1.0.0", "v2.0.0", true},
{"v1.2.3", "v1.2.3", false},
{"v1.2.3", "v1.2.2", false},
{"v2.0.0", "v1.9.9", false},
// Сборка из рабочей копии не знает, что в ней, — предлагаем релиз.
{"dev", "v1.0.0", true},
{"", "v1.0.0", true},
// Без релизов обновляться некуда.
{"v1.0.0", "", false},
// Разное число компонентов.
{"v1.0", "v1.0.1", true},
{"1.0.0", "v1.0.0", false},
// Предрелизные суффиксы в сравнении чисел не участвуют.
{"v1.0.0-rc1", "v1.0.0", false},
{"v1.0.0", "v1.0.1-rc1", true},
}
for _, c := range cases {
if got := IsNewer(c.current, c.latest); got != c.want {
t.Errorf("IsNewer(%q, %q) = %v, ожидалось %v", c.current, c.latest, got, c.want)
}
}
}
func TestAPIBase(t *testing.T) {
cases := map[string]string{
"https://gitea.hsrv.site/mrleo1nid/pzmanager": "https://gitea.hsrv.site/api/v1/repos/mrleo1nid/pzmanager",
"https://gitea.hsrv.site/mrleo1nid/pzmanager.git": "https://gitea.hsrv.site/api/v1/repos/mrleo1nid/pzmanager",
"https://gitea.hsrv.site/mrleo1nid/pzmanager/": "https://gitea.hsrv.site/api/v1/repos/mrleo1nid/pzmanager",
"http://192.168.0.5:3000/team/pzmanager": "http://192.168.0.5:3000/api/v1/repos/team/pzmanager",
}
for repo, want := range cases {
got, err := New(repo, "dev").apiBase()
if err != nil {
t.Errorf("apiBase(%q): %v", repo, err)
continue
}
if got != want {
t.Errorf("apiBase(%q) = %q, ожидалось %q", repo, got, want)
}
}
for _, bad := range []string{"gitea.hsrv.site/owner/repo", "https://gitea.hsrv.site", ""} {
if _, err := New(bad, "dev").apiBase(); err == nil {
t.Errorf("адрес %q принят, ожидалась ошибка", bad)
}
}
}
func TestNewerThan(t *testing.T) {
notes := []ReleaseNote{
{Version: "v0.3.0"},
{Version: "v0.2.2"},
{Version: "v0.2.1"},
{Version: "v0.2.0"},
{Version: "v0.1.3"},
}
got := NewerThan(notes, "v0.2.0")
want := []string{"v0.3.0", "v0.2.2", "v0.2.1"}
if len(got) != len(want) {
t.Fatalf("отобрано %d версий, ожидалось %d: %v", len(got), len(want), got)
}
for i, version := range want {
if got[i].Version != version {
t.Errorf("changelog[%d] = %s, ожидалось %s", i, got[i].Version, version)
}
}
// На последней версии показывать нечего.
if got := NewerThan(notes, "v0.3.0"); len(got) != 0 {
t.Errorf("на последней версии отобрано %d записей: %v", len(got), got)
}
// Сборка из рабочей копии не знает своей версии — показываем всё.
if got := NewerThan(notes, "dev"); len(got) != len(notes) {
t.Errorf("для dev отобрано %d из %d записей", len(got), len(notes))
}
}