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  }