Apply go fix ./... analysers (Go 1.26) across backend and examples:
- interface{} → any (type alias, no behaviour change)
- for i := 0; i < N; i++ → for range N / for i := range N
- slices.Contains / slices.ContainsFunc replacing manual loops
- strings.SplitSeq replacing strings.Split in range (avoids allocation)
- strings.CutPrefix replacing HasPrefix+TrimPrefix
- min() replacing manual if/else
- fmt.Appendf replacing []byte(fmt.Sprintf(...))
- strings.Builder replacing string += concatenation
- wg.Go(func(){}) replacing wg.Add(1)/go/wg.Done() pattern
- removed redundant ii := i loop variable copies (unnecessary since Go 1.22)
omitempty on struct-typed JSON fields: go fix removed omitempty from
struct-typed fields (time.Time, PostInfo, UserDetailEntry) because
encoding/json's omitempty never applied to struct types — it was always
a no-op. Kept as bare tags (no omitzero replacement) to preserve the
existing serialisation behaviour.
72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
package providers
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
ntf "github.com/go-pkgz/notify"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDispatchTelegramUpdates(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
poolPeriod := time.Millisecond * 100
|
|
go DispatchTelegramUpdates(ctx, &mockTGRequester{t: t}, []TGUpdatesReceiver{&mockTGUpdatesReceiver{t: t}}, poolPeriod)
|
|
time.Sleep(poolPeriod * 3)
|
|
cancel()
|
|
time.Sleep(poolPeriod)
|
|
}
|
|
|
|
const getUpdatesResp = `{
|
|
"ok": true,
|
|
"result": [
|
|
{
|
|
"update_id": 998,
|
|
"message": {
|
|
"chat": {
|
|
"type": "group"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}`
|
|
|
|
type mockTGRequester struct {
|
|
hit int
|
|
t *testing.T
|
|
}
|
|
|
|
func (m *mockTGRequester) Request(_ context.Context, _ string, _ []byte, data any) error {
|
|
if m.hit < 2 {
|
|
m.hit++
|
|
assert.NoError(m.t, json.Unmarshal([]byte(getUpdatesResp), data))
|
|
return nil
|
|
}
|
|
return fmt.Errorf("test error")
|
|
}
|
|
|
|
type mockTGUpdatesReceiver struct {
|
|
t *testing.T
|
|
hit int
|
|
}
|
|
|
|
func (m *mockTGUpdatesReceiver) String() string {
|
|
return "mock updater"
|
|
}
|
|
|
|
func (m *mockTGUpdatesReceiver) ProcessUpdate(_ context.Context, textUpdate string) error {
|
|
var result ntf.TelegramUpdate
|
|
err := json.Unmarshal([]byte(textUpdate), &result)
|
|
assert.NoError(m.t, err)
|
|
if m.hit < 2 {
|
|
assert.NotNil(m.t, result.Result)
|
|
m.hit++
|
|
return nil
|
|
}
|
|
assert.Nil(m.t, result.Result)
|
|
return fmt.Errorf("test error")
|
|
}
|