da12a9ec1c
- 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>
67 lines
2.3 KiB
Go
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("стартовая страница риск-менеджера — НПР")
|
|
}
|
|
}
|