Files
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

67 lines
2.3 KiB
Go

package lkgateway
import "testing"
func withFeatures(t *testing.T, features ...string) {
t.Helper()
prev := featureAllowed
featureAllowed = func(f string) bool {
for _, x := range features {
if x == f {
return true
}
}
return false
}
t.Cleanup(func() { featureAllowed = prev })
}
func TestRolesFollowLicensedModules(t *testing.T) {
withFeatures(t) // лицензия без модулей
if roleAvailable("risk") {
t.Fatal("риск-менеджер без модуля НПР должен быть недоступен")
}
for _, k := range []string{"admin", "operator", "viewer"} {
if !roleAvailable(k) {
t.Fatalf("базовая роль %s должна быть доступна", k)
}
}
if got := len(availableModules()); got != 0 {
t.Fatalf("модулей без лицензии: %d, ожидалось 0", got)
}
admin := &User{Role: "admin"}
if admin.Can("npr") || admin.Can("quik") || !admin.Can("settings") || !admin.Can("users") {
t.Fatal("администратор: права модулей должны зависеть от лицензии, базовые — нет")
}
risk := &User{Role: "risk"}
if userHasAccess(risk) || risk.Home() != "/admin/" {
t.Fatal("риск-менеджер без НПР не должен иметь доступа")
}
viewer := &User{Role: "viewer", Modules: []string{"npr"}}
if viewer.Can("npr") {
t.Fatal("выданный модуль вне лицензии не должен действовать")
}
}
func TestRolesWithLicensedModules(t *testing.T) {
withFeatures(t, "npr", "quik-mnp")
if !roleAvailable("risk") {
t.Fatal("риск-менеджер с модулем НПР должен быть доступен")
}
op := &User{Role: "operator"}
if !op.Can("quik") {
t.Fatal("оператор с quik-mnp должен видеть поручения QUIK")
}
if (&User{Role: "admin"}).Can("export") {
t.Fatal("экспорт QUIK без признака quik-export не должен действовать")
}
if got := len(availableModules()); got != 2 {
t.Fatalf("подключённых модулей %d, ожидалось 2", got)
}
if (&User{Role: "risk"}).Home() != "/admin/npr" {
t.Fatal("стартовая страница риск-менеджера — НПР")
}
}