package gateway import ( "context" "encoding/json" "io/ioutil" "testing" "forge.cadoles.com/Cadoles/emissary/internal/spec" "github.com/pkg/errors" ) type validatorTestCase struct { Name string Source string ExpectedResult bool } var validatorTestCases = []validatorTestCase{ { Name: "SpecOK", Source: "testdata/spec-ok.json", ExpectedResult: true, }, { Name: "SpecMissingProp", Source: "testdata/spec-missing-prop.json", ExpectedResult: false, }, { Name: "SpecAdditionalProp", Source: "testdata/spec-additional-prop.json", ExpectedResult: false, }, } func TestValidator(t *testing.T) { t.Parallel() validator := spec.NewValidator() if err := validator.Register(NameGateway, schema); err != nil { t.Fatalf("+%v", errors.WithStack(err)) } for _, tc := range validatorTestCases { func(tc *validatorTestCase) { t.Run(tc.Name, func(t *testing.T) { t.Parallel() rawSpec, err := ioutil.ReadFile(tc.Source) if err != nil { t.Fatalf("+%v", errors.WithStack(err)) } var spec spec.RawSpec if err := json.Unmarshal(rawSpec, &spec); err != nil { t.Fatalf("+%v", errors.WithStack(err)) } ctx := context.Background() result, err := validator.Validate(ctx, &spec) if e, g := tc.ExpectedResult, result; e != g { t.Errorf("result: expected '%v', got '%v'", e, g) } if tc.ExpectedResult && err != nil { t.Errorf("+%v", errors.WithStack(err)) } }) }(&tc) } }