From a78e9927bc225b5aa9bd6f2e7af6e63b99bb58d8 Mon Sep 17 00:00:00 2001 From: Kirillkriv Date: Tue, 6 Oct 2026 13:51:00 +0300 Subject: [PATCH] feat: implemented test poller --- v1/core/pollers.go | 28 +++++++++++++++++++++++++--- v1/errors/errors.go | 6 +++--- v1/middleware/middleware.go | 2 +- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/v1/core/pollers.go b/v1/core/pollers.go index 644d45e..f1e253c 100644 --- a/v1/core/pollers.go +++ b/v1/core/pollers.go @@ -4,12 +4,12 @@ import ( "context" "crypto/tls" "errors" - "fmt" maxbot "github.com/max-messenger/max-bot-api-client-go/v2" "github.com/max-messenger/max-bot-api-client-go/v2/model" "github.com/rs/zerolog/log" "net" "net/http" + "sync" "time" ) @@ -36,7 +36,10 @@ type LongPoller struct { pollInterval time.Duration } -type TestPoller struct{} +type TestPoller struct { + ch chan model.Update + mu sync.Mutex +} type webhookOptions struct { addr string @@ -185,8 +188,27 @@ func (lp *LongPoller) Start(ctx context.Context) (<-chan model.Update, error) { return ch, nil } +func (tp *TestPoller) Inject(ctx context.Context, updates []model.Update) { + ch := make(chan model.Update, 1) + + go func() { + defer close(ch) + + for _, upd := range updates { + select { + case <-ctx.Done(): + case ch <- upd: + } + } + }() + + tp.mu.Lock() + tp.ch = ch + defer tp.mu.Unlock() +} + func (tp *TestPoller) Start(_ context.Context) (<-chan model.Update, error) { - return nil, fmt.Errorf("unimplemented") + return tp.ch, nil } func WithAddress(addr string) WebhookOption { diff --git a/v1/errors/errors.go b/v1/errors/errors.go index b576b30..f226e99 100644 --- a/v1/errors/errors.go +++ b/v1/errors/errors.go @@ -1,16 +1,16 @@ package errors -type GomaxError struct { +type GoMaxError struct { Message string Err error } -func (ge *GomaxError) Error() string { +func (ge *GoMaxError) Error() string { return ge.Err.Error() } func New(parent error, text string) error { - return &GomaxError{ + return &GoMaxError{ Message: text, Err: parent, } diff --git a/v1/middleware/middleware.go b/v1/middleware/middleware.go index 7a2a7e8..93ef5a4 100644 --- a/v1/middleware/middleware.go +++ b/v1/middleware/middleware.go @@ -27,7 +27,7 @@ func MwErrorResponder(defaultMsg string) core.Middleware { return func(next core.HandlerFunc) core.HandlerFunc { return func(c *mcontext.Context) error { err := next(c) - var maxErr *merrors.GomaxError + var maxErr *merrors.GoMaxError if errors.As(err, &maxErr) { return c.Respond(maxErr.Message)