package lkgateway import ( "strings" "testing" "time" ) // GS036 «об отсутствии встречного поручения» связывается с поручением по референсу строки. func TestNoCounterNotice(t *testing.T) { at := time.Date(2026, 9, 28, 17, 50, 2, 0, time.Local) pkgIndexCache.mu.Lock() old, oldAt := pkgIndexCache.list, pkgIndexCache.at pkgIndexCache.list = []pkgIndexEntry{ {dir: "Z2895760", mt: at, body: "GS036 отсутствии встречного поручения к поручению депоРеференсM2M20260928HEKR0"}, {dir: "K2895751", mt: at, body: "1446389121952"}, } pkgIndexCache.at = time.Now().Add(time.Hour) pkgIndexCache.mu.Unlock() defer func() { pkgIndexCache.mu.Lock() pkgIndexCache.list, pkgIndexCache.at = old, oldAt pkgIndexCache.mu.Unlock() }() if got, ok := findNoCounterNotice("M2M20260928HEKR0"); !ok || !got.Equal(at) { t.Fatalf("уведомление не найдено: %v %v", got, ok) } if _, ok := findNoCounterNotice("M2M20260928M5XQC"); ok { t.Fatal("чужой референс") } w := &OrderWatch{Direction: "out", OrderAt: at.Add(-time.Minute), LateAt: at.Add(5 * time.Minute), NoCounterAt: at} if s := w.StatusRu(); !strings.Contains(s, "контрагент ещё не подал встречное поручение 16/1") { t.Fatalf("ждём встречное: %q", s) } w.Direction = "in" if s := w.StatusRu(); !strings.Contains(s, "поручение 16 передающего") { t.Fatalf("входящий: %q", s) } w.Direction, w.MS010At = "out", at.Add(53*time.Minute) if s := w.StatusRu(); !strings.Contains(s, "исполнено") || !strings.Contains(s, "задержка на стороне контрагента") { t.Fatalf("исполнено с задержкой: %q", s) } }