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("ожидающий перевод не должен показывать полученный черновик и кнопку подачи") } }