73b246831c
- Безопасность: в мастере подпись к паролю выводила сам сохранённый пароль служебной записи домена — теперь только «задан/введён» (тест: пароль не попадает в 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
57 lines
2.1 KiB
Go
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("нет названия модуля для лицензии")
|
|
}
|
|
}
|