(new): rich message support
(fix): runtime reliability (tests): regression coverage (doc): v1.1 release notes
This commit is contained in:
@@ -9,6 +9,17 @@ import (
|
||||
"git.scuroneko.dev/scuroneko/sneklog/v2"
|
||||
)
|
||||
|
||||
type sequenceDraftIDGenerator struct {
|
||||
ids []uint64
|
||||
pos int
|
||||
}
|
||||
|
||||
func (g *sequenceDraftIDGenerator) Next() uint64 {
|
||||
id := g.ids[g.pos]
|
||||
g.pos++
|
||||
return id
|
||||
}
|
||||
|
||||
func TestDraftFlushRequiresChatID(t *testing.T) {
|
||||
draft := NewRandomDraftProvider(&tgapi.API{}).NewDraft(tgapi.ParseNone)
|
||||
draft.Message = "hello"
|
||||
@@ -38,6 +49,34 @@ func TestMsgContextNewDraftWorksWithoutLimiter(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDraftProviderSkipsZeroAndCollidingIDs(t *testing.T) {
|
||||
provider := &DraftProvider{
|
||||
api: &tgapi.API{},
|
||||
drafts: make(map[uint64]*Draft),
|
||||
generator: &sequenceDraftIDGenerator{ids: []uint64{0, 7, 7, 8}},
|
||||
}
|
||||
|
||||
first := provider.NewDraft(tgapi.ParseNone)
|
||||
second := provider.NewDraft(tgapi.ParseNone)
|
||||
if first.ID != 7 || second.ID != 8 {
|
||||
t.Fatalf("unexpected draft IDs: first=%d second=%d", first.ID, second.ID)
|
||||
}
|
||||
if got := len(provider.drafts); got != 2 {
|
||||
t.Fatalf("collision overwrote a draft: got %d drafts", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDraftReturnsErrorWhenAPIIsNil(t *testing.T) {
|
||||
draft := NewLinearDraftProvider(nil, 0).NewDraft(tgapi.ParseNone).SetChat(42, 0)
|
||||
if err := draft.Push("hello"); !errors.Is(err, ErrAPIIsNil) {
|
||||
t.Fatalf("expected ErrAPIIsNil from Push, got %v", err)
|
||||
}
|
||||
draft.Message = "hello"
|
||||
if err := draft.Flush(); !errors.Is(err, ErrAPIIsNil) {
|
||||
t.Fatalf("expected ErrAPIIsNil from Flush, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDraftFlushRejectsLongMessage(t *testing.T) {
|
||||
draft := NewRandomDraftProvider(&tgapi.API{}).NewDraft(tgapi.ParseNone).SetChat(42, 0)
|
||||
draft.Message = strings.Repeat("a", maxMessageTextLen+1)
|
||||
|
||||
Reference in New Issue
Block a user