1
0
Fork 0
telegram/updates_test.go

209 lines
5.1 KiB
Go

package telegram
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
http "github.com/valyala/fasthttp"
)
func TestUpdateIsMessage(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{Message: &Message{ID: 42}}
assert.True(t, u.IsMessage())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsMessage())
})
}
func TestUpdateIsEditedMessage(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{EditedMessage: &Message{ID: 42}}
assert.True(t, u.IsEditedMessage())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsEditedMessage())
})
}
func TestUpdateIsChannelPost(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{ChannelPost: &Message{ID: 42}}
assert.True(t, u.IsChannelPost())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsChannelPost())
})
}
func TestUpdateIsEditedChannelPost(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{EditedChannelPost: &Message{ID: 42}}
assert.True(t, u.IsEditedChannelPost())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsEditedChannelPost())
})
}
func TestUpdateIsInlineQuery(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{InlineQuery: &InlineQuery{Query: "abc"}}
assert.True(t, u.IsInlineQuery())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsInlineQuery())
})
}
func TestUpdateIsChosenInlineResult(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{ChosenInlineResult: &ChosenInlineResult{ResultID: "abc"}}
assert.True(t, u.IsChosenInlineResult())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsChosenInlineResult())
})
}
func TestUpdateIsCallbackQuery(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{CallbackQuery: &CallbackQuery{ID: "abc"}}
assert.True(t, u.IsCallbackQuery())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsCallbackQuery())
})
}
func TestUpdateIsShippingQuery(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{ShippingQuery: &ShippingQuery{ID: "abc"}}
assert.True(t, u.IsShippingQuery())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsShippingQuery())
})
}
func TestUpdateIsPreCheckoutQuery(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{PreCheckoutQuery: &PreCheckoutQuery{ID: "abc"}}
assert.True(t, u.IsPreCheckoutQuery())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsPreCheckoutQuery())
})
}
func TestUpdateIsPoll(t *testing.T) {
t.Run("true", func(t *testing.T) {
u := Update{Poll: &Poll{ID: "abc"}}
assert.True(t, u.IsPoll())
})
t.Run("false", func(t *testing.T) {
u := Update{}
assert.False(t, u.IsPoll())
})
}
func TestUpdateType(t *testing.T) {
for _, tc := range []struct {
name string
update Update
expResult string
}{{
name: UpdateCallbackQuery,
update: Update{CallbackQuery: &CallbackQuery{ID: "abc"}},
expResult: UpdateCallbackQuery,
}, {
name: UpdateChannelPost,
update: Update{ChannelPost: &Message{ID: 42}},
expResult: UpdateChannelPost,
}, {
name: UpdateChosenInlineResult,
update: Update{ChosenInlineResult: &ChosenInlineResult{Query: "query"}},
expResult: UpdateChosenInlineResult,
}, {
name: UpdateEditedChannelPost,
update: Update{EditedChannelPost: &Message{ID: 42}},
expResult: UpdateEditedChannelPost,
}, {
name: UpdateEditedMessage,
update: Update{EditedMessage: &Message{ID: 42}},
expResult: UpdateEditedMessage,
}, {
name: UpdateInlineQuery,
update: Update{InlineQuery: &InlineQuery{ID: "abc"}},
expResult: UpdateInlineQuery,
}, {
name: UpdateMessage,
update: Update{Message: &Message{ID: 42}},
expResult: UpdateMessage,
}, {
name: UpdatePoll,
update: Update{Poll: &Poll{ID: "abc"}},
expResult: UpdatePoll,
}, {
name: UpdatePreCheckoutQuery,
update: Update{PreCheckoutQuery: &PreCheckoutQuery{ID: "abc"}},
expResult: UpdatePreCheckoutQuery,
}, {
name: UpdateShippingQuery,
update: Update{ShippingQuery: &ShippingQuery{ID: "abc"}},
expResult: UpdateShippingQuery,
}, {
name: "other",
update: Update{},
expResult: "",
}} {
tc := tc
t.Run(tc.name, func(t *testing.T) {
assert.Equal(t, tc.update.Type(), tc.expResult)
})
}
}
func TestWebhookInfoLastErrorTime(t *testing.T) {
now := time.Now().Round(time.Second)
wi := WebhookInfo{LastErrorDate: now.Unix()}
assert.Equal(t, wi.LastErrorTime(), now)
}
func TestWebhookInfoHasURL(t *testing.T) {
t.Run("true", func(t *testing.T) {
wi := WebhookInfo{URL: "https://bot.toby3d.me"}
assert.True(t, wi.HasURL())
})
t.Run("false", func(t *testing.T) {
wi := WebhookInfo{}
assert.False(t, wi.HasURL())
})
}
func TestWebhookInfoURI(t *testing.T) {
u := http.AcquireURI()
defer http.ReleaseURI(u)
u.Update("https://bot.toby3d.me")
t.Run("true", func(t *testing.T) {
wi := WebhookInfo{URL: u.String()}
assert.Equal(t, wi.URI().String(), u.String())
})
t.Run("false", func(t *testing.T) {
wi := WebhookInfo{}
assert.Nil(t, wi.URI())
})
}