7c653a2490
bj собирает версии своих компонентов и внешних систем (в фоне, кэш 10 минут, прогрев при старте): ядро и модули bj (components.json или «-version»), экспортёр ARQA (служба bj-quikexport, /version), криптосервис (Health), «Валидата CSP» (zpki1utl), Java, ИШ НРД (deps.json + сайт НРД), МНП QUIK (VersionInfo), DEPO (OD_DATA_VERSION), PostgreSQL, ОС. «Настройка → Обзор» — таблица «Версии систем» с кнопкой «Обновить сведения»; в разделах БД, Fancy, QUIK МНП, Экспорт QUIK, Криптография, НРД, ЛК, НПР и Обновления — строка с версией. В таблице обновлений у компонентов, выложенных вручную, вместо «неизвестна» — версия самого компонента. bj-component-install: -version. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
79 lines
3.4 KiB
Go
79 lines
3.4 KiB
Go
package lkgateway
|
|
|
|
import (
|
|
"html/template"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// Страница службы модуля встраивается в макет bj: меню и заголовок bj, содержимое — от модуля.
|
|
func TestModulePageWrap(t *testing.T) {
|
|
a, err := newAdmin()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rec := httptest.NewRecorder()
|
|
frag := `<div id="npr-frag"><script src="/admin/npr/static/htmx.min.js"></script>фрагмент</div>`
|
|
render(rec, a.modulePage, modulePageData{page: nowPage("Клиент V3BR061 · НПР / УДС", "npr"), Content: template.HTML(frag)})
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("код %d: %s", rec.Code, rec.Body.String())
|
|
}
|
|
body := rec.Body.String()
|
|
for _, want := range []string{frag, "Клиент V3BR061 · НПР / УДС", "</html>"} {
|
|
if !strings.Contains(body, want) {
|
|
t.Errorf("в странице нет %q", want)
|
|
}
|
|
}
|
|
if strings.Count(body, "<html") != 1 {
|
|
t.Errorf("ожидался один документ, <html встречается %d раз", strings.Count(body, "<html"))
|
|
}
|
|
}
|
|
|
|
// Раздел «Экспорт QUIK» от службы встраивается в страницу настроек, индикатор меню — от службы.
|
|
func TestSetupPageEmbedsQuikExport(t *testing.T) {
|
|
a, err := newAdmin()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rec := httptest.NewRecorder()
|
|
frag := `<h1>QUIK — Экспорт биржевой информации</h1><div id="qx-frag">раздел службы</div>`
|
|
render(rec, a.setup, SetupData{page: nowPage("Настройка", "setup"), AdvancedUnlocked: true, Modules: map[string]bool{"quik-export": true, "quik-mnp": true, "npr": true},
|
|
QuikExport: QuikExportView{HTML: template.HTML(frag), Ind: "warn"}})
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("код %d: %s", rec.Code, rec.Body.String())
|
|
}
|
|
body := rec.Body.String()
|
|
if !strings.Contains(body, frag) {
|
|
t.Error("в странице настроек нет раздела от службы")
|
|
}
|
|
if !strings.Contains(body, `Экспорт QUIK<span class="ind warn">`) {
|
|
t.Error("индикатор меню не взят у службы")
|
|
}
|
|
}
|
|
|
|
// Версии: общий список в «Обзоре» и строка в разделе модуля.
|
|
func TestSetupPageShowsVersions(t *testing.T) {
|
|
a, err := newAdmin()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
vers := SystemVersions{At: time.Now(), Items: []SystemVersion{
|
|
{Key: "quik-mnp", Title: "QUIK — Модуль неторговых поручений", Version: "21.3.0", Detail: "обновлена 05.06.2026", Section: "quik"},
|
|
{Key: "depo", Title: "Fancy DEPO (база DEPO)", Section: "fancy", Err: "нет связи"},
|
|
}}
|
|
rec := httptest.NewRecorder()
|
|
render(rec, a.setup, SetupData{page: nowPage("Настройка", "setup"), AdvancedUnlocked: true, Modules: map[string]bool{"quik-mnp": true}, Versions: vers})
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("код %d: %s", rec.Code, rec.Body.String())
|
|
}
|
|
body := rec.Body.String()
|
|
for _, want := range []string{"Версии систем", "<strong>21.3.0</strong>", "QUIK — Модуль неторговых поручений: <strong>21.3.0</strong> · обновлена 05.06.2026", "не определена", "нет связи"} {
|
|
if !strings.Contains(body, want) {
|
|
t.Errorf("в странице нет %q", want)
|
|
}
|
|
}
|
|
}
|