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 }