request_test.gno

1.38 Kb ยท 48 lines
 1package mux
 2
 3import (
 4	"testing"
 5
 6	"gno.land/p/demo/uassert"
 7	"gno.land/p/demo/ufmt"
 8)
 9
10func TestRequest_GetVar(t *testing.T) {
11	cases := []struct {
12		handlerPath    string
13		reqPath        string
14		getVarKey      string
15		expectedOutput string
16	}{
17
18		{"users/{id}", "users/123", "id", "123"},
19		{"users/123", "users/123", "id", ""},
20		{"users/{id}", "users/123", "nonexistent", ""},
21		{"users/{userId}/posts/{postId}", "users/123/posts/456", "userId", "123"},
22		{"users/{userId}/posts/{postId}", "users/123/posts/456", "postId", "456"},
23
24		// Wildcards
25		{"*", "users/123", "*", "users/123"},
26		{"*", "users/123/posts/456", "*", "users/123/posts/456"},
27		{"*", "users/123/posts/456/comments/789", "*", "users/123/posts/456/comments/789"},
28		{"users/*", "users/john/posts", "*", "john/posts"},
29		{"users/*/comments", "users/jane/comments", "*", "jane/comments"},
30		{"api/*/posts/*", "api/v1/posts/123", "*", "v1/posts/123"},
31
32		// wildcards and parameters
33		{"api/{version}/*", "api/v1/user/settings", "version", "v1"},
34	}
35	for _, tt := range cases {
36		name := ufmt.Sprintf("%s-%s", tt.handlerPath, tt.reqPath)
37		t.Run(name, func(t *testing.T) {
38			req := &Request{
39				HandlerPath: tt.handlerPath,
40				Path:        tt.reqPath,
41			}
42			output := req.GetVar(tt.getVarKey)
43			uassert.Equal(t, tt.expectedOutput, output,
44				"handler: %q, path: %q, key: %q",
45				tt.handlerPath, tt.reqPath, tt.getVarKey)
46		})
47	}
48}