PPysolate SpineREAD THE CODE · UNDERSTAND THE SYSTEM
课程与章节
源码索引 / CURRENT IMPLEMENTATION

learning/go-patterns/patterns/middleware/middleware_test.go

38 行 · 点击行号可定位;函数链接随声明位置更新,不手填行号。

跳到函数 / 声明
package middleware

import (
	"reflect"
	"testing"
)

func TestChainRunsMiddlewareOuterToInner(t *testing.T) {
	endpoint := func(Request) Response {
		return Response{Status: 200, Body: "ok"}
	}

	handler := Chain(endpoint, PrefixBody("outer"), PrefixBody("inner"))
	got := handler(Request{Path: "/health"})

	if got.Body != "outer:inner:ok" {
		t.Fatalf("Body = %q, want %q", got.Body, "outer:inner:ok")
	}
}

func TestAddHeaderInitializesAndPreservesResponseHeaders(t *testing.T) {
	endpoint := func(Request) Response {
		return Response{Status: 204, Headers: map[string]string{"X-Endpoint": "yes"}}
	}

	got := Chain(endpoint, AddHeader("X-Request-ID", "fixed-id"))(Request{})
	want := map[string]string{"X-Endpoint": "yes", "X-Request-ID": "fixed-id"}
	if !reflect.DeepEqual(got.Headers, want) {
		t.Fatalf("Headers = %#v, want %#v", got.Headers, want)
	}
}

func TestChainIgnoresNilMiddleware(t *testing.T) {
	got := Chain(func(Request) Response { return Response{Body: "ok"} }, nil)(Request{})
	if got.Body != "ok" {
		t.Fatalf("Body = %q, want %q", got.Body, "ok")
	}
}