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.
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