Обновления: кнопка «Обновить» показывает настоящий результат, устаревшие данные не предлагаются
Жалоба со стенда: в «Обновлениях» висит ЛК 0.2.0, нажимаешь «Обновить» — ничего не происходит. На деле обновление уходило в фон и падало («манифест HTTP 404: релизов в канале нет» — стенд на канале stable, релизы выкладываются в beta), а отказ оседал в незаметной строке «Последняя проверка». - Модули обновляются на месте и во flash показывается фактический результат; в фон уходит только обновление ядра, где ответа установщика всё равно не дождаться (bj-server перезапускается раньше). - Строка результата при отказе показывается предупреждением, а не серым текстом. - Если последняя проверка не удалась, кнопки установки скрыты, у версии — пояснение «нажмите „Проверить обновления“»: предлагать установку по данным неудачной проверки нельзя. - Версии запоминаются вместе с каналом (components_channel); при смене канала прошлые данные забываются — они относились к другому каналу. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package lkgateway
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// После неудачной проверки нельзя предлагать установку по старым данным: кнопка
|
||||
// «Обновить» уходила бы в тот же отказ, и со стороны это выглядит как «ничего не
|
||||
// происходит» (жалоба 18.09 по стенду: ЛК 0.2.0, канал stable пуст).
|
||||
func TestUpdateRowsAfterFailedCheck(t *testing.T) {
|
||||
rc, err := NewRuntimeConfig(filepath.Join(t.TempDir(), "setup.json"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cfg := rc.Snapshot().Update
|
||||
cfg.Channel = "stable"
|
||||
cfg.Components = map[string]string{"bj-lk": "0.2.0"}
|
||||
cfg.ComponentsChannel = "stable"
|
||||
cfg.LastResult = "Обновление не применено: манифест: release: манифест HTTP 404: релизов в канале нет"
|
||||
if err := rc.SaveUpdateSettings(cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
rows, any := updateComponentRows(rc)
|
||||
if any {
|
||||
t.Error("после отказа проверки предлагается обновление")
|
||||
}
|
||||
for _, r := range rows {
|
||||
if r.Update {
|
||||
t.Errorf("%s: кнопка обновления осталась", r.Name)
|
||||
}
|
||||
if r.Name == "bj-lk" && r.Available == "0.2.0" && r.Blocked == "" {
|
||||
t.Error("не объяснено, почему обновление недоступно")
|
||||
}
|
||||
}
|
||||
|
||||
// Версии, найденные в другом канале, к текущему не относятся.
|
||||
cfg.LastResult = "доступны обновления: bj-lk 0.2.0"
|
||||
cfg.ComponentsChannel = "beta"
|
||||
if err := rc.SaveUpdateSettings(cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, r := range updateComponentRowsOnly(rc) {
|
||||
if r.Available != "" {
|
||||
t.Errorf("%s: показана версия из чужого канала (%s)", r.Name, r.Available)
|
||||
}
|
||||
}
|
||||
if !updateResultFailed("Обновление не применено: нет лицензии") || updateResultFailed("все компоненты актуальны") {
|
||||
t.Error("определение отказа работает неверно")
|
||||
}
|
||||
}
|
||||
|
||||
func updateComponentRowsOnly(rc *RuntimeConfig) []componentRow {
|
||||
rows, _ := updateComponentRows(rc)
|
||||
out := make([]componentRow, 0, len(rows))
|
||||
for _, r := range rows {
|
||||
out = append(out, componentRow{Name: r.Name, Available: r.Available})
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
type componentRow struct{ Name, Available string }
|
||||
Reference in New Issue
Block a user