mirror of
https://github.com/lukaszraczylo/go-telegram.git
synced 2026-06-11 23:19:31 +00:00
Initial release of go-telegram
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
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user