github.com/kaleido-io/firefly@v0.0.0-20210622132723-8b4b6aacb971/internal/data/json_validator_test.go (about) 1 // Copyright © 2021 Kaleido, Inc. 2 // 3 // SPDX-License-Identifier: Apache-2.0 4 // 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, software 12 // distributed under the License is distributed on an "AS IS" BASIS, 13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 // See the License for the specific language governing permissions and 15 // limitations under the License. 16 17 package data 18 19 import ( 20 "context" 21 "testing" 22 23 "github.com/kaleido-io/firefly/pkg/fftypes" 24 "github.com/stretchr/testify/assert" 25 ) 26 27 func TestJSONValidator(t *testing.T) { 28 29 schemaBinary := []byte(`{ 30 "properties": { 31 "prop1": { 32 "type": "string" 33 } 34 }, 35 "required": ["prop1"] 36 }`) 37 38 dt := &fftypes.Datatype{ 39 Validator: fftypes.ValidatorTypeJSON, 40 Name: "customer", 41 Version: "0.0.1", 42 Value: fftypes.Byteable(schemaBinary), 43 } 44 45 jv, err := newJSONValidator(context.Background(), "ns1", dt) 46 assert.NoError(t, err) 47 48 err = jv.validateBytes(context.Background(), []byte(`{}`)) 49 assert.Regexp(t, "FF10198.*prop1", err) 50 51 err = jv.validateBytes(context.Background(), []byte(`{"prop1": "a value"}`)) 52 assert.NoError(t, err) 53 54 err = jv.validateBytes(context.Background(), []byte(`{!bad json`)) 55 assert.Regexp(t, "FF10197", err) 56 57 assert.Equal(t, int64(len(schemaBinary)), jv.Size()) 58 59 } 60 61 func TestJSONValidatorParseSchemaFail(t *testing.T) { 62 63 dt := &fftypes.Datatype{ 64 Validator: fftypes.ValidatorTypeJSON, 65 Name: "customer", 66 Version: "0.0.1", 67 Value: fftypes.Byteable(`{!json`), 68 } 69 70 _, err := newJSONValidator(context.Background(), "ns1", dt) 71 assert.Regexp(t, "FF10196", err) 72 73 } 74 75 func TestJSONValidatorNilData(t *testing.T) { 76 77 v := &jsonValidator{} 78 err := v.Validate(context.Background(), &fftypes.Data{}) 79 assert.Regexp(t, "FF10199", err) 80 81 }