Files
Bridge-and-Join-s/internal/lkgateway/onec_test.go
T
zuevav 773fa8e0bf Мастер: шапка на месте; домен — только логин и пароль; модуль «1С: база мидл-офиса» (тест)
- Шапка мастера: правый блок (шлюз НРД, пользователь, тема) снова справа — после правила [hidden] скрытое меню перестало его распирать.
- Домен в шаге «Учётные записи»: bj сам находит домен и контроллеры (логин с @домен, домены поиска DNS, rootDSE DNS-серверов, SRV _ldap._tcp.dc._msdcs); адрес и домен — в расширенных настройках, открываются сами, если не нашлось. Контроллеры по очереди, LDAPS → LDAP+StartTLS.
- Неудачная попытка ничего не теряет: введённое (и пароль) — черновиком, форма заполнена; причины словами (неизвестный ЦС, имя в сертификате, IP вместо имени, порт закрыт, нет в DNS).
- Сертификат неизвестного центра: карточка «кем выдан, отпечаток (SHA-1 как в Windows и SHA-256)» и «Доверять и подключить»; после входа bj берёт из домена сертификат центра (AIA / Certification Authorities), подписавший сертификат контроллера, — подходят все контроллеры. То же в Настройка → Пользователи при «Проверить».
- Лицензия: модуль onec-middle «1С: база мидл-офиса (тест)»; раздел настроек — адрес публикации, пользователь, пароль, проверка через OData $metadata; в мастере — в «Модулях».
- ЛК (callback, API, готовность) — только при модуле «ЕСИА Финанс»; карточка режима QUIK и стили настроек как в мастере.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 01:03:16 +03:00

57 lines
2.1 KiB
Go

package lkgateway
import (
"context"
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func TestOneCBase(t *testing.T) {
for in, want := range map[string]string{
"http://1c/middle/": "http://1c/middle",
"1c-server/middle": "http://1c-server/middle",
"https://1c/mid/odata/standard.odata/$metadata": "https://1c/mid",
" http://1c/mid/OData/standard.odata ": "http://1c/mid",
} {
if got := oneCBase(in); got != want {
t.Errorf("oneCBase(%q) = %q, want %q", in, got, want)
}
}
}
func TestOneCCheck(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
u, p, _ := r.BasicAuth()
switch {
case !strings.HasPrefix(r.URL.Path, "/mid/odata/standard.odata/$metadata"):
http.NotFound(w, r)
case u != "bj" || p != "секрет":
w.WriteHeader(http.StatusUnauthorized)
default:
w.Write([]byte(`<edmx:Edmx><edmx:DataServices><Schema><EntityType Name="Catalog_Клиенты"/><EntityType Name="Document_Поручение"/></Schema></edmx:DataServices></edmx:Edmx>`))
}
}))
defer srv.Close()
ctx := context.Background()
if ok, msg := oneCCheck(ctx, OneCSettings{URL: srv.URL + "/mid", User: "bj", Password: "секрет"}); !ok || !strings.Contains(msg, "объектов в OData — 2") {
t.Fatalf("рабочее подключение: %v %q", ok, msg)
}
if ok, msg := oneCCheck(ctx, OneCSettings{URL: srv.URL + "/mid", User: "bj", Password: "не тот"}); ok || !strings.Contains(msg, "не пустила") {
t.Fatalf("неверный пароль: %v %q", ok, msg)
}
if ok, msg := oneCCheck(ctx, OneCSettings{URL: srv.URL + "/other", User: "bj", Password: "секрет"}); ok || !strings.Contains(msg, "Публиковать стандартный интерфейс OData") {
t.Fatalf("без OData: %v %q", ok, msg)
}
}
func TestOneCModuleGate(t *testing.T) {
if f := moduleForPath("/admin/setup/onec"); f != "onec-middle" {
t.Fatalf("раздел 1С без модуля лицензии: %q", f)
}
if moduleTitle("onec-middle") == "onec-middle" {
t.Fatal("нет названия модуля для лицензии")
}
}