committee 3.0.0.alpha → 3.0.0.beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/committee/drivers/hyper_schema.rb +8 -2
- data/lib/committee/drivers/open_api_2.rb +7 -2
- data/lib/committee/drivers/open_api_3.rb +9 -4
- data/lib/committee/drivers.rb +46 -0
- data/lib/committee/middleware/base.rb +9 -11
- data/lib/committee/middleware/response_validation.rb +8 -5
- data/lib/committee/request_unpacker.rb +4 -1
- data/lib/committee/{parameter_coercer.rb → schema_validator/hyper_schema/parameter_coercer.rb} +1 -2
- data/lib/committee/schema_validator/hyper_schema/request_validator.rb +1 -5
- data/lib/committee/schema_validator/hyper_schema/response_validator.rb +3 -9
- data/lib/committee/schema_validator/hyper_schema/router.rb +1 -1
- data/lib/committee/schema_validator/hyper_schema.rb +5 -4
- data/lib/committee/schema_validator/open_api_3/operation_wrapper.rb +46 -19
- data/lib/committee/schema_validator/open_api_3/request_validator.rb +14 -4
- data/lib/committee/schema_validator/open_api_3/response_validator.rb +9 -20
- data/lib/committee/schema_validator/open_api_3/router.rb +15 -4
- data/lib/committee/schema_validator/open_api_3.rb +14 -5
- data/lib/committee/schema_validator/option.rb +2 -5
- data/lib/committee/schema_validator/schema_validator.rb +15 -0
- data/lib/committee/test/methods.rb +3 -5
- data/lib/committee.rb +3 -1
- data/test/drivers/open_api_3_test.rb +2 -1
- data/test/drivers_test.rb +69 -0
- data/test/middleware/base_test.rb +20 -5
- data/test/middleware/request_validation_open_api_3_test.rb +136 -259
- data/test/middleware/request_validation_test.rb +18 -3
- data/test/middleware/response_validation_open_api_3_test.rb +83 -16
- data/test/middleware/response_validation_test.rb +19 -7
- data/test/middleware/stub_test.rb +1 -1
- data/test/{parameter_coercer_test.rb → schema_validator/hyper_schema/parameter_coercer_test.rb} +3 -3
- data/test/schema_validator/hyper_schema/router_test.rb +6 -0
- data/test/schema_validator/open_api_3/operation_wrapper_test.rb +29 -13
- data/test/schema_validator/open_api_3/request_validator_test.rb +31 -132
- data/test/schema_validator/open_api_3/response_validator_test.rb +19 -5
- data/test/test/methods_new_version_test.rb +19 -3
- data/test/test/methods_test.rb +15 -8
- data/test/test_helper.rb +15 -16
- metadata +8 -7
@@ -0,0 +1,15 @@
|
|
1
|
+
class Committee::SchemaValidator
|
2
|
+
class << self
|
3
|
+
def request_media_type(request)
|
4
|
+
request.content_type.to_s.split(";").first.to_s
|
5
|
+
end
|
6
|
+
|
7
|
+
# @param [String] prefix
|
8
|
+
# @return [Regexp]
|
9
|
+
def build_prefix_regexp(prefix)
|
10
|
+
return nil unless prefix
|
11
|
+
|
12
|
+
/\A#{Regexp.escape(prefix)}/.freeze
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -3,7 +3,6 @@ module Committee::Test
|
|
3
3
|
def assert_schema_conform
|
4
4
|
@schema ||= Committee::Middleware::Base.get_schema(committee_options)
|
5
5
|
@router ||= @schema.build_router(committee_options)
|
6
|
-
@validate_errors ||= committee_options[:validate_errors]
|
7
6
|
|
8
7
|
v = @router.build_schema_validator(request_object)
|
9
8
|
|
@@ -13,7 +12,7 @@ module Committee::Test
|
|
13
12
|
end
|
14
13
|
|
15
14
|
status, headers, body = response_data
|
16
|
-
v.response_validate(status, headers, [body]) if
|
15
|
+
v.response_validate(status, headers, [body], true) if validate_response?(status)
|
17
16
|
end
|
18
17
|
|
19
18
|
def committee_options
|
@@ -28,9 +27,8 @@ module Committee::Test
|
|
28
27
|
raise "please set response data like 'last_response.status, last_response.headers, last_response.body'"
|
29
28
|
end
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
status != 204 and @validate_errors || (200...300).include?(status)
|
30
|
+
def validate_response?(status)
|
31
|
+
Committee::Middleware::ResponseValidation.validate?(status, committee_options.fetch(:validate_success_only, false))
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
data/lib/committee.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require "json"
|
2
|
+
require "yaml"
|
2
3
|
require "json_schema"
|
3
4
|
require "rack"
|
4
5
|
require 'openapi_parser'
|
5
6
|
|
6
7
|
require_relative "committee/errors"
|
7
|
-
require_relative "committee/parameter_coercer"
|
8
8
|
require_relative "committee/request_unpacker"
|
9
9
|
|
10
10
|
require_relative "committee/validation_error"
|
@@ -20,6 +20,7 @@ require_relative "committee/middleware/response_validation"
|
|
20
20
|
require_relative "committee/middleware/stub"
|
21
21
|
|
22
22
|
require_relative "committee/schema_validator/option"
|
23
|
+
require_relative "committee/schema_validator/schema_validator"
|
23
24
|
require_relative "committee/schema_validator/open_api_3"
|
24
25
|
require_relative "committee/schema_validator/open_api_3/router"
|
25
26
|
require_relative "committee/schema_validator/open_api_3/operation_wrapper"
|
@@ -31,6 +32,7 @@ require_relative "committee/schema_validator/hyper_schema/response_generator"
|
|
31
32
|
require_relative "committee/schema_validator/hyper_schema/response_validator"
|
32
33
|
require_relative "committee/schema_validator/hyper_schema/router"
|
33
34
|
require_relative "committee/schema_validator/hyper_schema/string_params_coercer"
|
35
|
+
require_relative "committee/schema_validator/hyper_schema/parameter_coercer"
|
34
36
|
|
35
37
|
require_relative "committee/bin/committee_stub"
|
36
38
|
|
@@ -14,7 +14,8 @@ describe Committee::Drivers::OpenAPI3 do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it "override methods" do
|
17
|
-
|
17
|
+
parser = OpenAPIParser.parse(open_api_3_data)
|
18
|
+
schema = @driver.parse(parser)
|
18
19
|
|
19
20
|
assert_kind_of Committee::Drivers::OpenAPI3::Schema, schema
|
20
21
|
assert_kind_of OpenAPIParser::Schemas::OpenAPI, schema.open_api
|
data/test/drivers_test.rb
CHANGED
@@ -20,6 +20,75 @@ describe Committee::Drivers do
|
|
20
20
|
end
|
21
21
|
assert_equal %{Committee: unknown driver "blueprint".}, e.message
|
22
22
|
end
|
23
|
+
|
24
|
+
describe 'load_from_file(filepath)' do
|
25
|
+
it 'load OpenAPI2' do
|
26
|
+
s = Committee::Drivers.load_from_file(open_api_2_filepath)
|
27
|
+
assert_kind_of Committee::Drivers::Schema, s
|
28
|
+
assert_kind_of Committee::Drivers::OpenAPI2::Schema, s
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'load Hyper-Schema' do
|
32
|
+
s = Committee::Drivers.load_from_file(hyper_schema_filepath)
|
33
|
+
assert_kind_of Committee::Drivers::Schema, s
|
34
|
+
assert_kind_of Committee::Drivers::HyperSchema::Schema, s
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'load OpenAPI3' do
|
38
|
+
s = Committee::Drivers.load_from_file(open_api_3_filepath)
|
39
|
+
assert_kind_of Committee::Drivers::Schema, s
|
40
|
+
assert_kind_of Committee::Drivers::OpenAPI3::Schema, s
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'load unsupported file extension' do
|
44
|
+
e = assert_raises(StandardError) do
|
45
|
+
Committee::Drivers.load_from_file('test.xml')
|
46
|
+
end
|
47
|
+
assert_equal "committee filepath option support '.yaml', '.yml', '.json' files only", e.message
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'load_from_json(filepath)' do
|
52
|
+
it 'load OpenAPI2' do
|
53
|
+
s = Committee::Drivers.load_from_json(open_api_2_filepath)
|
54
|
+
assert_kind_of Committee::Drivers::Schema, s
|
55
|
+
assert_kind_of Committee::Drivers::OpenAPI2::Schema, s
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'load Hyper-Schema' do
|
59
|
+
s = Committee::Drivers.load_from_json(hyper_schema_filepath)
|
60
|
+
assert_kind_of Committee::Drivers::Schema, s
|
61
|
+
assert_kind_of Committee::Drivers::HyperSchema::Schema, s
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe 'load_from_yaml(filepath)' do
|
66
|
+
it 'load OpenAPI3' do
|
67
|
+
s = Committee::Drivers.load_from_yaml(open_api_3_filepath)
|
68
|
+
assert_kind_of Committee::Drivers::Schema, s
|
69
|
+
assert_kind_of Committee::Drivers::OpenAPI3::Schema, s
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe 'load_from_data(filepath)' do
|
74
|
+
it 'load OpenAPI3' do
|
75
|
+
s = Committee::Drivers.load_from_data(open_api_3_data)
|
76
|
+
assert_kind_of Committee::Drivers::Schema, s
|
77
|
+
assert_kind_of Committee::Drivers::OpenAPI3::Schema, s
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'load OpenAPI2' do
|
81
|
+
s = Committee::Drivers.load_from_data(open_api_2_data)
|
82
|
+
assert_kind_of Committee::Drivers::Schema, s
|
83
|
+
assert_kind_of Committee::Drivers::OpenAPI2::Schema, s
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'load Hyper-Schema' do
|
87
|
+
s = Committee::Drivers.load_from_data(hyper_schema_data)
|
88
|
+
assert_kind_of Committee::Drivers::Schema, s
|
89
|
+
assert_kind_of Committee::Drivers::HyperSchema::Schema, s
|
90
|
+
end
|
91
|
+
end
|
23
92
|
end
|
24
93
|
|
25
94
|
describe Committee::Drivers::Driver do
|
@@ -20,7 +20,7 @@ describe Committee::Middleware::Base do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it "accepts just a OpenAPI3 schema object" do
|
23
|
-
@app = new_rack_app(
|
23
|
+
@app = new_rack_app(schema: open_api_3_schema)
|
24
24
|
params = {
|
25
25
|
"name" => "cloudnasium"
|
26
26
|
}
|
@@ -87,9 +87,7 @@ describe Committee::Middleware::Base do
|
|
87
87
|
e = assert_raises(ArgumentError) do
|
88
88
|
post "/apps"
|
89
89
|
end
|
90
|
-
|
91
|
-
assert_equal "Committee: schema expected to be an instance " +
|
92
|
-
"of Committee::Drivers::Schema.", e.message
|
90
|
+
assert_equal "Committee: schema expected to be an instance of Committee::Drivers::Schema.", e.message
|
93
91
|
end
|
94
92
|
|
95
93
|
it "schema not exist" do
|
@@ -98,7 +96,24 @@ describe Committee::Middleware::Base do
|
|
98
96
|
post "/apps"
|
99
97
|
end
|
100
98
|
|
101
|
-
assert_equal "Committee: need option `schema` or `
|
99
|
+
assert_equal "Committee: need option `schema` or `filepath`", e.message
|
100
|
+
end
|
101
|
+
|
102
|
+
describe 'initialize option' do
|
103
|
+
it "filepath option with hyper-schema" do
|
104
|
+
b = Committee::Middleware::Base.new(nil, filepath: hyper_schema_filepath)
|
105
|
+
assert_kind_of Committee::Drivers::HyperSchema::Schema, b.instance_variable_get(:@schema)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "filepath option with OpenAPI2" do
|
109
|
+
b = Committee::Middleware::Base.new(nil, filepath: open_api_2_filepath)
|
110
|
+
assert_kind_of Committee::Drivers::OpenAPI2::Schema, b.instance_variable_get(:@schema)
|
111
|
+
end
|
112
|
+
|
113
|
+
it "filepath option with OpenAPI3" do
|
114
|
+
b = Committee::Middleware::Base.new(nil, filepath: open_api_3_filepath)
|
115
|
+
assert_kind_of Committee::Drivers::OpenAPI3::Schema, b.instance_variable_get(:@schema)
|
116
|
+
end
|
102
117
|
end
|
103
118
|
|
104
119
|
private
|