cfd6dfa1e8
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
54 lines
2.4 KiB
Go
54 lines
2.4 KiB
Go
package lkgateway
|
|
|
|
import (
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func renderIncoming(t *testing.T, d incomingDetailData) string {
|
|
t.Helper()
|
|
a, err := newAdmin()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rec := httptest.NewRecorder()
|
|
d.page = nowPage("Входящий перевод", "incoming")
|
|
render(rec, a.incomingDetail, d)
|
|
if rec.Code != 200 {
|
|
t.Fatalf("код %d: %s", rec.Code, rec.Body.String())
|
|
}
|
|
return rec.Body.String()
|
|
}
|
|
|
|
// Отклонённый перевод: 16/1 не требуется, операция завершена, без кнопок подачи и «черновик получен».
|
|
func TestIncomingDetailRejected(t *testing.T) {
|
|
it := &IncomingTransfer{ID: "x", GUID: "9F5E120D-EFD1-46EE-A9BA-35CB2E794B81", Status: "answered", Auto: true, AnsweredAt: time.Now(),
|
|
Securities: []IncomingSecurity{{ReferenceID: "R1", SecurityCode: "SBER/03", Decision: "rejected", RejectCode: "M2M04"}}}
|
|
rejected, codes := incomingRejectedAll(it)
|
|
if !rejected || codes != "M2M04" {
|
|
t.Fatalf("incomingRejectedAll: %v %q", rejected, codes)
|
|
}
|
|
body := renderIncoming(t, incomingDetailData{It: it, Rejected: rejected, RejectCodes: codes, AutoMode: true})
|
|
for _, want := range []string{"не требуется — перевод отклонён", "Операция завершена отказом", "автоматически", "Зачисление в QUIK не требуется"} {
|
|
if !strings.Contains(body, want) {
|
|
t.Errorf("нет %q", want)
|
|
}
|
|
}
|
|
for _, bad := range []string{"Подать поручение 16/1 в НРД", "Черновик от НРД", "нужно подать"} {
|
|
if strings.Contains(body, bad) {
|
|
t.Errorf("лишнее в завершённом переводе: %q", bad)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Перевод ждёт решения: шаги 16/1 не отмечены выполненными.
|
|
func TestIncomingDetailPending(t *testing.T) {
|
|
it := &IncomingTransfer{ID: "y", GUID: "G", Status: "pending", Securities: []IncomingSecurity{{ReferenceID: "R1", SecurityCode: "SBER/03"}}}
|
|
body := renderIncoming(t, incomingDetailData{It: it})
|
|
if !strings.Contains(body, "после нашего согласия") || strings.Contains(body, "Черновик от НРД") || strings.Contains(body, "Подать поручение 16/1 в НРД") {
|
|
t.Error("ожидающий перевод не должен показывать полученный черновик и кнопку подачи")
|
|
}
|
|
}
|