package api import ( "net/http" "net/url" "testing" "github.com/stretchr/testify/require" ) func TestFilter(t *testing.T) { key1, val1 := "key1", "val1" key2, val2 := "key2", "val2" key3, val3 := "key3", "val3" anyVal := "" notNilHandler := http.HandlerFunc(func(http.ResponseWriter, *http.Request) {}) t.Run("queries", func(t *testing.T) { f := NewHandlerFilter(). Add(NewFilter(). QueriesMatch(key1, val1, key2, anyVal). Queries(key3). Handler(notNilHandler)) r, err := http.NewRequest(http.MethodGet, "https://localhost:8084", nil) require.NoError(t, err) query := make(url.Values) query.Set(key1, val1) query.Set(key2, val2) query.Set(key3, val3) r.URL.RawQuery = query.Encode() h := f.match(r) require.NotNil(t, h) query.Set(key1, val2) r.URL.RawQuery = query.Encode() h = f.match(r) require.Nil(t, h) }) t.Run("headers", func(t *testing.T) { f := NewHandlerFilter(). Add(NewFilter(). HeadersMatch(key1, val1, key2, anyVal). Headers(key3). Handler(notNilHandler)) r, err := http.NewRequest(http.MethodGet, "https://localhost:8084", nil) require.NoError(t, err) r.Header.Set(key1, val1) r.Header.Set(key2, val2) r.Header.Set(key3, val3) h := f.match(r) require.NotNil(t, h) r.Header.Set(key1, val2) h = f.match(r) require.Nil(t, h) }) }