From 20d9b006bef46e823377b80b1c290e4f161fa633 Mon Sep 17 00:00:00 2001 From: monalisa Date: Tue, 24 Oct 2023 00:28:49 +0200 Subject: [PATCH 1/2] Fix pattern validation for input properties --- libs/jsonschema/instance.go | 5 ++- libs/jsonschema/instance_test.go | 37 +++++++++++++++++++ .../multiple-patterns-schema.json | 12 ++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 libs/jsonschema/testdata/instance-validate/multiple-patterns-schema.json diff --git a/libs/jsonschema/instance.go b/libs/jsonschema/instance.go index d08ed519ae..091822da1e 100644 --- a/libs/jsonschema/instance.go +++ b/libs/jsonschema/instance.go @@ -122,7 +122,10 @@ func (s *Schema) validatePattern(instance map[string]any) error { if !ok { continue } - return ValidatePatternMatch(k, v, fieldInfo) + err := ValidatePatternMatch(k, v, fieldInfo) + if err != nil { + return err + } } return nil } diff --git a/libs/jsonschema/instance_test.go b/libs/jsonschema/instance_test.go index 3a357d714c..007078b227 100644 --- a/libs/jsonschema/instance_test.go +++ b/libs/jsonschema/instance_test.go @@ -193,3 +193,40 @@ func TestValidateInstancePatternWithCustomMessage(t *testing.T) { assert.EqualError(t, schema.validatePattern(invalidInstanceValue), "invalid value for foo: \"xyz\". Please enter a string starting with 'a' and ending with 'c'") assert.EqualError(t, schema.ValidateInstance(invalidInstanceValue), "invalid value for foo: \"xyz\". Please enter a string starting with 'a' and ending with 'c'") } + +func TestValidateInstanceForMultiplePatterns(t *testing.T) { + schema, err := Load("./testdata/instance-validate/multiple-patterns-schema.json") + require.NoError(t, err) + + // Valid values for both foo and bar + validInstance := map[string]any{ + "foo": "abcc", + "bar": "deff", + } + assert.NoError(t, schema.validatePattern(validInstance)) + assert.NoError(t, schema.ValidateInstance(validInstance)) + + // Valid value for bar, invalid value for foo + invalidInstanceValue := map[string]any{ + "foo": "xyz", + "bar": "deff", + } + assert.EqualError(t, schema.validatePattern(invalidInstanceValue), "invalid value for foo: \"xyz\". Expected to match regex pattern: ^[a-c]+$") + assert.EqualError(t, schema.ValidateInstance(invalidInstanceValue), "invalid value for foo: \"xyz\". Expected to match regex pattern: ^[a-c]+$") + + // Valid value for foo, invalid value for bar + invalidInstanceValue = map[string]any{ + "foo": "abcc", + "bar": "xyz", + } + assert.EqualError(t, schema.validatePattern(invalidInstanceValue), "invalid value for bar: \"xyz\". Expected to match regex pattern: ^[d-f]+$") + assert.EqualError(t, schema.ValidateInstance(invalidInstanceValue), "invalid value for bar: \"xyz\". Expected to match regex pattern: ^[d-f]+$") + + // Invalid values for both foo and bar + invalidInstanceValue = map[string]any{ + "foo": "xyz", + "bar": "xyz", + } + assert.EqualError(t, schema.validatePattern(invalidInstanceValue), "invalid value for foo: \"xyz\". Expected to match regex pattern: ^[a-c]+$") + assert.EqualError(t, schema.ValidateInstance(invalidInstanceValue), "invalid value for foo: \"xyz\". Expected to match regex pattern: ^[a-c]+$") +} diff --git a/libs/jsonschema/testdata/instance-validate/multiple-patterns-schema.json b/libs/jsonschema/testdata/instance-validate/multiple-patterns-schema.json new file mode 100644 index 0000000000..1098b7fc6c --- /dev/null +++ b/libs/jsonschema/testdata/instance-validate/multiple-patterns-schema.json @@ -0,0 +1,12 @@ +{ + "properties": { + "foo": { + "type": "string", + "pattern": "^[a-c]+$" + }, + "bar": { + "type": "string", + "pattern": "^[d-f]+$" + } + } +} From 1c2e1cb3d38f5394ecd4b205f21f308b4847f62e Mon Sep 17 00:00:00 2001 From: monalisa Date: Tue, 24 Oct 2023 00:57:09 +0200 Subject: [PATCH 2/2] remove random test --- libs/jsonschema/instance_test.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/libs/jsonschema/instance_test.go b/libs/jsonschema/instance_test.go index 007078b227..8edbf796de 100644 --- a/libs/jsonschema/instance_test.go +++ b/libs/jsonschema/instance_test.go @@ -221,12 +221,4 @@ func TestValidateInstanceForMultiplePatterns(t *testing.T) { } assert.EqualError(t, schema.validatePattern(invalidInstanceValue), "invalid value for bar: \"xyz\". Expected to match regex pattern: ^[d-f]+$") assert.EqualError(t, schema.ValidateInstance(invalidInstanceValue), "invalid value for bar: \"xyz\". Expected to match regex pattern: ^[d-f]+$") - - // Invalid values for both foo and bar - invalidInstanceValue = map[string]any{ - "foo": "xyz", - "bar": "xyz", - } - assert.EqualError(t, schema.validatePattern(invalidInstanceValue), "invalid value for foo: \"xyz\". Expected to match regex pattern: ^[a-c]+$") - assert.EqualError(t, schema.ValidateInstance(invalidInstanceValue), "invalid value for foo: \"xyz\". Expected to match regex pattern: ^[a-c]+$") }