f1065e369a
Техника — только в режиме разработчика (devOn): - версии: клиенту — bj, шлюз НРД, СКЗИ, QUIK, DEPO, без «Подробностей» (Java, bj-crypto, пути, установщик, ОС, PostgreSQL — разработчикам) - Криптография: строки crypto-service/java, параметры провайдера и сокет, серийные номера, журнал сверки (клиенту — только при ошибке), дамп справочника и путь nsd-certs; убрана карточка «Ключ организации» — дубль сводки - НРД: строка версии ИШ (дубль сводки), «Расширенные» (адреса, контейнеры, config.xml), имя профиля ключа, адрес канала; контур по-русски - Обновления: имена файлов и служб, адрес артефактории и ключ издателя - Диагностика: имена служб и сырые состояния; справочник участников — без кодов - ключи ролей и модулей лицензии, путь users.json, DSN/Ping/in-memory, FTV_M2M, путь Валидаты и служба bj-crypto в мастере, «проверена ZETIT», Samba Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
85 lines
3.6 KiB
Go
85 lines
3.6 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>", "не определена"} {
|
|
if !strings.Contains(body, want) {
|
|
t.Errorf("в странице нет %q", want)
|
|
}
|
|
}
|
|
for _, not := range []string{"обновлена 05.06.2026"} {
|
|
if strings.Contains(body, not) {
|
|
t.Errorf("клиенту видно %q", not)
|
|
}
|
|
}
|
|
}
|