package openlog import ( "net/http/httptest" "testing" "github.com/gin-gonic/gin" ) func TestPrefixIncludesSideAndAction(t *testing.T) { gin.SetMode(gin.TestMode) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Set(CtxReqID, "req123") SetScope(c, SideSource, ActionPush) got := Prefix(c) want := "[open.source_open_v1.push] req_id=req123 api_type=source_open_v1 action=push " if got != want { t.Fatalf("prefix mismatch: got %q want %q", got, want) } } func TestScopeFromPath(t *testing.T) { cases := []struct { name string side string method string path string wantSide string wantAction string wantType string }{ { name: "客户侧查询订单", side: SideClient, method: "GET", path: "/api/client/v1/orders/FO123", wantSide: SideClient, wantAction: ActionQuery, wantType: APITypeClientV1, }, { name: "客户侧创建订单", side: SideClient, method: "POST", path: "/api/client/v1/orders", wantSide: SideClient, wantAction: ActionCreate, wantType: APITypeClientV1, }, { name: "源头侧发货推送", side: SideSource, method: "POST", path: "/api/open/v1/orders/ship-notify", wantSide: SideSource, wantAction: ActionPush, wantType: APITypeSourceOpenV1, }, { name: "源头侧查询订单", side: SideSource, method: "GET", path: "/api/open/v1/orders/FO123", wantSide: SideSource, wantAction: ActionQuery, wantType: APITypeSourceOpenV1, }, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { gotSide, gotAction := ScopeFromPath(tc.side, tc.method, tc.path) if gotSide != tc.wantSide || gotAction != tc.wantAction { t.Fatalf("scope mismatch: got %s/%s want %s/%s", gotSide, gotAction, tc.wantSide, tc.wantAction) } if gotType := APITypeFromSide(gotSide); gotType != tc.wantType { t.Fatalf("api type mismatch: got %s want %s", gotType, tc.wantType) } }) } }