Files
Bridge-and-Join-s/internal/lkgateway/onec_test.go
T
zuevav 73b246831c Пароль домена не попадает в страницу; домен в мастере — открыт, крупно, группы; справочник DEPO без переводов; 1С — бэк-офис
- Безопасность: в мастере подпись к паролю выводила сам сохранённый пароль служебной записи домена — теперь только «задан/введён» (тест: пароль не попадает в HTML). Список сессий в настройках больше не содержит токены (по ним можно было войти под чужим именем) — короткий ID.
- Домен: после подключения и «Доверять» блок остаётся открытым, страница возвращается к нему; карточка «Домен подключён» и «Найден домен» — крупно; поиск сотрудников и групп; группе — доступ с ролью (ADGroups), список групп с «убрать».
- «Обмен с DEPO»: справочник FTV_M2M_HANDBOOK считается и когда переводов ещё нет (на свежей установке писало «не создана»).
- Модуль 1С: onec-back «1С: база бэк-офиса (тест)» вместо мидл-офиса (в лицензиях не выдавался).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 01:19:30 +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-back" {
t.Fatalf("раздел 1С без модуля лицензии: %q", f)
}
if moduleTitle("onec-back") == "onec-back" {
t.Fatal("нет названия модуля для лицензии")
}
}