diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 9f0834cb..78a51e01 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,6 @@ { "recommendations": [ - "linuxsuren.api-testing" + "linuxsuren.api-testing", + "redhat.vscode-yaml" ] } \ No newline at end of file diff --git a/pkg/render/template_test.go b/pkg/render/template_test.go index 812d2c20..98ed746d 100644 --- a/pkg/render/template_test.go +++ b/pkg/render/template_test.go @@ -29,11 +29,24 @@ func TestRender(t *testing.T) { verify: func(t *testing.T, s string) { assert.Equal(t, 8, len(s)) }, + }, { + name: "complex", + text: `{{(index .items 0).name}}?a=a&key={{randomKubernetesName}}`, + ctx: map[string]interface{}{ + "items": []interface{}{map[string]string{ + "name": "one", + }, map[string]string{ + "name": "two", + }}, + }, + verify: func(t *testing.T, s string) { + assert.Equal(t, 20, len(s), s) + }, }} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result, err := Render(tt.name, tt.text, tt.ctx) - assert.Nil(t, err) + assert.Nil(t, err, err) if tt.expect != "" { assert.Equal(t, tt.expect, result) } diff --git a/pkg/server/remote_server.go b/pkg/server/remote_server.go index 41030930..46ea79e3 100644 --- a/pkg/server/remote_server.go +++ b/pkg/server/remote_server.go @@ -141,7 +141,7 @@ func (s *server) GetVersion(ctx context.Context, in *Empty) (reply *HelloReply, } func findParentTestCases(testcase *testing.TestCase, suite *testing.TestSuite) (testcases []testing.TestCase) { - reg, matchErr := regexp.Compile(`.*\{\{.*\.\w*.*}\}.*`) + reg, matchErr := regexp.Compile(`(.*?\{\{.*\.\w*.*?\}\})`) targetReg, targetErr := regexp.Compile(`\.\w*`) expectNames := new(UniqueSlice[string]) @@ -155,10 +155,10 @@ func findParentTestCases(testcase *testing.TestCase, suite *testing.TestSuite) ( } } - if mached := reg.MatchString(testcase.Request.API); mached { + for _, sub := range reg.FindStringSubmatch(testcase.Request.API) { // remove {{ and }} if left, leftErr := regexp.Compile(`.*\{\{`); leftErr == nil { - api := left.ReplaceAllString(testcase.Request.API, "") + api := left.ReplaceAllString(sub, "") expectName = targetReg.FindString(api) expectName = strings.TrimPrefix(expectName, ".") diff --git a/pkg/server/remote_server_test.go b/pkg/server/remote_server_test.go index 50a8e7aa..1834b661 100644 --- a/pkg/server/remote_server_test.go +++ b/pkg/server/remote_server_test.go @@ -112,7 +112,7 @@ func TestFindParentTestCases(t *testing.T) { testcase: &atesting.TestCase{ Name: "user", Request: atesting.Request{ - API: "/users/{{(index .users 0).name}}", + API: "/users/{{(index .users 0).name}}{{randomKubernetesName}}", Header: map[string]string{ "Authorization": "Bearer {{.login.data.access_token}}", }, diff --git a/sample/kubernetes.yaml b/sample/kubernetes.yaml index 9bce18f6..88252fe2 100644 --- a/sample/kubernetes.yaml +++ b/sample/kubernetes.yaml @@ -1,4 +1,5 @@ #!api-testing +# yaml-language-server: $schema=https://gitee.com/linuxsuren/api-testing/raw/master/sample/api-testing-schema.json name: Kubernetes api: | {{default "https://172.11.0.18:6443" (env "SERVER")}} diff --git a/sample/testsuite-gitee.yaml b/sample/testsuite-gitee.yaml index 0f4b2835..d1d2f733 100644 --- a/sample/testsuite-gitee.yaml +++ b/sample/testsuite-gitee.yaml @@ -1,4 +1,5 @@ #!api-testing +# yaml-language-server: $schema=https://gitee.com/linuxsuren/api-testing/raw/master/sample/api-testing-schema.json name: Gitee api: https://gitee.com/api/v5 items: