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 interface{}) 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")
|
|
}
|