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 }