Implement bot Handle and Start functions tests

pull/269/head
unknown 4 years ago
parent 32de86819c
commit fcff7569ac

@ -44,10 +44,7 @@ func testRawServer(w http.ResponseWriter, r *http.Request) {
}
func TestRaw(t *testing.T) {
b, err := newTestBot()
assert.NoError(t, err)
_, err = b.Raw("BAD METHOD", nil)
_, err := b.Raw("BAD METHOD", nil)
assert.EqualError(t, err, ErrNotFound.Error())
_, err = b.Raw("", &testPayload{})

@ -157,9 +157,8 @@ func (b *Bot) Start() {
panic("telebot: can't start without a poller")
}
stopPoller := make(chan struct{})
go b.Poller.Poll(b, b.Updates, stopPoller)
stop := make(chan struct{})
go b.Poller.Poll(b, b.Updates, stop)
for {
select {
@ -169,10 +168,10 @@ func (b *Bot) Start() {
// call to stop polling
case <-b.stop:
stopPoller <- struct{}{}
stop <- struct{}{}
// polling has stopped
case <-stopPoller:
case <-stop:
return
}
}

@ -9,6 +9,9 @@ import (
"github.com/stretchr/testify/assert"
)
// Cached bot instance to avoid getMe method flooding.
var b, _ = newTestBot()
func defaultSettings() Settings {
return Settings{Token: os.Getenv("TELEBOT_SECRET")}
}
@ -51,3 +54,45 @@ func TestNewBot(t *testing.T) {
assert.Equal(t, pref.Poller, b.Poller)
assert.Equal(t, 50, cap(b.Updates))
}
func TestHandle(t *testing.T) {
b.Handle("/start", func(m *Message) {})
assert.Contains(t, b.handlers, "/start")
btn := &InlineButton{Unique: "test"}
b.Handle(btn, func(c *Callback) {})
assert.Contains(t, b.handlers, btn.CallbackUnique())
assert.Panics(t, func() { b.Handle(1, func() {}) })
}
func TestStart(t *testing.T) {
// cached bot has no poller
assert.Panics(t, func() { b.Start() })
pref := defaultSettings()
pref.Poller = &LongPoller{}
b, err := NewBot(pref)
assert.NoError(t, err)
// TODO: deleteWebhook
time.AfterFunc(50*time.Millisecond, b.Stop)
b.Start() // stops after some delay
assert.Empty(t, b.stop)
pref.Poller = &testPoller{Message: "/start"}
b, err = NewBot(pref)
assert.NoError(t, err)
var ok bool
b.Handle("/start", func(m *Message) {
assert.Equal(t, m.Text, "/start")
ok = true
})
time.AfterFunc(50*time.Millisecond, b.Stop)
b.Start() // stops after some delay
assert.True(t, ok)
}

@ -94,6 +94,7 @@ func (p *LongPoller) Poll(b *Bot, dest chan Update, stop chan struct{}) {
updates, err := b.getUpdates(p.LastUpdateID+1, p.Timeout)
if err != nil {
b.debug(err)
b.debug(ErrCouldNotUpdate)
continue
}

@ -0,0 +1,18 @@
package telebot
type testPoller struct {
Message string
}
func (p *testPoller) Poll(b *Bot, updates chan Update, stop chan struct{}) {
updates <- Update{Message: &Message{Text: p.Message}}
for {
select {
case <-stop:
close(stop)
return
default:
}
}
}
Loading…
Cancel
Save