github.com/Tyktechnologies/tyk@v2.9.5+incompatible/gateway/mw_method_transform_test.go (about)

     1  package gateway
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/TykTechnologies/tyk/apidef"
     7  	"github.com/TykTechnologies/tyk/test"
     8  )
     9  
    10  func TestMethodTransform(t *testing.T) {
    11  	ts := StartTest()
    12  	defer ts.Close()
    13  
    14  	t.Run("Using URL rewrite", func(t *testing.T) {
    15  
    16  		methodTransform := apidef.MethodTransformMeta{}
    17  		methodTransform.Path = "/get"
    18  		methodTransform.Method = "GET"
    19  		methodTransform.ToMethod = "POST"
    20  
    21  		urlRewrite := apidef.URLRewriteMeta{}
    22  		urlRewrite.Path = "/get"
    23  		urlRewrite.Method = "GET"
    24  		urlRewrite.MatchPattern = "/get(.*)"
    25  		urlRewrite.RewriteTo = "/post$1"
    26  
    27  		BuildAndLoadAPI(func(spec *APISpec) {
    28  			spec.Proxy.ListenPath = "/"
    29  			UpdateAPIVersion(spec, "v1", func(v *apidef.VersionInfo) {
    30  				v.UseExtendedPaths = true
    31  				v.ExtendedPaths.MethodTransforms = append(v.ExtendedPaths.MethodTransforms, methodTransform)
    32  				v.ExtendedPaths.URLRewrite = append(v.ExtendedPaths.URLRewrite, urlRewrite)
    33  			})
    34  		})
    35  
    36  		ts.Run(t, []test.TestCase{
    37  			{Method: "GET", Path: "/get", BodyMatch: `"Url":"/post"`},
    38  
    39  			{Method: "GET", Path: "/get?a=b", BodyMatch: `"Method":"POST"`},
    40  		}...)
    41  	})
    42  
    43  	t.Run("Using cache", func(t *testing.T) {
    44  		methodTransform := apidef.MethodTransformMeta{}
    45  		methodTransform.Path = "/testing"
    46  		methodTransform.Method = "GET"
    47  		methodTransform.ToMethod = "POST"
    48  
    49  		BuildAndLoadAPI(func(spec *APISpec) {
    50  			spec.CacheOptions = apidef.CacheOptions{
    51  				CacheTimeout: 120,
    52  				EnableCache:  true,
    53  			}
    54  			spec.Proxy.ListenPath = "/"
    55  			UpdateAPIVersion(spec, "v1", func(v *apidef.VersionInfo) {
    56  				v.UseExtendedPaths = true
    57  				v.ExtendedPaths.Cached = []string{"/testing"}
    58  				v.ExtendedPaths.MethodTransforms = append(v.ExtendedPaths.MethodTransforms, methodTransform)
    59  			})
    60  		})
    61  
    62  		headerCache := map[string]string{"x-tyk-cached-response": "1"}
    63  
    64  		ts.Run(t, []test.TestCase{
    65  			{Method: "GET", Path: "/testing", HeadersNotMatch: headerCache, BodyMatch: `"Method":"POST"`},
    66  			{Method: "GET", Path: "/testing", HeadersMatch: headerCache, BodyMatch: `"Method":"POST"`},
    67  			{Method: "POST", Path: "/testing", HeadersNotMatch: headerCache},
    68  			{Method: "GET", Path: "/testing", HeadersMatch: headerCache},
    69  		}...)
    70  	})
    71  }