power_api 2.0.0 → 2.1.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.
@@ -1,470 +0,0 @@
1
- describe PowerApi::GeneratorHelper::SwaggerHelper, type: :generator do
2
- describe "#swagger_helper_path" do
3
- let(:expected_path) { "spec/swagger_helper.rb" }
4
-
5
- def perform
6
- generators_helper.swagger_helper_path
7
- end
8
-
9
- it { expect(perform).to eq(expected_path) }
10
- end
11
-
12
- describe "#spec_swagger_path" do
13
- let(:expected_path) { "spec/swagger/.gitkeep" }
14
-
15
- def perform
16
- generators_helper.spec_swagger_path
17
- end
18
-
19
- it { expect(perform).to eq(expected_path) }
20
- end
21
-
22
- describe "#spec_integration_path" do
23
- let(:expected_path) { "spec/integration/.gitkeep" }
24
-
25
- def perform
26
- generators_helper.spec_integration_path
27
- end
28
-
29
- it { expect(perform).to eq(expected_path) }
30
- end
31
-
32
- describe "#rswag_ui_initializer_path" do
33
- let(:expected_path) { "config/initializers/rswag-ui.rb" }
34
-
35
- def perform
36
- generators_helper.rswag_ui_initializer_path
37
- end
38
-
39
- it { expect(perform).to eq(expected_path) }
40
- end
41
-
42
- describe "#swagger_resource_schema_path" do
43
- let(:expected_path) { "spec/swagger/v1/schemas/blog_schema.rb" }
44
-
45
- def perform
46
- generators_helper.swagger_resource_schema_path
47
- end
48
-
49
- it { expect(perform).to eq(expected_path) }
50
- end
51
-
52
- describe "#swagger_version_definition_path" do
53
- let(:expected_path) { "spec/swagger/v1/definition.rb" }
54
-
55
- def perform
56
- generators_helper.swagger_version_definition_path
57
- end
58
-
59
- it { expect(perform).to eq(expected_path) }
60
- end
61
-
62
- describe "#swagger_resource_spec_path" do
63
- let(:expected_path) { "spec/integration/api/v1/blogs_spec.rb" }
64
-
65
- def perform
66
- generators_helper.swagger_resource_spec_path
67
- end
68
-
69
- it { expect(perform).to eq(expected_path) }
70
- end
71
-
72
- describe "#rswag_ui_configure_line" do
73
- let(:expected_path) do
74
- "Rswag::Ui.configure do |c|\n"
75
- end
76
-
77
- def perform
78
- generators_helper.rswag_ui_configure_line
79
- end
80
-
81
- it { expect(perform).to eq(expected_path) }
82
- end
83
-
84
- describe "#swagger_helper_api_definition_line" do
85
- let(:expected_line) do
86
- "config.swagger_docs = {\n"
87
- end
88
-
89
- def perform
90
- generators_helper.swagger_helper_api_definition_line
91
- end
92
-
93
- it { expect(perform).to eq(expected_line) }
94
- end
95
-
96
- describe "#swagger_definition_line_to_inject_schema" do
97
- let(:expected_line) { /definitions: {/ }
98
-
99
- def perform
100
- generators_helper.swagger_definition_line_to_inject_schema
101
- end
102
-
103
- it { expect(perform).to eq(expected_line) }
104
- end
105
-
106
- describe "#swagger_helper_api_definition" do
107
- let(:expected_tpl) do
108
- <<-VERSION
109
- 'v1/swagger.json' => API_V1
110
- VERSION
111
- end
112
-
113
- def perform
114
- generators_helper.swagger_helper_api_definition
115
- end
116
-
117
- it { expect(perform).to eq(expected_tpl) }
118
-
119
- context "with another version" do
120
- let(:version_number) { "2" }
121
-
122
- let(:expected_tpl) do
123
- <<-VERSION
124
- 'v2/swagger.json' => API_V2,
125
- VERSION
126
- end
127
-
128
- it { expect(perform).to eq(expected_tpl) }
129
- end
130
- end
131
-
132
- describe "#rswag_ui_initializer_tpl" do
133
- let(:expected_tpl) do
134
- <<~INITIALIZER
135
- Rswag::Ui.configure do |c|
136
- end
137
- INITIALIZER
138
- end
139
-
140
- def perform
141
- generators_helper.rswag_ui_initializer_tpl
142
- end
143
-
144
- it { expect(perform).to eq(expected_tpl) }
145
- end
146
-
147
- describe "#swagger_definition_tpl" do
148
- let(:expected_tpl) do
149
- <<~DEFINITION
150
- API_V1 = {
151
- swagger: '2.0',
152
- info: {
153
- title: 'API V1',
154
- version: 'v1'
155
- },
156
- basePath: '/api/v1',
157
- definitions: {
158
- }
159
- }
160
- DEFINITION
161
- end
162
-
163
- def perform
164
- generators_helper.swagger_definition_tpl
165
- end
166
-
167
- it { expect(perform).to eq(expected_tpl) }
168
- end
169
-
170
- describe "swagger_helper_tpl" do
171
- let(:template) do
172
- <<~SWAGGER
173
- require 'rails_helper'
174
-
175
- Dir[::Rails.root.join("spec/swagger/**/schemas/*.rb")].each { |f| require f }
176
- Dir[::Rails.root.join("spec/swagger/**/definition.rb")].each { |f| require f }
177
-
178
- RSpec.configure do |config|
179
- # Specify a root folder where Swagger JSON files are generated
180
- # NOTE: If you're using the rswag-api to serve API descriptions, you'll need
181
- # to ensure that it's confiugred to serve Swagger from the same folder
182
- config.swagger_root = Rails.root.to_s + '/swagger'
183
-
184
- # Define one or more Swagger documents and provide global metadata for each one
185
- # When you run the 'rswag:specs:to_swagger' rake task, the complete Swagger will
186
- # be generated at the provided relative path under swagger_root
187
- # By default, the operations defined in spec files are added to the first
188
- # document below. You can override this behavior by adding a swagger_doc tag to the
189
- # the root example_group in your specs, e.g. describe '...', swagger_doc: 'v2/swagger.json'
190
- config.swagger_docs = {
191
- }
192
- end
193
- SWAGGER
194
- end
195
-
196
- def perform
197
- generators_helper.swagger_helper_tpl
198
- end
199
-
200
- it { expect(perform).to eq(template) }
201
- end
202
-
203
- describe "#swagger_schema_tpl" do
204
- let(:template) do
205
- <<~SCHEMA
206
- BLOG_SCHEMA = {
207
- type: :object,
208
- properties: {
209
- id: { type: :integer, example: 666 },
210
- title: { type: :string, example: 'Some title' },
211
- body: { type: :string, example: 'Some body' },
212
- created_at: { type: :string, example: '1984-06-04 09:00', 'x-nullable': true },
213
- updated_at: { type: :string, example: '1984-06-04 09:00', 'x-nullable': true },
214
- portfolio_id: { type: :integer, example: 666, 'x-nullable': true }
215
- },
216
- required: [
217
- :id,
218
- :title,
219
- :body
220
- ]
221
- }
222
-
223
- BLOGS_COLLECTION_SCHEMA = {
224
- type: "object",
225
- properties: {
226
- blogs: {
227
- type: "array",
228
- items: { "$ref" => "#/definitions/blog" }
229
- }
230
- },
231
- required: [
232
- :blogs
233
- ]
234
- }
235
-
236
- BLOG_RESOURCE_SCHEMA = {
237
- type: "object",
238
- properties: {
239
- blog: { "$ref" => "#/definitions/blog" }
240
- },
241
- required: [
242
- :blog
243
- ]
244
- }
245
- SCHEMA
246
- end
247
-
248
- def perform
249
- generators_helper.swagger_schema_tpl
250
- end
251
-
252
- it { expect(perform).to eq(template) }
253
- end
254
-
255
- describe "#swagger_resource_spec_tpl" do
256
- let(:template) do
257
- <<~SPEC
258
- require 'swagger_helper'
259
-
260
- describe 'API V1 Blogs', swagger_doc: 'v1/swagger.json' do
261
- path '/blogs' do
262
- get 'Retrieves Blogs' do
263
- description 'Retrieves all the blogs'
264
- produces 'application/json'
265
-
266
- let(:collection_count) { 5 }
267
- let(:expected_collection_count) { collection_count }
268
-
269
- before { create_list(:blog, collection_count) }
270
- response '200', 'Blogs retrieved' do
271
- schema('$ref' => '#/definitions/blogs_collection')
272
-
273
- run_test! do |response|
274
- expect(JSON.parse(response.body)['blogs'].count).to eq(expected_collection_count)
275
- end
276
- end
277
-
278
- end
279
-
280
- post 'Creates Blog' do
281
- description 'Creates Blog'
282
- consumes 'application/json'
283
- produces 'application/json'
284
- parameter(name: :blog, in: :body)
285
-
286
- response '201', 'blog created' do
287
- let(:blog) do
288
- {
289
- title: 'Some title',
290
- body: 'Some body'}
291
- end
292
-
293
- run_test!
294
- end
295
-
296
- response '400', 'invalid attributes' do
297
- let(:blog) do
298
- {
299
- title: nil}
300
- end
301
-
302
- run_test!
303
- end
304
-
305
- end
306
-
307
- end
308
-
309
- path '/blogs/{id}' do
310
- parameter name: :id, in: :path, type: :integer
311
-
312
- let(:existent_blog) { create(:blog) }
313
- let(:id) { existent_blog.id }
314
-
315
- get 'Retrieves Blog' do
316
- produces 'application/json'
317
-
318
- response '200', 'blog retrieved' do
319
- schema('$ref' => '#/definitions/blog_resource')
320
-
321
- run_test!
322
- end
323
-
324
- response '404', 'invalid blog id' do
325
- let(:id) { 'invalid' }
326
- run_test!
327
- end
328
-
329
- end
330
-
331
- put 'Updates Blog' do
332
- description 'Updates Blog'
333
- consumes 'application/json'
334
- produces 'application/json'
335
- parameter(name: :blog, in: :body)
336
-
337
- response '200', 'blog updated' do
338
- let(:blog) do
339
- {
340
- title: 'Some title',
341
- body: 'Some body'}
342
- end
343
-
344
- run_test!
345
- end
346
-
347
- response '400', 'invalid attributes' do
348
- let(:blog) do
349
- {
350
- title: nil}
351
- end
352
-
353
- run_test!
354
- end
355
-
356
- end
357
-
358
- delete 'Deletes Blog' do
359
- produces 'application/json'
360
- description 'Deletes specific blog'
361
-
362
- response '204', 'blog deleted' do
363
- run_test!
364
- end
365
-
366
- response '404', 'blog not found' do
367
- let(:id) { 'invalid' }
368
-
369
- run_test!
370
- end
371
-
372
- end
373
-
374
- end
375
-
376
- end
377
- SPEC
378
- end
379
-
380
- def perform
381
- generators_helper.swagger_resource_spec_tpl
382
- end
383
-
384
- it { expect(perform).to eq(template) }
385
-
386
- context "with authenticated_resource option" do
387
- let(:authenticated_resource) { "user" }
388
-
389
- it { expect(perform).to include("let(:user) { create(:user) }") }
390
- it { expect(perform).to include("let(:user_email) { user.email }") }
391
- it { expect(perform).to include("let(:user_token) { user.authentication_token }") }
392
- it { expect(perform).to include("parameter name: :user_email, in: :query, type: :string") }
393
- it { expect(perform).to include("parameter name: :user_token, in: :query, type: :string") }
394
- it { expect(perform).to include("response '401', 'user unauthorized' do") }
395
- end
396
-
397
- context "with owned_by_authenticated_resource option" do
398
- let(:authenticated_resource) { "user" }
399
- let(:owned_by_authenticated_resource) { true }
400
-
401
- it { expect(perform).to include("create_list(:blog, collection_count, user: user)") }
402
- it { expect(perform).to include("(:existent_blog) { create(:blog, user: user) }") }
403
- end
404
-
405
- context "with parent_resource option" do
406
- let(:parent_resource_name) { "portfolio" }
407
-
408
- it { expect(perform).to include("/portfolios/{portfolio_id}/blogs") }
409
- it { expect(perform).to include("parameter name: :portfolio_id, in: :path, type: :integer") }
410
- it { expect(perform).to include("reate_list(:blog, collection_count, portfolio: portfolio)") }
411
- it { expect(perform).to include("let(:portfolio) { create(:portfolio) }") }
412
- it { expect(perform).to include("(:existent_blog) { create(:blog, portfolio: portfolio) }") }
413
- end
414
-
415
- context 'with only some resource actions (show and update)' do
416
- let(:controller_actions) do
417
- [
418
- "show",
419
- "update"
420
- ]
421
- end
422
-
423
- it { expect(perform).to include("path '/blogs/{id}' do\n") }
424
- it { expect(perform).to include("get 'Retrieves Blog' do\n") }
425
- it { expect(perform).to include("put 'Updates Blog' do\n") }
426
- it { expect(perform).not_to include("delete 'Deletes Blog' do\n") }
427
- it { expect(perform).not_to include("path '/blogs' do\n") }
428
- it { expect(perform).not_to include("get 'Retrieves Blogs' do\n") }
429
- it { expect(perform).not_to include("post 'Creates Blog' do\n") }
430
- end
431
-
432
- context 'with only some collection actions (index)' do
433
- let(:controller_actions) { ["index"] }
434
-
435
- it { expect(perform).not_to include("path '/blogs/{id}' do\n") }
436
- it { expect(perform).not_to include("get 'Retrieves Blog' do\n") }
437
- it { expect(perform).not_to include("put 'Updates Blog' do\n") }
438
- it { expect(perform).not_to include("delete 'Deletes Blog' do\n") }
439
- it { expect(perform).to include("path '/blogs' do\n") }
440
- it { expect(perform).to include("get 'Retrieves Blogs' do\n") }
441
- it { expect(perform).not_to include("post 'Creates Blog' do\n") }
442
- end
443
- end
444
-
445
- describe "#rswag_ui_swagger_endpoint" do
446
- let(:expected_entry) do
447
- " c.swagger_endpoint '/api-docs/v1/swagger.json', 'API V1 Docs'\n"
448
- end
449
-
450
- def perform
451
- generators_helper.rswag_ui_swagger_endpoint
452
- end
453
-
454
- it { expect(perform).to eq(expected_entry) }
455
- end
456
-
457
- describe "#swagger_definition_entry" do
458
- let(:expected_entry) do
459
- "\n blog: BLOG_SCHEMA,\
460
- \n blogs_collection: BLOGS_COLLECTION_SCHEMA,\
461
- \n blog_resource: BLOG_RESOURCE_SCHEMA,"
462
- end
463
-
464
- def perform
465
- generators_helper.swagger_definition_entry
466
- end
467
-
468
- it { expect(perform).to eq(expected_entry) }
469
- end
470
- end