committee 3.0.0.alpha → 3.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/lib/committee/drivers/hyper_schema.rb +8 -2
  3. data/lib/committee/drivers/open_api_2.rb +7 -2
  4. data/lib/committee/drivers/open_api_3.rb +9 -4
  5. data/lib/committee/drivers.rb +46 -0
  6. data/lib/committee/middleware/base.rb +9 -11
  7. data/lib/committee/middleware/response_validation.rb +8 -5
  8. data/lib/committee/request_unpacker.rb +4 -1
  9. data/lib/committee/{parameter_coercer.rb → schema_validator/hyper_schema/parameter_coercer.rb} +1 -2
  10. data/lib/committee/schema_validator/hyper_schema/request_validator.rb +1 -5
  11. data/lib/committee/schema_validator/hyper_schema/response_validator.rb +3 -9
  12. data/lib/committee/schema_validator/hyper_schema/router.rb +1 -1
  13. data/lib/committee/schema_validator/hyper_schema.rb +5 -4
  14. data/lib/committee/schema_validator/open_api_3/operation_wrapper.rb +46 -19
  15. data/lib/committee/schema_validator/open_api_3/request_validator.rb +14 -4
  16. data/lib/committee/schema_validator/open_api_3/response_validator.rb +9 -20
  17. data/lib/committee/schema_validator/open_api_3/router.rb +15 -4
  18. data/lib/committee/schema_validator/open_api_3.rb +14 -5
  19. data/lib/committee/schema_validator/option.rb +2 -5
  20. data/lib/committee/schema_validator/schema_validator.rb +15 -0
  21. data/lib/committee/test/methods.rb +3 -5
  22. data/lib/committee.rb +3 -1
  23. data/test/drivers/open_api_3_test.rb +2 -1
  24. data/test/drivers_test.rb +69 -0
  25. data/test/middleware/base_test.rb +20 -5
  26. data/test/middleware/request_validation_open_api_3_test.rb +136 -259
  27. data/test/middleware/request_validation_test.rb +18 -3
  28. data/test/middleware/response_validation_open_api_3_test.rb +83 -16
  29. data/test/middleware/response_validation_test.rb +19 -7
  30. data/test/middleware/stub_test.rb +1 -1
  31. data/test/{parameter_coercer_test.rb → schema_validator/hyper_schema/parameter_coercer_test.rb} +3 -3
  32. data/test/schema_validator/hyper_schema/router_test.rb +6 -0
  33. data/test/schema_validator/open_api_3/operation_wrapper_test.rb +29 -13
  34. data/test/schema_validator/open_api_3/request_validator_test.rb +31 -132
  35. data/test/schema_validator/open_api_3/response_validator_test.rb +19 -5
  36. data/test/test/methods_new_version_test.rb +19 -3
  37. data/test/test/methods_test.rb +15 -8
  38. data/test/test_helper.rb +15 -16
  39. 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 validate?(status)
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
- # TODO: refactoring
32
- def validate?(status)
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
- schema = @driver.parse(open_api_3_data)
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(open_api_3: open_api_3_schema)
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 `open_api_3`", e.message
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