@@ -10,19 +10,38 @@ module Schema
10
10
# get :index
11
11
# assert_response_schema
12
12
def assert_response_schema ( schema_path = nil , message = nil )
13
- matcher = AssertResponseSchema . new ( schema_path , response , message )
13
+ matcher = AssertResponseSchema . new ( schema_path , request , response , message )
14
+ assert ( matcher . call , matcher . message )
15
+ end
16
+
17
+ def assert_request_schema ( schema_path = nil , message = nil )
18
+ matcher = AssertRequestSchema . new ( schema_path , request , response , message )
19
+ assert ( matcher . call , matcher . message )
20
+ end
21
+
22
+ # May be renamed
23
+ def assert_request_response_schema ( schema_path = nil , message = nil )
24
+ assert_request_schema ( schema_path , message )
25
+ assert_response_schema ( schema_path , message )
26
+ end
27
+
28
+ def assert_schema ( payload , schema_path = nil , message = nil )
29
+ matcher = AssertSchema . new ( schema_path , request , response , message , payload )
14
30
assert ( matcher . call , matcher . message )
15
31
end
16
32
17
33
MissingSchema = Class . new ( Minitest ::Assertion )
18
34
InvalidSchemaError = Class . new ( Minitest ::Assertion )
19
35
20
- class AssertResponseSchema
21
- attr_reader :schema_path , :response , :message
36
+ class AssertSchema
37
+ attr_reader :schema_path , :request , : response, :message , :payload
22
38
23
- def initialize ( schema_path , response , message )
39
+ # Interface may change.
40
+ def initialize ( schema_path , request , response , message , payload = nil )
24
41
require_json_schema!
42
+ @request = request
25
43
@response = response
44
+ @payload = payload
26
45
@schema_path = schema_path || schema_path_default
27
46
@message = message
28
47
@document_store = JsonSchema ::DocumentStore . new
@@ -41,11 +60,11 @@ def call
41
60
attr_reader :document_store
42
61
43
62
def controller_path
44
- response . request . filtered_parameters [ :controller ]
63
+ request . filtered_parameters [ :controller ]
45
64
end
46
65
47
66
def action
48
- response . request . filtered_parameters [ :action ]
67
+ request . filtered_parameters [ :action ]
49
68
end
50
69
51
70
def schema_directory
@@ -68,6 +87,10 @@ def response_body
68
87
load_json ( response . body )
69
88
end
70
89
90
+ def request_params
91
+ request . env [ 'action_dispatch.request.request_parameters' ]
92
+ end
93
+
71
94
def json_schema
72
95
@json_schema ||= JsonSchema . parse! ( schema_data )
73
96
end
@@ -98,6 +121,18 @@ def require_json_schema!
98
121
raise LoadError , "You don't have json_schema installed in your application. Please add it to your Gemfile and run bundle install"
99
122
end
100
123
end
124
+ class AssertResponseSchema < AssertSchema
125
+ def initialize ( *)
126
+ super
127
+ @payload = response_body
128
+ end
129
+ end
130
+ class AssertRequestSchema < AssertSchema
131
+ def initialize ( *)
132
+ super
133
+ @payload = request_params
134
+ end
135
+ end
101
136
end
102
137
end
103
138
end
0 commit comments