Hardening mock generator with a few more tests

Signed-off-by: Quobix <dave@quobix.com>
This commit is contained in:
Quobix
2023-08-30 06:27:57 -04:00
committed by quobix
parent 9fb09f3a42
commit 2ddc147906
2 changed files with 49 additions and 2 deletions

View File

@@ -92,8 +92,6 @@ func (mg *MockGenerator) GenerateMock(mock any, name string) ([]byte, error) {
// check if this is a SchemaProxy, if not, then see if it has a Schema, if not, then we can't generate a mock. // check if this is a SchemaProxy, if not, then see if it has a Schema, if not, then we can't generate a mock.
var schemaValue *highbase.Schema var schemaValue *highbase.Schema
switch reflect.TypeOf(mock) { switch reflect.TypeOf(mock) {
case reflect.TypeOf(&highbase.SchemaProxy{}):
schemaValue = mock.(*highbase.SchemaProxy).Schema()
case reflect.TypeOf(&highbase.Schema{}): case reflect.TypeOf(&highbase.Schema{}):
schemaValue = mock.(*highbase.Schema) schemaValue = mock.(*highbase.Schema)
default: default:

View File

@@ -20,6 +20,12 @@ type fakeMockable struct {
Examples map[string]*highbase.Example Examples map[string]*highbase.Example
} }
type fakeMockableButWithASchemaNotAProxy struct {
Schema *highbase.Schema
Example any
Examples map[string]*highbase.Example
}
var simpleFakeMockSchema = `type: string var simpleFakeMockSchema = `type: string
enum: [magic-herbs]` enum: [magic-herbs]`
@@ -56,6 +62,29 @@ func createFakeMock(mock string, values map[string]any, example any) *fakeMockab
} }
} }
func createFakeMockWithoutProxy(mock string, values map[string]any, example any) *fakeMockableButWithASchemaNotAProxy {
var root yaml.Node
_ = yaml.Unmarshal([]byte(mock), &root)
var lowProxy lowbase.SchemaProxy
_ = lowProxy.Build(&root, root.Content[0], nil)
lowRef := low.NodeReference[*lowbase.SchemaProxy]{
Value: &lowProxy,
}
highSchema := highbase.NewSchemaProxy(&lowRef)
examples := make(map[string]*highbase.Example)
for k, v := range values {
examples[k] = &highbase.Example{
Value: v,
}
}
return &fakeMockableButWithASchemaNotAProxy{
Schema: highSchema.Schema(),
Example: example,
Examples: examples,
}
}
func TestNewMockGenerator(t *testing.T) { func TestNewMockGenerator(t *testing.T) {
mg := NewMockGenerator(MockJSON) mg := NewMockGenerator(MockJSON)
assert.NotNil(t, mg) assert.NotNil(t, mg)
@@ -210,3 +239,23 @@ func TestMockGenerator_GenerateJSONMock_Object_NoExamples_YAML(t *testing.T) {
assert.GreaterOrEqual(t, m["herbs"].(int), 350) assert.GreaterOrEqual(t, m["herbs"].(int), 350)
assert.LessOrEqual(t, m["herbs"].(int), 400) assert.LessOrEqual(t, m["herbs"].(int), 400)
} }
// should result in the exact same output as the above test
func TestMockGenerator_GenerateJSONMock_Object_RawSchema(t *testing.T) {
fake := createFakeMockWithoutProxy(objectFakeMockSchema, nil, nil)
mg := NewMockGenerator(MockYAML)
mock, err := mg.GenerateMock(fake, "")
assert.NoError(t, err)
// re-serialize back into a map and check the values
var m map[string]any
err = yaml.Unmarshal(mock, &m)
assert.NoError(t, err)
assert.Len(t, m, 2)
assert.GreaterOrEqual(t, len(m["coffee"].(string)), 6)
assert.GreaterOrEqual(t, m["herbs"].(int), 350)
assert.LessOrEqual(t, m["herbs"].(int), 400)
}