From a90308698f5b403477d5ef1d22a07aa489ebd66f Mon Sep 17 00:00:00 2001 From: rick <1450685+LinuxSuRen@users.noreply.github.com> Date: Thu, 27 Apr 2023 21:59:26 +0800 Subject: [PATCH] feat: giving error info when having duplicated names --- pkg/testing/parser.go | 14 +++++++++++++- pkg/testing/parser_test.go | 8 ++++++++ pkg/testing/testdata/duplicated-names.yaml | 8 ++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 pkg/testing/testdata/duplicated-names.yaml diff --git a/pkg/testing/parser.go b/pkg/testing/parser.go index 53aa4234..182d16e4 100644 --- a/pkg/testing/parser.go +++ b/pkg/testing/parser.go @@ -46,7 +46,19 @@ func Parse(configFile string) (testSuite *TestSuite, err error) { // ParseFromData parses data and returns the test suite func ParseFromData(data []byte) (testSuite *TestSuite, err error) { testSuite = &TestSuite{} - err = yaml.Unmarshal(data, testSuite) + if err = yaml.Unmarshal(data, testSuite); err != nil { + return + } + + names := map[string]struct{}{} + for _, item := range testSuite.Items { + if _, ok := names[item.Name]; !ok { + names[item.Name] = struct{}{} + } else { + err = fmt.Errorf("having duplicated name '%s'", item.Name) + break + } + } return } diff --git a/pkg/testing/parser_test.go b/pkg/testing/parser_test.go index 42e2dd27..48f8c14f 100644 --- a/pkg/testing/parser_test.go +++ b/pkg/testing/parser_test.go @@ -35,6 +35,14 @@ func TestParse(t *testing.T) { assert.NotNil(t, err) } +func TestDuplicatedNames(t *testing.T) { + _, err := Parse("testdata/duplicated-names.yaml") + assert.NotNil(t, err) + + _, err = ParseFromData([]byte("fake")) + assert.NotNil(t, err) +} + func TestRequestRender(t *testing.T) { tests := []struct { name string diff --git a/pkg/testing/testdata/duplicated-names.yaml b/pkg/testing/testdata/duplicated-names.yaml new file mode 100644 index 00000000..6480e132 --- /dev/null +++ b/pkg/testing/testdata/duplicated-names.yaml @@ -0,0 +1,8 @@ +name: duplicated names +items: +- name: projects + request: + api: https://foo +- name: projects + request: + api: https://foo \ No newline at end of file