tests: refactor middleware test cases

pull/628/head
Demian 7 months ago
parent 48c941a8d9
commit 5f0d89877d

@ -374,10 +374,17 @@ func TestBotOnError(t *testing.T) {
}
func TestBotMiddleware(t *testing.T) {
t.Run("call order", func(t *testing.T) {
t.Run("calling order", func(t *testing.T) {
var trace []string
mwTrace := func(name string) MiddlewareFunc {
handler := func(name string) HandlerFunc {
return func(c Context) error {
trace = append(trace, name)
return nil
}
}
middleware := func(name string) MiddlewareFunc {
return func(next HandlerFunc) HandlerFunc {
return func(c Context) error {
trace = append(trace, name+":in")
@ -392,85 +399,85 @@ func TestBotMiddleware(t *testing.T) {
if err != nil {
t.Fatal(err)
}
b.Use(mwTrace("global-1"), mwTrace("global-2"))
b.Handle("/a", func(c Context) error {
trace = append(trace, "/a")
return nil
}, mwTrace("handler-1-a"), mwTrace("handler-2-a"))
b.Use(middleware("global1"), middleware("global2"))
b.Handle("/a", handler("/a"), middleware("handler1a"), middleware("handler2a"))
group := b.Group()
group.Use(mwTrace("group-1"), mwTrace("group-2"))
group.Handle("/b", func(c Context) error {
trace = append(trace, "/b")
return nil
}, mwTrace("handler-1-b"))
b.ProcessUpdate(Update{Message: &Message{Text: "/a"}})
group.Use(middleware("group1"), middleware("group2"))
group.Handle("/b", handler("/b"), middleware("handler1b"))
expectedOrder := []string{
"global-1:in", "global-2:in",
"handler-1-a:in", "handler-2-a:in",
b.ProcessUpdate(Update{
Message: &Message{Text: "/a"},
})
assert.Equal(t, []string{
"global1:in", "global2:in",
"handler1a:in", "handler2a:in",
"/a",
"handler-2-a:out", "handler-1-a:out",
"global-2:out", "global-1:out",
}
assert.Equal(t, expectedOrder, trace)
"handler2a:out", "handler1a:out",
"global2:out", "global1:out",
}, trace)
trace = trace[:0]
b.ProcessUpdate(Update{Message: &Message{Text: "/b"}})
expectedOrder = []string{
"global-1:in", "global-2:in",
"group-1:in", "group-2:in",
"handler-1-b:in",
b.ProcessUpdate(Update{
Message: &Message{Text: "/b"},
})
assert.Equal(t, []string{
"global1:in", "global2:in",
"group1:in", "group2:in",
"handler1b:in",
"/b",
"handler-1-b:out",
"group-2:out", "group-1:out",
"global-2:out", "global-1:out",
}
assert.Equal(t, expectedOrder, trace)
"handler1b:out",
"group2:out", "group1:out",
"global2:out", "global1:out",
}, trace)
})
fatalMiddleware := func(next HandlerFunc) HandlerFunc {
fatal := func(next HandlerFunc) HandlerFunc {
return func(c Context) error {
t.Fatal("fatalMiddleware should not be called")
t.Fatal("fatal middleware should not be called")
return nil
}
}
nopMiddleware := func(next HandlerFunc) HandlerFunc {
return func(c Context) error { return next(c) }
nop := func(next HandlerFunc) HandlerFunc {
return func(c Context) error {
return next(c)
}
}
t.Run("handler middleware is not clobbered when combined with global middleware", func(t *testing.T) {
t.Run("combining with global middleware", func(t *testing.T) {
b, err := NewBot(Settings{Synchronous: true, Offline: true})
if err != nil {
t.Fatal(err)
}
// Pre-allocate middleware slice to make sure it has extra capacity after group-level middleware is added.
// Pre-allocate middleware slice to make sure
// it has extra capacity after group-level middleware is added.
b.group.middleware = make([]MiddlewareFunc, 0, 2)
b.Use(nopMiddleware)
b.Use(nop)
b.Handle("/a", func(c Context) error { return nil }, nopMiddleware)
b.Handle("/b", func(c Context) error { return nil }, fatalMiddleware)
b.Handle("/a", func(c Context) error { return nil }, nop)
b.Handle("/b", func(c Context) error { return nil }, fatal)
b.ProcessUpdate(Update{Message: &Message{Text: "/a"}})
})
t.Run("handler middleware is not clobbered when combined with group middleware", func(t *testing.T) {
t.Run("combining with group middleware", func(t *testing.T) {
b, err := NewBot(Settings{Synchronous: true, Offline: true})
if err != nil {
t.Fatal(err)
}
g := b.Group()
// Pre-allocate middleware slice to make sure it has extra capacity after group-level middleware is added.
// Pre-allocate middleware slice to make sure
// it has extra capacity after group-level middleware is added.
g.middleware = make([]MiddlewareFunc, 0, 2)
g.Use(nopMiddleware)
g.Use(nop)
g.Handle("/a", func(c Context) error { return nil }, nopMiddleware)
g.Handle("/b", func(c Context) error { return nil }, fatalMiddleware)
g.Handle("/a", func(c Context) error { return nil }, nop)
g.Handle("/b", func(c Context) error { return nil }, fatal)
b.ProcessUpdate(Update{Message: &Message{Text: "/a"}})
})

Loading…
Cancel
Save