mirror of
https://github.com/lukaszraczylo/go-telegram.git
synced 2026-06-05 22:43:59 +00:00
9072e9eafb
A fully-generated, strongly-typed Go client for the Telegram Bot API. * 176 methods + 301 types generated from Bot API v10.0 * 1408 auto-generated tests (8 scenarios per method) * Typed unions throughout — no 'any' in the public surface * Pluggable HTTP transport and JSON codec (default goccy/go-json) * Built-in retry middleware honouring Telegram's retry_after * Generic dispatcher with filters and conversation handlers * Self-verifying codegen pipeline (regen → audit → emit → run tests) * 14 example bots covering common patterns
70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"golang.org/x/net/html"
|
|
)
|
|
|
|
func parse(t *testing.T, path string) *html.Node {
|
|
t.Helper()
|
|
f, err := os.Open(path)
|
|
require.NoError(t, err)
|
|
defer f.Close()
|
|
doc, err := html.Parse(f)
|
|
require.NoError(t, err)
|
|
return doc
|
|
}
|
|
|
|
func TestWalk_FixtureSections(t *testing.T) {
|
|
doc := parse(t, "../../testdata/html/small_fixture.html")
|
|
sections := walk(doc)
|
|
|
|
titles := make([]string, 0, len(sections))
|
|
for _, s := range sections {
|
|
titles = append(titles, s.Title)
|
|
}
|
|
|
|
require.Contains(t, titles, "User")
|
|
require.Contains(t, titles, "ChatMember")
|
|
require.Contains(t, titles, "getMe")
|
|
require.Contains(t, titles, "sendMessage")
|
|
require.Contains(t, titles, "sendDocument")
|
|
require.Contains(t, titles, "getUpdates")
|
|
require.Contains(t, titles, "Bot API 7.10")
|
|
}
|
|
|
|
func TestIsMethodTitle(t *testing.T) {
|
|
require.True(t, isMethodTitle("sendMessage"))
|
|
require.True(t, isMethodTitle("getMe"))
|
|
require.False(t, isMethodTitle("Message"))
|
|
require.False(t, isMethodTitle(""))
|
|
require.False(t, isMethodTitle("Bot API 7.10"))
|
|
}
|
|
|
|
func TestIsTypeTitle(t *testing.T) {
|
|
require.True(t, isTypeTitle("Message"))
|
|
require.True(t, isTypeTitle("ChatMember"))
|
|
require.False(t, isTypeTitle("sendMessage"))
|
|
require.False(t, isTypeTitle("Bot API 7.10"))
|
|
require.False(t, isTypeTitle(""))
|
|
}
|
|
|
|
func TestSection_DescriptionAndTables(t *testing.T) {
|
|
doc := parse(t, "../../testdata/html/small_fixture.html")
|
|
sections := walk(doc)
|
|
var sm *section
|
|
for i, s := range sections {
|
|
if s.Title == "sendMessage" {
|
|
sm = §ions[i]
|
|
break
|
|
}
|
|
}
|
|
require.NotNil(t, sm)
|
|
require.True(t, strings.Contains(sm.Description, "Use this method to send text messages"))
|
|
require.Len(t, sm.Tables, 1)
|
|
}
|