apipie-rails 0.5.18 → 0.6.0
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 +4 -4
- data/.github/workflows/build.yml +50 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +24 -1
- data/Gemfile +1 -1
- data/README.rst +5 -5
- data/apipie-rails.gemspec +2 -1
- data/app/controllers/apipie/apipies_controller.rb +1 -1
- data/config/locales/pt-BR.yml +1 -1
- data/{Gemfile.rails42 → gemfiles/Gemfile.rails42} +4 -3
- data/gemfiles/Gemfile.rails42.lock +122 -0
- data/gemfiles/Gemfile.rails52 +10 -0
- data/gemfiles/Gemfile.rails60 +17 -0
- data/gemfiles/Gemfile.rails61 +17 -0
- data/lib/apipie/extractor/recorder.rb +3 -2
- data/lib/apipie/validator.rb +1 -1
- data/lib/apipie/version.rb +1 -1
- data/lib/apipie-rails.rb +0 -4
- data/lib/tasks/apipie.rake +14 -9
- data/rel-eng/gem_release.ipynb +398 -0
- data/spec/controllers/apipies_controller_spec.rb +25 -0
- data/spec/dummy/config/application.rb +0 -3
- data/spec/dummy/config/environments/development.rb +0 -3
- data/spec/dummy/config/environments/production.rb +0 -3
- data/spec/dummy/config/environments/test.rb +0 -5
- data/spec/lib/swagger/response_validation_spec.rb +17 -17
- data/spec/spec_helper.rb +7 -1
- data/spec/support/rails-42-ruby-26.rb +15 -0
- metadata +27 -92
- data/.travis.yml +0 -33
- data/Gemfile.rails41 +0 -7
- data/Gemfile.rails50 +0 -9
- data/Gemfile.rails51 +0 -9
- data/Gemfile.rails60 +0 -10
@@ -0,0 +1,398 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "markdown",
|
5
|
+
"metadata": {},
|
6
|
+
"source": [
|
7
|
+
"## Release of apipie-rails gem\n",
|
8
|
+
"\n",
|
9
|
+
"### Requirements\n",
|
10
|
+
"- push access to https://github.com/Apipie/apipie-rails\n",
|
11
|
+
"- push access to rubygems.org for apipie-rails\n",
|
12
|
+
"- sudo yum install python-slugify asciidoc\n",
|
13
|
+
"- ensure neither the `git push` or `gem push` don't require interractive auth. If you can't use api key or ssh key to auth skip these steps and run them form the shell manually\n",
|
14
|
+
"- ensure all checks have passed on the branch you're about to release\n",
|
15
|
+
"\n",
|
16
|
+
"### Release process\n",
|
17
|
+
"- Follow the steps with `<Shift>+<Enter>` or `<Ctrl>+<Enter>,<Down>`\n",
|
18
|
+
"- If anything fails, fix it and re-run the step if applicable\n",
|
19
|
+
"\n",
|
20
|
+
"### Release settings"
|
21
|
+
]
|
22
|
+
},
|
23
|
+
{
|
24
|
+
"cell_type": "code",
|
25
|
+
"execution_count": null,
|
26
|
+
"metadata": {},
|
27
|
+
"outputs": [],
|
28
|
+
"source": [
|
29
|
+
"%autosave 0"
|
30
|
+
]
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"cell_type": "code",
|
34
|
+
"execution_count": null,
|
35
|
+
"metadata": {},
|
36
|
+
"outputs": [],
|
37
|
+
"source": [
|
38
|
+
"%cd .."
|
39
|
+
]
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"cell_type": "markdown",
|
43
|
+
"metadata": {},
|
44
|
+
"source": [
|
45
|
+
"### Update the following notebook settings"
|
46
|
+
]
|
47
|
+
},
|
48
|
+
{
|
49
|
+
"cell_type": "code",
|
50
|
+
"execution_count": null,
|
51
|
+
"metadata": {},
|
52
|
+
"outputs": [],
|
53
|
+
"source": [
|
54
|
+
"NEW_VERSION = '0.5.20'\n",
|
55
|
+
"LAST_VERSION = '0.5.19'\n",
|
56
|
+
"GIT_REMOTE_UPSTREAM = 'origin'\n",
|
57
|
+
"STABLE_RELEASE = False\n",
|
58
|
+
"WORK_BRANCH = 'stable' if STABLE_RELEASE else 'master'\n",
|
59
|
+
"# Array of strings, e.g. [\"21cbsc214g3\", \"21casc214g3\"]\n",
|
60
|
+
"CHERRY_PICKS = []\n",
|
61
|
+
"GEMFILE='Gemfile.rails61'"
|
62
|
+
]
|
63
|
+
},
|
64
|
+
{
|
65
|
+
"cell_type": "markdown",
|
66
|
+
"metadata": {},
|
67
|
+
"source": [
|
68
|
+
"### Ensure the repo is up to date"
|
69
|
+
]
|
70
|
+
},
|
71
|
+
{
|
72
|
+
"cell_type": "code",
|
73
|
+
"execution_count": null,
|
74
|
+
"metadata": {},
|
75
|
+
"outputs": [],
|
76
|
+
"source": [
|
77
|
+
"! git checkout {WORK_BRANCH}"
|
78
|
+
]
|
79
|
+
},
|
80
|
+
{
|
81
|
+
"cell_type": "code",
|
82
|
+
"execution_count": null,
|
83
|
+
"metadata": {},
|
84
|
+
"outputs": [],
|
85
|
+
"source": [
|
86
|
+
"! git fetch {GIT_REMOTE_UPSTREAM}"
|
87
|
+
]
|
88
|
+
},
|
89
|
+
{
|
90
|
+
"cell_type": "code",
|
91
|
+
"execution_count": null,
|
92
|
+
"metadata": {},
|
93
|
+
"outputs": [],
|
94
|
+
"source": [
|
95
|
+
"! git rebase {GIT_REMOTE_UPSTREAM}/{WORK_BRANCH}"
|
96
|
+
]
|
97
|
+
},
|
98
|
+
{
|
99
|
+
"cell_type": "markdown",
|
100
|
+
"metadata": {},
|
101
|
+
"source": [
|
102
|
+
"### Cherry picks for stable release"
|
103
|
+
]
|
104
|
+
},
|
105
|
+
{
|
106
|
+
"cell_type": "code",
|
107
|
+
"execution_count": null,
|
108
|
+
"metadata": {},
|
109
|
+
"outputs": [],
|
110
|
+
"source": [
|
111
|
+
"if STABLE_RELEASE:\n",
|
112
|
+
" for cp in CHERRY_PICKS:\n",
|
113
|
+
" ! git cherry-pick -x {cp}"
|
114
|
+
]
|
115
|
+
},
|
116
|
+
{
|
117
|
+
"cell_type": "markdown",
|
118
|
+
"metadata": {},
|
119
|
+
"source": [
|
120
|
+
"### Run tests localy if your setup allows, otherwise ensure the HEAD is green"
|
121
|
+
]
|
122
|
+
},
|
123
|
+
{
|
124
|
+
"cell_type": "code",
|
125
|
+
"execution_count": null,
|
126
|
+
"metadata": {},
|
127
|
+
"outputs": [],
|
128
|
+
"source": [
|
129
|
+
"! BUNDLE_GEMFILE=gemfiles/{GEMFILE} bundle update"
|
130
|
+
]
|
131
|
+
},
|
132
|
+
{
|
133
|
+
"cell_type": "code",
|
134
|
+
"execution_count": null,
|
135
|
+
"metadata": {
|
136
|
+
"scrolled": true
|
137
|
+
},
|
138
|
+
"outputs": [],
|
139
|
+
"source": [
|
140
|
+
"! BUNDLE_GEMFILE=gemfiles/{GEMFILE} bundle exec rspec"
|
141
|
+
]
|
142
|
+
},
|
143
|
+
{
|
144
|
+
"cell_type": "markdown",
|
145
|
+
"metadata": {},
|
146
|
+
"source": [
|
147
|
+
"### Update release related stuff"
|
148
|
+
]
|
149
|
+
},
|
150
|
+
{
|
151
|
+
"cell_type": "code",
|
152
|
+
"execution_count": null,
|
153
|
+
"metadata": {},
|
154
|
+
"outputs": [],
|
155
|
+
"source": [
|
156
|
+
"! sed -i 's/VERSION = .*/VERSION = \"{NEW_VERSION}\"/' lib/apipie/version.rb"
|
157
|
+
]
|
158
|
+
},
|
159
|
+
{
|
160
|
+
"cell_type": "code",
|
161
|
+
"execution_count": null,
|
162
|
+
"metadata": {},
|
163
|
+
"outputs": [],
|
164
|
+
"source": [
|
165
|
+
"# Parse git changelog\n",
|
166
|
+
"from IPython.display import Markdown as md\n",
|
167
|
+
"from subprocess import check_output\n",
|
168
|
+
"from shlex import split\n",
|
169
|
+
"import re\n",
|
170
|
+
"\n",
|
171
|
+
"def format_log_entry(entry):\n",
|
172
|
+
" author = re.search(r'author:(.*)', entry).group(1)\n",
|
173
|
+
" entry = re.sub(r'author:(.*)', '', entry)\n",
|
174
|
+
" entry = re.sub(r'([fF]ixes|[rR]efs)[^-]*-\\s*(.*)', r'\\2', entry)\n",
|
175
|
+
" entry = '* ' + entry.capitalize()\n",
|
176
|
+
" entry = re.sub(r'\\(#([0-9]+)\\)', r'[#\\1](https://github.com/Apipie/apipie-rails/pull/\\1)', entry)\n",
|
177
|
+
" entry = entry + f'({author})'\n",
|
178
|
+
" return entry\n",
|
179
|
+
"\n",
|
180
|
+
"def skip(entry):\n",
|
181
|
+
" if re.match(r'Merge pull', entry) or \\\n",
|
182
|
+
" re.match(r'^i18n', entry) or \\\n",
|
183
|
+
" re.match(r'^Bump to version', entry):\n",
|
184
|
+
" return True\n",
|
185
|
+
" else:\n",
|
186
|
+
" return False \n",
|
187
|
+
"git_log_cmd = 'git log --pretty=format:\"%%s author:%%an\" v%s..HEAD' % LAST_VERSION\n",
|
188
|
+
"log = check_output(split(git_log_cmd)).decode('utf8').split('\\n')\n",
|
189
|
+
"change_log = [format_log_entry(e) for e in log if not skip(e)]\n",
|
190
|
+
"md('\\n'.join(change_log))\n"
|
191
|
+
]
|
192
|
+
},
|
193
|
+
{
|
194
|
+
"cell_type": "code",
|
195
|
+
"execution_count": null,
|
196
|
+
"metadata": {},
|
197
|
+
"outputs": [],
|
198
|
+
"source": [
|
199
|
+
"# Write release notes\n",
|
200
|
+
"from datetime import datetime\n",
|
201
|
+
"import fileinput\n",
|
202
|
+
"import sys\n",
|
203
|
+
"\n",
|
204
|
+
"fh = fileinput.input('CHANGELOG.md', inplace=True) \n",
|
205
|
+
"for line in fh: \n",
|
206
|
+
" print(line.rstrip())\n",
|
207
|
+
" if re.match(r'========', line):\n",
|
208
|
+
" print('## [v%s](https://github.com/Apipie/apipie-rails/tree/v%s) (%s)' % (NEW_VERSION, NEW_VERSION, datetime.today().strftime('%Y-%m-%d')))\n",
|
209
|
+
" print('[Full Changelog](https://github.com/Apipie/apipie-rails/compare/v%s...v%s)' % (LAST_VERSION, NEW_VERSION))\n",
|
210
|
+
" for entry in change_log:\n",
|
211
|
+
" print(entry)\n",
|
212
|
+
" print('')\n",
|
213
|
+
"fh.close() "
|
214
|
+
]
|
215
|
+
},
|
216
|
+
{
|
217
|
+
"cell_type": "markdown",
|
218
|
+
"metadata": {},
|
219
|
+
"source": [
|
220
|
+
"#### Manual step: Update deps in the gemspec if neccessary"
|
221
|
+
]
|
222
|
+
},
|
223
|
+
{
|
224
|
+
"cell_type": "markdown",
|
225
|
+
"metadata": {},
|
226
|
+
"source": [
|
227
|
+
"### Check what is going to be commited"
|
228
|
+
]
|
229
|
+
},
|
230
|
+
{
|
231
|
+
"cell_type": "code",
|
232
|
+
"execution_count": null,
|
233
|
+
"metadata": {
|
234
|
+
"scrolled": false
|
235
|
+
},
|
236
|
+
"outputs": [],
|
237
|
+
"source": [
|
238
|
+
"! git add -u\n",
|
239
|
+
"! git status"
|
240
|
+
]
|
241
|
+
},
|
242
|
+
{
|
243
|
+
"cell_type": "code",
|
244
|
+
"execution_count": null,
|
245
|
+
"metadata": {
|
246
|
+
"scrolled": true
|
247
|
+
},
|
248
|
+
"outputs": [],
|
249
|
+
"source": [
|
250
|
+
"! git diff --cached"
|
251
|
+
]
|
252
|
+
},
|
253
|
+
{
|
254
|
+
"cell_type": "markdown",
|
255
|
+
"metadata": {},
|
256
|
+
"source": [
|
257
|
+
"### Commit changes"
|
258
|
+
]
|
259
|
+
},
|
260
|
+
{
|
261
|
+
"cell_type": "code",
|
262
|
+
"execution_count": null,
|
263
|
+
"metadata": {
|
264
|
+
"scrolled": true
|
265
|
+
},
|
266
|
+
"outputs": [],
|
267
|
+
"source": [
|
268
|
+
"! git commit -m \"Bump to {NEW_VERSION}\""
|
269
|
+
]
|
270
|
+
},
|
271
|
+
{
|
272
|
+
"cell_type": "markdown",
|
273
|
+
"metadata": {},
|
274
|
+
"source": [
|
275
|
+
"### Tag new version"
|
276
|
+
]
|
277
|
+
},
|
278
|
+
{
|
279
|
+
"cell_type": "code",
|
280
|
+
"execution_count": null,
|
281
|
+
"metadata": {},
|
282
|
+
"outputs": [],
|
283
|
+
"source": [
|
284
|
+
"! git tag {NEW_VERSION}"
|
285
|
+
]
|
286
|
+
},
|
287
|
+
{
|
288
|
+
"cell_type": "markdown",
|
289
|
+
"metadata": {},
|
290
|
+
"source": [
|
291
|
+
"### Build the gem"
|
292
|
+
]
|
293
|
+
},
|
294
|
+
{
|
295
|
+
"cell_type": "code",
|
296
|
+
"execution_count": null,
|
297
|
+
"metadata": {},
|
298
|
+
"outputs": [],
|
299
|
+
"source": [
|
300
|
+
"! BUNDLE_GEMFILE=gemfiles/{GEMFILE} bundle exec rake build"
|
301
|
+
]
|
302
|
+
},
|
303
|
+
{
|
304
|
+
"cell_type": "code",
|
305
|
+
"execution_count": null,
|
306
|
+
"metadata": {},
|
307
|
+
"outputs": [],
|
308
|
+
"source": [
|
309
|
+
"! gem push pkg/apipie-rails-{NEW_VERSION}.gem"
|
310
|
+
]
|
311
|
+
},
|
312
|
+
{
|
313
|
+
"cell_type": "markdown",
|
314
|
+
"metadata": {},
|
315
|
+
"source": [
|
316
|
+
"### PUSH the changes upstream If everything is correct"
|
317
|
+
]
|
318
|
+
},
|
319
|
+
{
|
320
|
+
"cell_type": "code",
|
321
|
+
"execution_count": null,
|
322
|
+
"metadata": {},
|
323
|
+
"outputs": [],
|
324
|
+
"source": [
|
325
|
+
"! git push {GIT_REMOTE_UPSTREAM} {WORK_BRANCH}"
|
326
|
+
]
|
327
|
+
},
|
328
|
+
{
|
329
|
+
"cell_type": "code",
|
330
|
+
"execution_count": null,
|
331
|
+
"metadata": {},
|
332
|
+
"outputs": [],
|
333
|
+
"source": [
|
334
|
+
"! git push --tags {GIT_REMOTE_UPSTREAM} {WORK_BRANCH}"
|
335
|
+
]
|
336
|
+
},
|
337
|
+
{
|
338
|
+
"cell_type": "markdown",
|
339
|
+
"metadata": {},
|
340
|
+
"source": [
|
341
|
+
"#### Now the new release is in upstream repo"
|
342
|
+
]
|
343
|
+
},
|
344
|
+
{
|
345
|
+
"cell_type": "markdown",
|
346
|
+
"metadata": {},
|
347
|
+
"source": [
|
348
|
+
"### Some manual steps follow to improve the UX\n",
|
349
|
+
"\n",
|
350
|
+
"#### New relase on GitHub\n",
|
351
|
+
"\n",
|
352
|
+
"Copy the following changelog lines to the description in form on link below\n",
|
353
|
+
"The release title is the new version."
|
354
|
+
]
|
355
|
+
},
|
356
|
+
{
|
357
|
+
"cell_type": "code",
|
358
|
+
"execution_count": null,
|
359
|
+
"metadata": {},
|
360
|
+
"outputs": [],
|
361
|
+
"source": [
|
362
|
+
"print('\\n')\n",
|
363
|
+
"print('\\n'.join(change_log))\n",
|
364
|
+
"print('\\n\\nhttps://github.com/Apipie/apipie-rails/releases/new?tag=%s' % NEW_VERSION)"
|
365
|
+
]
|
366
|
+
},
|
367
|
+
{
|
368
|
+
"cell_type": "markdown",
|
369
|
+
"metadata": {},
|
370
|
+
"source": [
|
371
|
+
"## Congratulations\n",
|
372
|
+
"\n",
|
373
|
+
"Release is public now."
|
374
|
+
]
|
375
|
+
}
|
376
|
+
],
|
377
|
+
"metadata": {
|
378
|
+
"kernelspec": {
|
379
|
+
"display_name": "Python 3",
|
380
|
+
"language": "python",
|
381
|
+
"name": "python3"
|
382
|
+
},
|
383
|
+
"language_info": {
|
384
|
+
"codemirror_mode": {
|
385
|
+
"name": "ipython",
|
386
|
+
"version": 3
|
387
|
+
},
|
388
|
+
"file_extension": ".py",
|
389
|
+
"mimetype": "text/x-python",
|
390
|
+
"name": "python",
|
391
|
+
"nbconvert_exporter": "python",
|
392
|
+
"pygments_lexer": "ipython3",
|
393
|
+
"version": "3.6.8"
|
394
|
+
}
|
395
|
+
},
|
396
|
+
"nbformat": 4,
|
397
|
+
"nbformat_minor": 2
|
398
|
+
}
|
@@ -47,6 +47,31 @@ describe Apipie::ApipiesController do
|
|
47
47
|
|
48
48
|
assert_response :not_found
|
49
49
|
end
|
50
|
+
|
51
|
+
it "succeeds on method details with a supported language" do
|
52
|
+
allow(Apipie.configuration).to receive(:languages).and_return(%w[en es])
|
53
|
+
|
54
|
+
get :index, :params => { :version => "2.0", :resource => "architectures", :method => "index.es" }
|
55
|
+
|
56
|
+
assert_response :success
|
57
|
+
end
|
58
|
+
|
59
|
+
it "succeeds on method details with the default language" do
|
60
|
+
allow(Apipie.configuration).to receive(:default_locale).and_return("en")
|
61
|
+
allow(Apipie.configuration).to receive(:languages).and_return([])
|
62
|
+
|
63
|
+
get :index, :params => { :version => "2.0", :resource => "architectures", :method => "index.en" }
|
64
|
+
|
65
|
+
assert_response :success
|
66
|
+
end
|
67
|
+
|
68
|
+
it "returns not_found on a method with an unsupported language" do
|
69
|
+
allow(Apipie.configuration).to receive(:languages).and_return(%w[en es])
|
70
|
+
|
71
|
+
get :index, :params => { :version => "2.0", :resource => "architectures", :method => "index.jp" }
|
72
|
+
|
73
|
+
assert_response :not_found
|
74
|
+
end
|
50
75
|
end
|
51
76
|
|
52
77
|
describe "reload_controllers" do
|
@@ -1,10 +1,7 @@
|
|
1
1
|
require File.expand_path('../boot', __FILE__)
|
2
2
|
|
3
|
-
require "active_model/railtie"
|
4
|
-
require "active_record/railtie"
|
5
3
|
require "action_controller/railtie"
|
6
4
|
require "action_view/railtie"
|
7
|
-
require "action_mailer/railtie"
|
8
5
|
|
9
6
|
Bundler.require
|
10
7
|
require "apipie-rails"
|
@@ -13,9 +13,6 @@ Dummy::Application.configure do
|
|
13
13
|
config.consider_all_requests_local = true
|
14
14
|
config.action_controller.perform_caching = false
|
15
15
|
|
16
|
-
# Don't care if the mailer can't send
|
17
|
-
config.action_mailer.raise_delivery_errors = false
|
18
|
-
|
19
16
|
# Print deprecation notices to the Rails logger
|
20
17
|
config.active_support.deprecation = :log
|
21
18
|
|
@@ -34,9 +34,6 @@ Dummy::Application.configure do
|
|
34
34
|
# Enable serving of images, stylesheets, and javascripts from an asset server
|
35
35
|
# config.action_controller.asset_host = "http://assets.example.com"
|
36
36
|
|
37
|
-
# Disable delivery errors, bad email addresses will be ignored
|
38
|
-
# config.action_mailer.raise_delivery_errors = false
|
39
|
-
|
40
37
|
# Enable threaded mode
|
41
38
|
# config.threadsafe!
|
42
39
|
|
@@ -20,11 +20,6 @@ Dummy::Application.configure do
|
|
20
20
|
# Disable request forgery protection in test environment
|
21
21
|
config.action_controller.allow_forgery_protection = false
|
22
22
|
|
23
|
-
# Tell Action Mailer not to deliver emails to the real world.
|
24
|
-
# The :test delivery method accumulates sent emails in the
|
25
|
-
# ActionMailer::Base.deliveries array.
|
26
|
-
config.action_mailer.delivery_method = :test
|
27
|
-
|
28
23
|
# Use SQL instead of Active Record's schema dumper when creating the test database.
|
29
24
|
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
30
25
|
# like if you have constraints or database-specific column types
|
@@ -10,78 +10,78 @@ RSpec.describe PetsController, :type => :controller do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it "does not raise error when rendered output matches the described response" do
|
13
|
-
response = get :return_and_validate_expected_response,
|
13
|
+
response = get :return_and_validate_expected_response, format: :json
|
14
14
|
expect(response).to match_declared_responses
|
15
15
|
end
|
16
16
|
|
17
17
|
it "does not raise error when rendered output (array) matches the described response" do
|
18
|
-
response = get :return_and_validate_expected_array_response,
|
18
|
+
response = get :return_and_validate_expected_array_response, format: :json
|
19
19
|
expect(response).to match_declared_responses
|
20
20
|
end
|
21
21
|
|
22
22
|
it "does not raises error when rendered output includes null in the response" do
|
23
|
-
response = get :return_and_validate_expected_response_with_null,
|
23
|
+
response = get :return_and_validate_expected_response_with_null, format: :json
|
24
24
|
expect(response).to match_declared_responses
|
25
25
|
end
|
26
26
|
|
27
27
|
it "does not raise error when rendered output includes null (instead of an object) in the response" do
|
28
|
-
response = get :return_and_validate_expected_response_with_null_object,
|
28
|
+
response = get :return_and_validate_expected_response_with_null_object, format: :json
|
29
29
|
expect(response).to match_declared_responses
|
30
30
|
end
|
31
31
|
|
32
32
|
it "raises error when a response field has the wrong type" do
|
33
|
-
response = get :return_and_validate_type_mismatch,
|
33
|
+
response = get :return_and_validate_type_mismatch, format: :json
|
34
34
|
expect(response).not_to match_declared_responses
|
35
35
|
end
|
36
36
|
|
37
37
|
it "raises error when a response has a missing field" do
|
38
|
-
response = get :return_and_validate_missing_field,
|
38
|
+
response = get :return_and_validate_missing_field, format: :json
|
39
39
|
expect(response).not_to match_declared_responses
|
40
40
|
end
|
41
41
|
|
42
42
|
it "raises error when a response has an extra property and 'swagger_allow_additional_properties_in_response' is false" do
|
43
|
-
response = get :return_and_validate_extra_property,
|
43
|
+
response = get :return_and_validate_extra_property, format: :json
|
44
44
|
expect(response).not_to match_declared_responses
|
45
45
|
end
|
46
46
|
|
47
47
|
it "raises error when a response has is array instead of object" do
|
48
48
|
# note: this action returns HTTP 201, not HTTP 200!
|
49
|
-
response = get :return_and_validate_unexpected_array_response,
|
49
|
+
response = get :return_and_validate_unexpected_array_response, format: :json
|
50
50
|
expect(response).not_to match_declared_responses
|
51
51
|
end
|
52
52
|
|
53
53
|
it "does not raise error when a response has an extra property and 'swagger_allow_additional_properties_in_response' is true" do
|
54
54
|
Apipie.configuration.swagger_allow_additional_properties_in_response = true
|
55
|
-
response = get :return_and_validate_extra_property,
|
55
|
+
response = get :return_and_validate_extra_property, format: :json
|
56
56
|
expect(response).to match_declared_responses
|
57
57
|
end
|
58
58
|
|
59
59
|
it "does not raise error when a response has an extra field and 'additional_properties' is specified in the response" do
|
60
60
|
Apipie.configuration.swagger_allow_additional_properties_in_response = false
|
61
|
-
response = get :return_and_validate_allowed_extra_property,
|
61
|
+
response = get :return_and_validate_allowed_extra_property, format: :json
|
62
62
|
expect(response).to match_declared_responses
|
63
63
|
end
|
64
64
|
|
65
65
|
it "raises error when a response sub-object has an extra field and 'additional_properties' is not specified on it, but specified on the top level of the response" do
|
66
66
|
Apipie.configuration.swagger_allow_additional_properties_in_response = false
|
67
|
-
response = get :sub_object_invalid_extra_property,
|
67
|
+
response = get :sub_object_invalid_extra_property, format: :json
|
68
68
|
expect(response).not_to match_declared_responses
|
69
69
|
end
|
70
70
|
|
71
|
-
it "does not
|
71
|
+
it "does not raise error when a response sub-object has an extra field and 'additional_properties' is specified on it" do
|
72
72
|
Apipie.configuration.swagger_allow_additional_properties_in_response = false
|
73
|
-
response = get :sub_object_allowed_extra_property,
|
73
|
+
response = get :sub_object_allowed_extra_property, format: :json
|
74
74
|
expect(response).to match_declared_responses
|
75
75
|
end
|
76
76
|
|
77
77
|
describe "auto validation" do
|
78
78
|
auto_validate_rendered_views
|
79
79
|
it "raises exception when a response field has the wrong type and auto validation is turned on" do
|
80
|
-
expect { get :return_and_validate_type_mismatch,
|
80
|
+
expect { get :return_and_validate_type_mismatch, format: :json }.to raise_error(Apipie::ResponseDoesNotMatchSwaggerSchema)
|
81
81
|
end
|
82
82
|
|
83
83
|
it "does not raise an exception when calling an undocumented method" do
|
84
|
-
expect { get :undocumented_method,
|
84
|
+
expect { get :undocumented_method, format: :json }.not_to raise_error
|
85
85
|
end
|
86
86
|
|
87
87
|
end
|
@@ -89,12 +89,12 @@ RSpec.describe PetsController, :type => :controller do
|
|
89
89
|
|
90
90
|
describe "with array field" do
|
91
91
|
it "no error for valid response" do
|
92
|
-
response = get :returns_response_with_valid_array,
|
92
|
+
response = get :returns_response_with_valid_array, format: :json
|
93
93
|
expect(response).to match_declared_responses
|
94
94
|
end
|
95
95
|
|
96
96
|
it "error if type of element in the array is wrong" do
|
97
|
-
response = get :returns_response_with_invalid_array,
|
97
|
+
response = get :returns_response_with_invalid_array, format: :json
|
98
98
|
expect(response).not_to match_declared_responses
|
99
99
|
end
|
100
100
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -13,7 +13,13 @@ require 'test_engine'
|
|
13
13
|
module Rails4Compatibility
|
14
14
|
module Testing
|
15
15
|
def process(*args)
|
16
|
-
compatible_request(*args)
|
16
|
+
compatible_request(*args) do |*new_args|
|
17
|
+
if Gem.ruby_version < Gem::Version.new('3.0.0')
|
18
|
+
super(*new_args)
|
19
|
+
else
|
20
|
+
super(new_args[0], **new_args[1])
|
21
|
+
end
|
22
|
+
end
|
17
23
|
end
|
18
24
|
|
19
25
|
def compatible_request(method, action, hash = {})
|
@@ -0,0 +1,15 @@
|
|
1
|
+
if RUBY_VERSION >= '2.6.0'
|
2
|
+
if Rails.version < '5'
|
3
|
+
# rubocop:disable Style/CommentAnnotation
|
4
|
+
class ActionController::TestResponse < ActionDispatch::TestResponse
|
5
|
+
def recycle!
|
6
|
+
# hack to avoid MonitorMixin double-initialize error:
|
7
|
+
@mon_mutex_owner_object_id = nil
|
8
|
+
@mon_mutex = nil
|
9
|
+
initialize
|
10
|
+
end
|
11
|
+
end
|
12
|
+
# rubocop:enable Style/CommentAnnotation
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|