1
0
mirror of https://github.com/pocketbase/pocketbase.git synced 2025-03-19 22:19:23 +02:00
pocketbase/tools/router/route_test.go

169 lines
3.1 KiB
Go
Raw Normal View History

2024-09-29 19:23:19 +03:00
package router
import (
"slices"
"testing"
"github.com/pocketbase/pocketbase/tools/hook"
)
func TestRouteBindFunc(t *testing.T) {
t.Parallel()
r := Route[*Event]{}
calls := ""
// append one function
r.BindFunc(func(e *Event) error {
calls += "a"
return nil
})
// append multiple functions
r.BindFunc(
func(e *Event) error {
calls += "b"
return nil
},
func(e *Event) error {
calls += "c"
return nil
},
)
if total := len(r.Middlewares); total != 3 {
t.Fatalf("Expected %d middlewares, got %v", 3, total)
}
for _, h := range r.Middlewares {
_ = h.Func(nil)
}
if calls != "abc" {
t.Fatalf("Expected calls sequence %q, got %q", "abc", calls)
}
}
func TestRouteBind(t *testing.T) {
t.Parallel()
r := Route[*Event]{
// mock excluded middlewares to check whether the entry will be deleted
excludedMiddlewares: map[string]struct{}{"test2": {}},
}
calls := ""
// append one handler
r.Bind(&hook.Handler[*Event]{
Func: func(e *Event) error {
calls += "a"
return nil
},
})
// append multiple handlers
r.Bind(
&hook.Handler[*Event]{
Id: "test1",
Func: func(e *Event) error {
calls += "b"
return nil
},
},
&hook.Handler[*Event]{
Id: "test2",
Func: func(e *Event) error {
calls += "c"
return nil
},
},
)
if total := len(r.Middlewares); total != 3 {
t.Fatalf("Expected %d middlewares, got %v", 3, total)
}
for _, h := range r.Middlewares {
_ = h.Func(nil)
}
if calls != "abc" {
t.Fatalf("Expected calls %q, got %q", "abc", calls)
}
// ensures that the previously excluded middleware was removed
if len(r.excludedMiddlewares) != 0 {
t.Fatalf("Expected test2 to be removed from the excludedMiddlewares list, got %v", r.excludedMiddlewares)
}
}
func TestRouteUnbind(t *testing.T) {
t.Parallel()
r := Route[*Event]{}
calls := ""
// anonymous middlewares
r.Bind(&hook.Handler[*Event]{
Func: func(e *Event) error {
calls += "a"
return nil // unused value
},
})
// middlewares with id
r.Bind(&hook.Handler[*Event]{
Id: "test1",
Func: func(e *Event) error {
calls += "b"
return nil // unused value
},
})
r.Bind(&hook.Handler[*Event]{
Id: "test2",
Func: func(e *Event) error {
calls += "c"
return nil // unused value
},
})
r.Bind(&hook.Handler[*Event]{
Id: "test3",
Func: func(e *Event) error {
calls += "d"
return nil // unused value
},
})
// remove
r.Unbind("") // should be no-op
r.Unbind("test1", "test3")
if total := len(r.Middlewares); total != 2 {
t.Fatalf("Expected %d middlewares, got %v", 2, total)
}
for _, h := range r.Middlewares {
if err := h.Func(nil); err != nil {
continue
}
}
if calls != "ac" {
t.Fatalf("Expected calls %q, got %q", "ac", calls)
}
// ensure that the id was added in the exclude list
excluded := []string{"test1", "test3"}
if len(r.excludedMiddlewares) != len(excluded) {
t.Fatalf("Expected excludes %v, got %v", excluded, r.excludedMiddlewares)
}
for id := range r.excludedMiddlewares {
if !slices.Contains(excluded, id) {
t.Fatalf("Expected %q to be marked as excluded", id)
}
}
}