Files
Bridge-and-Join-s/internal/lkgateway/adrecheck_test.go
T
zuevav da12a9ec1c feat(bj): модуль ЛК на PostgreSQL, обмен с DEPO, боевой ЛК с имитатором НРД, QUIK, НПР
- bj_exchange и «кран» Fancy убраны: данные модуля ЛК в PostgreSQL (схема lk)
- трансферные таблицы FTV_M2M: создание при установке, события, справочник участников
- сверка с DEPO: счёт, ФИО, дата рождения, ИИС по договору, квал-инвестор из опции DEPO
- боевой ЛК ЕСИА Финанс при тестовом ИШ: журнал, отказ через DEPO, статусы в ЛК
- онлайн-лицензирование в bj, план тестирования M2M для контрагента (интерактивный HTML)
- модули QUIK МНП, экспорт QUIK, НПР/УДС; документы и тестовые материалы

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 19:41:12 +03:00

56 lines
2.4 KiB
Go

package lkgateway
import "testing"
func TestADApplyRecheck(t *testing.T) {
grp := "CN=BJ-Operators,OU=Groups,DC=corp,DC=example,DC=ru"
u := &User{Login: "ivanov", Source: "ad", Role: "admin", Active: true}
changed, drop, _ := adApplyRecheck(u, &adResult{Role: "operator", MatchedBy: "BJ-Operators", Groups: []string{grp}}, nil, nil)
if !changed || drop || u.Role != "operator" || len(u.ADGroups) != 1 || u.ADGroups[0] != "BJ-Operators" {
t.Fatalf("смена группы: changed=%v drop=%v role=%q groups=%v", changed, drop, u.Role, u.ADGroups)
}
changed, drop, _ = adApplyRecheck(u, &adResult{Role: "operator", MatchedBy: "BJ-Operators"}, nil, nil)
if changed || drop {
t.Fatal("роль не изменилась — изменений быть не должно")
}
changed, drop, _ = adApplyRecheck(u, &adResult{}, nil, &adNoGroupError{sam: "ivanov"})
if !changed || !drop || u.Role != "" || userHasAccess(u) {
t.Fatalf("удалён из групп: changed=%v drop=%v role=%q", changed, drop, u.Role)
}
changed, drop, _ = adApplyRecheck(u, &adResult{}, nil, &adNoGroupError{sam: "ivanov"})
if changed || drop {
t.Fatal("повторная проверка без групп не должна повторно снимать доступ")
}
changed, _, _ = adApplyRecheck(u, &adResult{Role: "viewer", MatchedBy: "BJ-Viewers"}, nil, nil)
if !changed || u.Role != "viewer" {
t.Fatal("возврат в группу должен вернуть роль")
}
for _, e := range []error{errADDisabled, errADNotFound} {
v := &User{Login: "petrov", Source: "ad", Role: "viewer", Active: true}
if changed, drop, _ := adApplyRecheck(v, nil, e, nil); !changed || !drop || v.Role != "" {
t.Fatalf("%v: доступ должен сниматься", e)
}
}
}
func TestADSplitLogin(t *testing.T) {
a := AuthSettings{ADDomain: "corp.example.ru"}
for in, want := range map[string][2]string{
"ivanov": {"ivanov", "ivanov@corp.example.ru"},
"ivanov@corp.example.ru": {"ivanov", "ivanov@corp.example.ru"},
`CORP\ivanov`: {"ivanov", "ivanov@corp.example.ru"},
} {
if sam, upn := adSplitLogin(a, in); sam != want[0] || upn != want[1] {
t.Fatalf("%s → %s, %s", in, sam, upn)
}
}
if (AuthSettings{}).recheckEvery() != adRecheckDefault || (AuthSettings{ADRecheckMinutes: 1}).recheckEvery().Minutes() != 5 {
t.Fatal("интервал перепроверки")
}
}