github.com/Axway/agent-sdk@v1.1.101/pkg/apic/provisioning/schemabuilder_test.go (about)

     1  package provisioning
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  const (
    11  	axwayOrder = "x-axway-order"
    12  )
    13  
    14  func TestNewSchemaBuilder(t *testing.T) {
    15  	builder := NewSchemaBuilder()
    16  	assert.NotNil(t, builder)
    17  
    18  	schemaBuilderProps := builder.(*schemaBuilder)
    19  
    20  	// test all the default values
    21  	assert.Nil(t, schemaBuilderProps.err)
    22  	assert.Empty(t, schemaBuilderProps.name)
    23  	assert.Empty(t, schemaBuilderProps.properties)
    24  	assert.Len(t, schemaBuilderProps.uniqueKeys, 0)
    25  	assert.Len(t, schemaBuilderProps.propertyOrder, 0)
    26  }
    27  
    28  func TestSubscriptionSchemaBuilderSetters(t *testing.T) {
    29  	_, err := NewSchemaBuilder().
    30  		SetName("name").
    31  		AddUniqueKey("key").
    32  		AddProperty(NewSchemaPropertyBuilder().
    33  			SetName("name").
    34  			SetDescription("description").
    35  			SetRequired().
    36  			IsString().
    37  			SetEnumValues([]string{"a", "b", "c"})).
    38  		Build()
    39  
    40  	assert.Nil(t, err)
    41  
    42  	_, err = NewSchemaBuilder().
    43  		SetName("name1").
    44  		SetDescription("description1").
    45  		AddUniqueKey("key").
    46  		AddProperty(NewSchemaPropertyBuilder().
    47  			SetName("name").
    48  			IsString().
    49  			SetEnumValues([]string{"a", "b", "c"})).
    50  		AddProperty(NewSchemaPropertyBuilder().
    51  			IsString().
    52  			SetEnumValues([]string{"a", "b", "c"})).
    53  		Build()
    54  
    55  	assert.NotNil(t, err)
    56  
    57  	// set property order - property order takes precedence
    58  	schemaMap1, err := NewSchemaBuilder().
    59  		SetName("name").
    60  		AddUniqueKey("key").
    61  		SetPropertyOrder([]string{"name3", "name2", "name1"}).
    62  		AddProperty(NewSchemaPropertyBuilder().
    63  			SetName("name1").
    64  			SetDescription("description").
    65  			SetRequired().
    66  			IsString().
    67  			SetEnumValues([]string{"a", "b", "c"})).
    68  		AddProperty(NewSchemaPropertyBuilder().
    69  			SetName("name2").
    70  			SetDescription("description").
    71  			SetRequired().
    72  			IsString().
    73  			SetEnumValues([]string{"a", "b", "c"})).
    74  		AddProperty(NewSchemaPropertyBuilder().
    75  			SetName("name3").
    76  			SetDescription("description").
    77  			SetRequired().
    78  			IsString().
    79  			SetEnumValues([]string{"a", "b", "c"})).
    80  		Build()
    81  
    82  	assert.Nil(t, err)
    83  	assert.NotNil(t, schemaMap1)
    84  	assert.NotEmpty(t, schemaMap1[axwayOrder])
    85  
    86  	// assert that properties in property order takes precedence over added property appended order
    87  	propertyOrder, _ := schemaMap1[axwayOrder].([]interface{})
    88  	assert.Equal(t, propertyOrder[0].(string), "name3")
    89  	assert.Equal(t, propertyOrder[1].(string), "name2")
    90  	assert.Equal(t, propertyOrder[2].(string), "name1")
    91  
    92  	// do no set property order.  property order appended as each property is added
    93  	schemaMap2, err := NewSchemaBuilder().
    94  		SetName("name").
    95  		AddUniqueKey("key").
    96  		AddProperty(NewSchemaPropertyBuilder().
    97  			SetName("name5").
    98  			SetDescription("description").
    99  			SetRequired().
   100  			IsString().
   101  			SetEnumValues([]string{"a", "b", "c"})).
   102  		AddProperty(NewSchemaPropertyBuilder().
   103  			SetName("name3").
   104  			SetDescription("description").
   105  			SetRequired().
   106  			IsString().
   107  			SetEnumValues([]string{"a", "b", "c"})).
   108  		AddProperty(NewSchemaPropertyBuilder().
   109  			SetName("name1").
   110  			SetDescription("description").
   111  			SetRequired().
   112  			IsString().
   113  			SetEnumValues([]string{"a", "b", "c"})).
   114  		Build()
   115  
   116  	assert.Nil(t, err)
   117  	assert.NotNil(t, schemaMap2)
   118  	assert.NotEmpty(t, schemaMap2[axwayOrder])
   119  
   120  	// assert that appended properties exist
   121  	assert.Contains(t, schemaMap2[axwayOrder], "name5")
   122  	assert.Contains(t, schemaMap2[axwayOrder], "name3")
   123  	assert.Contains(t, schemaMap2[axwayOrder], "name1")
   124  
   125  	// set property order, however, no properties were added to match any properties in property order
   126  	schemaMap3, _ := NewSchemaBuilder().
   127  		SetName("name").
   128  		AddUniqueKey("key").
   129  		SetPropertyOrder([]string{"name3", "name2", "name1"}).
   130  		AddProperty(NewSchemaPropertyBuilder().
   131  			SetName("name5").
   132  			SetDescription("description").
   133  			SetRequired().
   134  			IsString().
   135  			SetEnumValues([]string{"a", "b", "c"})).
   136  		Build()
   137  
   138  	assert.NotNil(t, schemaMap3)
   139  	assert.NotEmpty(t, schemaMap3[axwayOrder])
   140  
   141  	// assert that properties in property order weren't added
   142  	propertyOrder1, _ := schemaMap3[axwayOrder].([]interface{})
   143  	for _, item := range propertyOrder1 {
   144  		assert.NotEqual(t, item.(string), "name5")
   145  	}
   146  }
   147  
   148  func TestSchemaBuilderWithDependenciesProperties(t *testing.T) {
   149  	// set dependent property - dependent property definition error
   150  	_, err := NewSchemaBuilder().
   151  		SetName("sch").
   152  		AddProperty(NewSchemaPropertyBuilder().
   153  			SetName("dep").
   154  			IsString().
   155  			SetEnumValues([]string{"a", "b", "c"}).
   156  			AddDependency("a", NewSchemaPropertyBuilder().
   157  				SetName("dep"))).
   158  		Build()
   159  
   160  	assert.NotNil(t, err)
   161  
   162  	// set dependent property - good path
   163  	s, err := NewSchemaBuilder().
   164  		SetName("sch").
   165  		AddProperty(NewSchemaPropertyBuilder().
   166  			SetName("prop").
   167  			IsString().
   168  			SetEnumValues([]string{"a", "b", "c"}).
   169  			AddDependency("a", NewSchemaPropertyBuilder().
   170  				SetName("a-prop").
   171  				IsString())).
   172  		Build()
   173  	assert.Nil(t, err)
   174  	schema := &jsonSchema{}
   175  	buf, _ := json.Marshal(s)
   176  	json.Unmarshal(buf, schema)
   177  	assert.NotNil(t, schema.Dependencies)
   178  
   179  }