-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjson_schema_bundler_test.go
More file actions
91 lines (81 loc) · 2.62 KB
/
json_schema_bundler_test.go
File metadata and controls
91 lines (81 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package main
import (
"errors"
"github.com/xeipuuv/gojsonreference"
"testing"
)
type stubJsonSchemaLoader struct {
cond bool
}
func (l stubJsonSchemaLoader) Load(ref gojsonreference.JsonReference) (JsonSchema, error) {
if l.cond {
switch ref.GetUrl().String() {
case "/base":
return JsonSchema{Id: "BaseSchema", Ref: "/referred"}, nil
case "/referred":
return JsonSchema{Id: "ReferredSchema", Ref: "/deep_referred"}, nil
case "/deep_referred":
return JsonSchema{Id: "DeepReferredSchema"}, nil
}
}
return JsonSchema{Id: "ErrorJsonSchema"}, errors.New("cannot load json schema")
}
func newSucceedBundler() JsonSchemaBundler {
return NewJsonSchemaBundler(stubJsonSchemaLoader{true})
}
func newFailureBundler() JsonSchemaBundler {
return NewJsonSchemaBundler(stubJsonSchemaLoader{false})
}
func TestJsonSchemaBundler_AddJsonSchema(t *testing.T) {
sb := newSucceedBundler()
fb := newFailureBundler()
// succeed
if err := sb.AddJsonSchema("/base"); err != nil {
t.Fatal("succeed bundler should be load json schema")
}
ref, _ := gojsonreference.NewJsonReference("/referred")
bundle, _ := sb.GetBundle(ref)
if bundle.Ref.GetUrl().Path != ref.GetUrl().Path {
t.Errorf("referred json schema has invalid url URL: %s", bundle.Ref.GetUrl())
}
// failure
if err := fb.AddJsonSchema("/base"); err == nil {
t.Fatal("failure bundler should be not load json schema")
}
}
func TestJsonSchemaBundler_GetBundles(t *testing.T) {
sb := newSucceedBundler()
if err := sb.AddJsonSchema("/base"); err != nil {
t.Fatal("succeed bundler should be load json schema")
}
if len(sb.GetBundles()) != 3 {
t.Errorf("mismatched bundle count. COUNT: %d", len(sb.GetBundles()))
}
}
func TestJsonSchemaBundler_GetBundle(t *testing.T) {
sb := newSucceedBundler()
if err := sb.AddJsonSchema("/base"); err != nil {
t.Fatal("succeed bundler should be load json schema")
}
ref, _ := gojsonreference.NewJsonReference("/base")
bundle, ok := sb.GetBundle(ref)
if !ok {
t.Fatal("cannot get bundle")
} else if bundle.Schema.Id != "BaseSchema" {
t.Error("get bundle retures invalid schema ID: %s", bundle.Schema.Id)
}
}
func TestJsonSchemaBundler_GetReferredBundleWalk(t *testing.T) {
sb := newSucceedBundler()
if err := sb.AddJsonSchema("/base"); err != nil {
t.Fatal("succeed bundler should be load json schema")
}
ref, _ := gojsonreference.NewJsonReference("/base")
bundle, _ := sb.GetBundle(ref)
refBundle, err := sb.GetReferredBundleWalk(bundle)
if err != nil {
t.Fatal("cannot get referred bundle")
} else if refBundle.Schema.Id != "DeepReferredSchema" {
t.Error("get bundle retures invalid schema ID: %s", bundle.Schema.Id)
}
}