Files
Bridge-and-Join-s/internal/lkgateway/npr_proxy_test.go
T
fontvielle 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
2026-10-21 23:44:52 +03:00

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)
}
}
}