Эмуляция НРД: один переключатель Выключена/Подмена/Полная имитация; контур отдельно
Было: правило «боевой ЛК + тестовый профиль → принудительно имитатор» не давало выключить эмуляцию, а подмена личности жила отдельным тумблером на другой странице — пользователь не мог понять состояние и выключить. Стало — явная модель (контур НРД и режим эмуляции независимы): - «Выключена» — заявки идут в выбранный контур (NSD.Profile) с реальными данными клиента; - «Подмена личности» — уходят в контур, но у клиентов из списка блок инвестора заменяется на тест-инвестора (Бубликов/Баранкин); DEPO и QUIK — по реальному клиенту; - «Полная имитация» — в НРД ничего не уходит, bj сам отвечает (внутренний имитатор). Режимы взаимоисключающие (ведутся флагами EmulateNSD/RealNSDTest.Enabled), принудительное правило убрано. Единый 3-радио на /admin/emulators (как у QUIK), с показом контура, тест-инвестора и списка паспортов; карточка на /admin/m2m-testing — статус + ссылка на «Эмуляторы». Тесты обновлены под новую модель. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -40,6 +40,7 @@ func TestLKEmulateNSD(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
s := rc.Snapshot()
|
||||
// Контур test3 сам по себе эмуляцию НЕ включает — режим выбирается явно.
|
||||
s.LK.ActiveEnv, s.NSD.Profile = "prod", "test3-gost"
|
||||
if err := rc.UpdateLK(s.LK); err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -47,23 +48,32 @@ func TestLKEmulateNSD(t *testing.T) {
|
||||
if err := rc.UpdateNSD(s.NSD); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if on, why := lkEmulateNSD(rc); !on || !strings.Contains(why, "тестовом контуре НРД") {
|
||||
t.Errorf("боевой ЛК + тестовый ИШ: ожидали имитацию, получили %v %q", on, why)
|
||||
}
|
||||
s.LK.ActiveEnv = "test"
|
||||
_ = rc.UpdateLK(s.LK)
|
||||
if on, _ := lkEmulateNSD(rc); on {
|
||||
t.Error("тестовый ЛК без флага: имитации быть не должно")
|
||||
t.Error("тестовый контур без режима: эмуляции быть не должно")
|
||||
}
|
||||
if m := nsdEmuMode(rc); m != "off" {
|
||||
t.Errorf("режим по умолчанию: %q, ожидали off", m)
|
||||
}
|
||||
// Полная имитация.
|
||||
s = rc.Snapshot()
|
||||
s.LK.EmulateNSD = true
|
||||
_ = rc.UpdateLK(s.LK)
|
||||
if on, _ := lkEmulateNSD(rc); on {
|
||||
t.Error("флаг в настройках без режима разработки не действует")
|
||||
if on, why := lkEmulateNSD(rc); !on || !strings.Contains(why, "имитаци") {
|
||||
t.Errorf("полная имитация: %v %q", on, why)
|
||||
}
|
||||
devModeForced = true
|
||||
defer func() { devModeForced = false }()
|
||||
if on, why := lkEmulateNSD(rc); !on || why != "включена в настройках" {
|
||||
t.Errorf("флаг в настройках: %v %q", on, why)
|
||||
if m := nsdEmuMode(rc); m != "imitate" {
|
||||
t.Errorf("режим: %q, ожидали imitate", m)
|
||||
}
|
||||
// Подмена личности (взаимоисключающа с имитацией).
|
||||
s = rc.Snapshot()
|
||||
s.LK.EmulateNSD = false
|
||||
s.LK.RealNSDTest.Enabled = true
|
||||
_ = rc.UpdateLK(s.LK)
|
||||
if on, why := lkEmulateNSD(rc); !on || !strings.Contains(why, "подмена") {
|
||||
t.Errorf("подмена: %v %q", on, why)
|
||||
}
|
||||
if m := nsdEmuMode(rc); m != "substitute" {
|
||||
t.Errorf("режим: %q, ожидали substitute", m)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user