mirror of
https://github.com/pocketbase/pocketbase.git
synced 2025-03-19 22:19:23 +02:00
169 lines
3.1 KiB
Go
169 lines
3.1 KiB
Go
|
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)
|
||
|
}
|
||
|
}
|
||
|
}
|