Панель показывала описание только последнего релиза. Пропустив пару версий, человек не узнал бы, что менялось в промежутке, — теперь запрашивается список релизов и показываются все, что новее установленной, каждая со своим заголовком и датой. Черновики и предрелизы отбрасываются, порядок восстанавливается по номерам версий, а не по тому, как их отдал Gitea. Заодно в карточке профиля появились подсказки: сколько на машине ОЗУ (не выбирать же лимит JVM вслепую) и что означает пустое поле начальной памяти. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
90 lines
3.1 KiB
Go
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))
|
|
}
|
|
}
|