hanami 2.0.0.beta2 → 2.0.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -1
  3. data/lib/hanami/configuration/null_configuration.rb +2 -2
  4. data/lib/hanami/configuration.rb +17 -17
  5. data/lib/hanami/routes.rb +48 -21
  6. data/lib/hanami/version.rb +1 -1
  7. data/spec/{new_integration → integration}/action/cookies_spec.rb +0 -0
  8. data/spec/{new_integration → integration}/action/csrf_protection_spec.rb +0 -0
  9. data/spec/{new_integration → integration}/action/routes_spec.rb +3 -5
  10. data/spec/{new_integration → integration}/action/sessions_spec.rb +0 -0
  11. data/spec/{new_integration → integration}/action/slice_configuration_spec.rb +0 -0
  12. data/spec/{new_integration → integration}/action/view_integration_spec.rb +0 -0
  13. data/spec/{new_integration → integration}/action/view_rendering/automatic_rendering_spec.rb +0 -0
  14. data/spec/{new_integration → integration}/action/view_rendering/paired_view_inference_spec.rb +0 -0
  15. data/spec/{new_integration → integration}/action/view_rendering_spec.rb +0 -0
  16. data/spec/{new_integration → integration}/code_loading/loading_from_app_spec.rb +0 -0
  17. data/spec/{new_integration → integration}/code_loading/loading_from_lib_spec.rb +0 -0
  18. data/spec/{new_integration → integration}/code_loading/loading_from_slice_spec.rb +0 -0
  19. data/spec/{new_integration → integration}/container/application_routes_helper_spec.rb +1 -3
  20. data/spec/{new_integration → integration}/container/auto_injection_spec.rb +0 -0
  21. data/spec/{new_integration → integration}/container/auto_registration_spec.rb +0 -0
  22. data/spec/{new_integration → integration}/container/autoloader_spec.rb +0 -0
  23. data/spec/{new_integration → integration}/container/imports_spec.rb +0 -0
  24. data/spec/{new_integration → integration}/container/prepare_container_spec.rb +0 -0
  25. data/spec/{new_integration → integration}/container/shutdown_spec.rb +0 -0
  26. data/spec/{new_integration → integration}/container/standard_bootable_components_spec.rb +0 -0
  27. data/spec/{new_integration → integration}/dotenv_loading_spec.rb +0 -0
  28. data/spec/{new_integration → integration}/rack_app/middleware_spec.rb +9 -15
  29. data/spec/{new_integration → integration}/rack_app/non_booted_rack_app_spec.rb +3 -5
  30. data/spec/{new_integration → integration}/rack_app/rack_app_spec.rb +28 -48
  31. data/spec/{new_integration → integration}/settings/access_to_constants_spec.rb +0 -0
  32. data/spec/{new_integration → integration}/settings/loading_from_env_spec.rb +0 -0
  33. data/spec/{new_integration → integration}/settings/settings_component_loading_spec.rb +0 -0
  34. data/spec/{new_integration → integration}/settings/using_types_spec.rb +0 -0
  35. data/spec/{new_integration → integration}/setup_spec.rb +20 -0
  36. data/spec/{new_integration → integration}/slices/external_slice_spec.rb +2 -4
  37. data/spec/{new_integration → integration}/slices/slice_configuration_spec.rb +0 -0
  38. data/spec/{new_integration → integration}/slices/slice_loading_spec.rb +0 -0
  39. data/spec/{new_integration → integration}/slices/slice_routing_spec.rb +5 -13
  40. data/spec/{new_integration → integration}/slices/slice_settings_spec.rb +0 -0
  41. data/spec/{new_integration → integration}/slices_spec.rb +0 -0
  42. data/spec/{new_integration → integration}/view/context/assets_spec.rb +0 -0
  43. data/spec/{new_integration → integration}/view/context/inflector_spec.rb +0 -0
  44. data/spec/{new_integration → integration}/view/context/request_spec.rb +0 -0
  45. data/spec/{new_integration → integration}/view/context/routes_spec.rb +1 -3
  46. data/spec/{new_integration → integration}/view/context/settings_spec.rb +0 -0
  47. data/spec/{new_integration → integration}/view/inflector_spec.rb +0 -0
  48. data/spec/{new_integration → integration}/view/part_namespace_spec.rb +0 -0
  49. data/spec/{new_integration → integration}/view/path_spec.rb +0 -0
  50. data/spec/{new_integration → integration}/view/slice_configuration_spec.rb +0 -0
  51. data/spec/{new_integration → integration}/view/template_spec.rb +0 -0
  52. data/spec/{new_integration → integration}/view/views_spec.rb +0 -0
  53. data/spec/unit/hanami/configuration/actions_spec.rb +4 -15
  54. data/spec/unit/hanami/configuration/router_spec.rb +45 -0
  55. data/spec/unit/hanami/configuration/views_spec.rb +4 -15
  56. data/spec/unit/hanami/version_spec.rb +1 -1
  57. metadata +97 -244
  58. data/lib/hanami/server.rb +0 -29
  59. data/spec/integration/application_middleware_stack_spec.rb +0 -84
  60. data/spec/integration/assets/cdn_spec.rb +0 -48
  61. data/spec/integration/assets/fingerprint_spec.rb +0 -42
  62. data/spec/integration/assets/helpers_spec.rb +0 -50
  63. data/spec/integration/assets/serve_spec.rb +0 -70
  64. data/spec/integration/assets/subresource_integrity_spec.rb +0 -54
  65. data/spec/integration/body_parsers_spec.rb +0 -50
  66. data/spec/integration/cli/assets/precompile_spec.rb +0 -147
  67. data/spec/integration/cli/assets_spec.rb +0 -14
  68. data/spec/integration/cli/console_spec.rb +0 -105
  69. data/spec/integration/cli/db/apply_spec.rb +0 -74
  70. data/spec/integration/cli/db/console_spec.rb +0 -40
  71. data/spec/integration/cli/db/create_spec.rb +0 -50
  72. data/spec/integration/cli/db/drop_spec.rb +0 -54
  73. data/spec/integration/cli/db/migrate_spec.rb +0 -108
  74. data/spec/integration/cli/db/prepare_spec.rb +0 -36
  75. data/spec/integration/cli/db/rollback_spec.rb +0 -96
  76. data/spec/integration/cli/db/version_spec.rb +0 -38
  77. data/spec/integration/cli/db_spec.rb +0 -21
  78. data/spec/integration/cli/destroy/action_spec.rb +0 -143
  79. data/spec/integration/cli/destroy/app_spec.rb +0 -118
  80. data/spec/integration/cli/destroy/mailer_spec.rb +0 -74
  81. data/spec/integration/cli/destroy/migration_spec.rb +0 -70
  82. data/spec/integration/cli/destroy/model_spec.rb +0 -113
  83. data/spec/integration/cli/destroy_spec.rb +0 -18
  84. data/spec/integration/cli/generate/action_spec.rb +0 -469
  85. data/spec/integration/cli/generate/app_spec.rb +0 -215
  86. data/spec/integration/cli/generate/mailer_spec.rb +0 -189
  87. data/spec/integration/cli/generate/migration_spec.rb +0 -72
  88. data/spec/integration/cli/generate/model_spec.rb +0 -290
  89. data/spec/integration/cli/generate/secret_spec.rb +0 -56
  90. data/spec/integration/cli/generate_spec.rb +0 -19
  91. data/spec/integration/cli/new/database_spec.rb +0 -235
  92. data/spec/integration/cli/new/hanami_head_spec.rb +0 -27
  93. data/spec/integration/cli/new/template_spec.rb +0 -118
  94. data/spec/integration/cli/new/test_spec.rb +0 -274
  95. data/spec/integration/cli/new_spec.rb +0 -970
  96. data/spec/integration/cli/plugins_spec.rb +0 -39
  97. data/spec/integration/cli/routes_spec.rb +0 -49
  98. data/spec/integration/cli/server_spec.rb +0 -626
  99. data/spec/integration/cli/version_spec.rb +0 -85
  100. data/spec/integration/early_hints_spec.rb +0 -35
  101. data/spec/integration/handle_exceptions_spec.rb +0 -244
  102. data/spec/integration/head_spec.rb +0 -89
  103. data/spec/integration/http_headers_spec.rb +0 -29
  104. data/spec/integration/mailer_spec.rb +0 -32
  105. data/spec/integration/middleware_spec.rb +0 -81
  106. data/spec/integration/mount_applications_spec.rb +0 -88
  107. data/spec/integration/project_initializers_spec.rb +0 -40
  108. data/spec/integration/rackup_spec.rb +0 -35
  109. data/spec/integration/rake/with_minitest_spec.rb +0 -67
  110. data/spec/integration/rake/with_rspec_spec.rb +0 -69
  111. data/spec/integration/routing_helpers_spec.rb +0 -61
  112. data/spec/integration/security/content_security_policy_spec.rb +0 -46
  113. data/spec/integration/security/csrf_protection_spec.rb +0 -42
  114. data/spec/integration/security/force_ssl_spec.rb +0 -29
  115. data/spec/integration/security/x_content_type_options_spec.rb +0 -46
  116. data/spec/integration/security/x_frame_options_spec.rb +0 -46
  117. data/spec/integration/security/x_xss_protection_spec.rb +0 -46
  118. data/spec/integration/send_file_spec.rb +0 -51
  119. data/spec/integration/sessions_spec.rb +0 -247
  120. data/spec/integration/static_middleware_spec.rb +0 -21
  121. data/spec/integration/streaming_spec.rb +0 -41
  122. data/spec/integration/unsafe_send_file_spec.rb +0 -52
  123. data/spec/support/fixtures/hanami-plugin/Gemfile +0 -8
  124. data/spec/support/fixtures/hanami-plugin/README.md +0 -35
  125. data/spec/support/fixtures/hanami-plugin/Rakefile +0 -4
  126. data/spec/support/fixtures/hanami-plugin/bin/console +0 -15
  127. data/spec/support/fixtures/hanami-plugin/bin/setup +0 -8
  128. data/spec/support/fixtures/hanami-plugin/hanami-plugin.gemspec +0 -28
  129. data/spec/support/fixtures/hanami-plugin/lib/hanami/plugin/cli.rb +0 -19
  130. data/spec/support/fixtures/hanami-plugin/lib/hanami/plugin/version.rb +0 -7
  131. data/spec/support/fixtures/hanami-plugin/lib/hanami/plugin.rb +0 -8
  132. data/spec/unit/hanami/routes_spec.rb +0 -25
@@ -1,469 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe "hanami generate", type: :integration do
4
- describe "action" do
5
- it "generates action" do
6
- with_project("bookshelf_generate_action") do
7
- output = [
8
- "create spec/web/controllers/authors/index_spec.rb",
9
- "create apps/web/controllers/authors/index.rb",
10
- "create apps/web/views/authors/index.rb",
11
- "create apps/web/templates/authors/index.html.erb",
12
- "create spec/web/views/authors/index_spec.rb",
13
- "insert apps/web/config/routes.rb"
14
- ]
15
-
16
- run_cmd "hanami generate action web authors#index", output
17
-
18
- #
19
- # apps/web/controllers/authors/index.rb
20
- #
21
- expect("apps/web/controllers/authors/index.rb").to have_file_content <<~END
22
- module Web
23
- module Controllers
24
- module Authors
25
- class Index
26
- include Web::Action
27
-
28
- def call(params)
29
- end
30
- end
31
- end
32
- end
33
- end
34
- END
35
-
36
- #
37
- # apps/web/views/authors/index.rb
38
- #
39
- expect("apps/web/views/authors/index.rb").to have_file_content <<~END
40
- module Web
41
- module Views
42
- module Authors
43
- class Index
44
- include Web::View
45
- end
46
- end
47
- end
48
- end
49
- END
50
-
51
- #
52
- # apps/web/config/routes.rb
53
- #
54
- expect("apps/web/config/routes.rb").to have_file_content(%r{get '/authors', to: 'authors#index'})
55
- end
56
- end
57
-
58
- it "generates namespaced action" do
59
- with_project("bookshelf_generate_action") do
60
- output = [
61
- "create spec/web/controllers/api/authors/index_spec.rb",
62
- "create apps/web/controllers/api/authors/index.rb",
63
- "create apps/web/views/api/authors/index.rb",
64
- "create apps/web/templates/api/authors/index.html.erb",
65
- "create spec/web/views/api/authors/index_spec.rb",
66
- "insert apps/web/config/routes.rb"
67
- ]
68
-
69
- run_cmd "hanami generate action web api/authors#index", output
70
-
71
- #
72
- # apps/web/controllers/api/authors/index.rb
73
- #
74
- expect("apps/web/controllers/api/authors/index.rb").to have_file_content <<~END
75
- module Web
76
- module Controllers
77
- module Api
78
- module Authors
79
- class Index
80
- include Web::Action
81
-
82
- def call(params)
83
- end
84
- end
85
- end
86
- end
87
- end
88
- end
89
- END
90
-
91
- #
92
- # apps/web/views/api/authors/index.rb
93
- #
94
- expect("apps/web/views/api/authors/index.rb").to have_file_content <<~END
95
- module Web
96
- module Views
97
- module Api
98
- module Authors
99
- class Index
100
- include Web::View
101
- end
102
- end
103
- end
104
- end
105
- end
106
- END
107
-
108
- #
109
- # apps/web/config/routes.rb
110
- #
111
- expect("apps/web/config/routes.rb").to have_file_content(%r{get '/api/authors', to: 'api/authors#index'})
112
- end
113
- end
114
-
115
- it "generates non-RESTful actions" do
116
- with_project do
117
- run_cmd "hanami generate action web sessions#sign_out"
118
-
119
- #
120
- # apps/web/config/routes.rb
121
- #
122
- expect("apps/web/config/routes.rb").to have_file_content(%r{get '/sessions/sign_out', to: 'sessions#sign_out'})
123
- end
124
- end
125
-
126
- it "fails with missing arguments" do
127
- with_project("bookshelf_generate_action_without_args") do
128
- output = <<~OUT
129
- ERROR: "hanami generate action" was called with no arguments
130
- Usage: "hanami generate action APP ACTION"
131
- OUT
132
- run_cmd "hanami generate action", output, exit_status: 1
133
- end
134
- end
135
-
136
- it "fails with missing app" do
137
- with_project("bookshelf_generate_action_without_app") do
138
- output = <<~OUT
139
- ERROR: "hanami generate action" was called with arguments ["home#index"]
140
- Usage: "hanami generate action APP ACTION"
141
- OUT
142
-
143
- run_cmd "hanami generate action home#index", output, exit_status: 1
144
- end
145
- end
146
-
147
- it "fails with unknown app" do
148
- with_project("bookshelf_generate_action_with_unknown_app") do
149
- output = "`foo' is not a valid APP. Please specify one of: `web'"
150
-
151
- run_cmd "hanami generate action foo home#index", output, exit_status: 1
152
- end
153
- end
154
-
155
- context "--url" do
156
- it "generates action" do
157
- with_project("bookshelf_generate_action_url") do
158
- output = [
159
- "insert apps/web/config/routes.rb"
160
- ]
161
-
162
- run_cmd "hanami generate action web home#index --url=/", output
163
-
164
- #
165
- # apps/web/config/routes.rb
166
- #
167
- expect("apps/web/config/routes.rb").to have_file_content(%r{get '/', to: 'home#index'})
168
- end
169
- end
170
-
171
- it "fails with missing argument" do
172
- with_project("bookshelf_generate_action_missing_url") do
173
- output = "`' is not a valid URL"
174
- run_cmd "hanami generate action web books#create --url=", output, exit_status: 1
175
- end
176
- end
177
- end
178
-
179
- context "--skip-view" do
180
- it "generates action" do
181
- with_project("bookshelf_generate_action_skip_view") do
182
- output = [
183
- "create apps/web/controllers/status/check.rb",
184
- "create spec/web/controllers/status/check_spec.rb",
185
- "insert apps/web/config/routes.rb"
186
- ]
187
- run_cmd "hanami generate action web status#check --skip-view", output
188
-
189
- #
190
- # apps/web/controllers/status/check.rb
191
- #
192
- expect("apps/web/controllers/status/check.rb").to have_file_content <<~END
193
- module Web
194
- module Controllers
195
- module Status
196
- class Check
197
- include Web::Action
198
-
199
- def call(params)
200
- self.body = 'OK'
201
- end
202
- end
203
- end
204
- end
205
- end
206
- END
207
- end
208
- end
209
-
210
- it "generates namespaced action" do
211
- with_project("bookshelf_generate_action_skip_view") do
212
- output = [
213
- "create apps/web/controllers/api/authors/index.rb",
214
- "create spec/web/controllers/api/authors/index_spec.rb",
215
- "insert apps/web/config/routes.rb"
216
- ]
217
- run_cmd "hanami generate action web api/authors#index --skip-view", output
218
-
219
- #
220
- # apps/web/controllers/status/check.rb
221
- #
222
- expect("apps/web/controllers/api/authors/index.rb").to have_file_content <<~END
223
- module Web
224
- module Controllers
225
- module Api
226
- module Authors
227
- class Index
228
- include Web::Action
229
-
230
- def call(params)
231
- self.body = 'OK'
232
- end
233
- end
234
- end
235
- end
236
- end
237
- end
238
- END
239
- end
240
- end
241
- end
242
-
243
- context "--method" do
244
- it "generates action" do
245
- with_project("bookshelf_generate_action_method") do
246
- output = [
247
- "insert apps/web/config/routes.rb"
248
- ]
249
-
250
- run_cmd "hanami generate action web books#create --method=POST", output
251
-
252
- #
253
- # apps/web/config/routes.rb
254
- #
255
- expect("apps/web/config/routes.rb").to have_file_content(%r{post '/books', to: 'books#create'})
256
- end
257
- end
258
-
259
- it "fails with missing argument" do
260
- with_project("bookshelf_generate_action_missing_method") do
261
- output = "`' is not a valid HTTP method. Please use one of: `GET' `POST' `PUT' `DELETE' `HEAD' `OPTIONS' `TRACE' `PATCH' `OPTIONS' `LINK' `UNLINK'"
262
- run_cmd "hanami generate action web books#create --method=", output, exit_status: 1
263
- end
264
- end
265
-
266
- it "fails with unknown argument" do
267
- with_project('bookshelf_generate_action_unknown_method') do
268
- output = "`FOO' is not a valid HTTP method. Please use one of: `GET' `POST' `PUT' `DELETE' `HEAD' `OPTIONS' `TRACE' `PATCH' `OPTIONS' `LINK' `UNLINK'"
269
- run_cmd "hanami generate action web books#create --method=FOO", output, exit_status: 1
270
- end
271
- end
272
- end
273
-
274
- context "erb" do
275
- it "generates action" do
276
- with_project("bookshelf_generate_action_erb", template: "erb") do
277
- output = [
278
- "create apps/web/templates/books/index.html.erb"
279
- ]
280
-
281
- run_cmd "hanami generate action web books#index", output
282
-
283
- #
284
- # apps/web/templates/books/index.html.erb
285
- #
286
- expect("apps/web/templates/books/index.html.erb").to have_file_content <<~END
287
- END
288
-
289
- #
290
- # spec/web/views/books/index_spec.rb
291
- #
292
- expect("spec/web/views/books/index_spec.rb").to have_file_content %r{'apps/web/templates/books/index.html.erb'}
293
- end
294
- end
295
- end # erb
296
-
297
- context "haml" do
298
- it "generates action" do
299
- with_project("bookshelf_generate_action_haml", template: "haml") do
300
- output = [
301
- "create apps/web/templates/books/index.html.haml"
302
- ]
303
-
304
- run_cmd "hanami generate action web books#index", output
305
-
306
- #
307
- # apps/web/templates/books/index.html.haml
308
- #
309
- expect("apps/web/templates/books/index.html.haml").to have_file_content <<~END
310
- END
311
-
312
- #
313
- # spec/web/views/books/index_spec.rb
314
- #
315
- expect("spec/web/views/books/index_spec.rb").to have_file_content(%r{'apps/web/templates/books/index.html.haml'})
316
- end
317
- end
318
- end # haml
319
-
320
- context "slim" do
321
- it "generates action" do
322
- with_project("bookshelf_generate_action_slim", template: "slim") do
323
- output = [
324
- "create apps/web/templates/books/index.html.slim"
325
- ]
326
-
327
- run_cmd "hanami generate action web books#index", output
328
-
329
- #
330
- # apps/web/templates/books/index.html.slim
331
- #
332
- expect("apps/web/templates/books/index.html.slim").to have_file_content <<~END
333
- END
334
-
335
- #
336
- # spec/web/views/books/index_spec.rb
337
- #
338
- expect("spec/web/views/books/index_spec.rb").to have_file_content %r{'apps/web/templates/books/index.html.slim'}
339
- end
340
- end
341
- end # slim
342
-
343
- context "minitest" do
344
- it "generates action" do
345
- with_project("bookshelf_generate_action_minitest", test: "minitest") do
346
- output = [
347
- "create spec/web/controllers/books/index_spec.rb",
348
- "create spec/web/views/books/index_spec.rb"
349
- ]
350
-
351
- run_cmd "hanami generate action web books#index", output
352
-
353
- #
354
- # spec/web/controllers/books/index_spec.rb
355
- #
356
- expect("spec/web/controllers/books/index_spec.rb").to have_file_content <<~END
357
- require_relative '../../../spec_helper'
358
-
359
- describe Web::Controllers::Books::Index do
360
- let(:action) { Web::Controllers::Books::Index.new }
361
- let(:params) { Hash[] }
362
-
363
- it 'is successful' do
364
- response = action.call(params)
365
- _(response[0]).must_equal 200
366
- end
367
- end
368
- END
369
-
370
- #
371
- # spec/web/views/books/index_spec.rb
372
- #
373
- expect("spec/web/views/books/index_spec.rb").to have_file_content <<~END
374
- require_relative '../../../spec_helper'
375
-
376
- describe Web::Views::Books::Index do
377
- let(:exposures) { Hash[format: :html] }
378
- let(:template) { Hanami::View::Template.new('apps/web/templates/books/index.html.erb') }
379
- let(:view) { Web::Views::Books::Index.new(template, exposures) }
380
- let(:rendered) { view.render }
381
-
382
- it 'exposes #format' do
383
- _(view.format).must_equal exposures.fetch(:format)
384
- end
385
- end
386
- END
387
- end
388
- end
389
- end # minitest
390
-
391
- context "rspec" do
392
- it "generates action" do
393
- with_project("bookshelf_generate_action_rspec", test: "rspec") do
394
- output = [
395
- "create spec/web/controllers/books/index_spec.rb",
396
- "create spec/web/views/books/index_spec.rb"
397
- ]
398
-
399
- run_cmd "hanami generate action web books#index", output
400
-
401
- #
402
- # spec/web/controllers/books/index_spec.rb
403
- #
404
- expect("spec/web/controllers/books/index_spec.rb").to have_file_content <<~END
405
- RSpec.describe Web::Controllers::Books::Index, type: :action do
406
- let(:action) { described_class.new }
407
- let(:params) { Hash[] }
408
-
409
- it 'is successful' do
410
- response = action.call(params)
411
- expect(response[0]).to eq 200
412
- end
413
- end
414
- END
415
-
416
- #
417
- # spec/web/views/books/index_spec.rb
418
- #
419
- expect("spec/web/views/books/index_spec.rb").to have_file_content <<~END
420
- RSpec.describe Web::Views::Books::Index, type: :view do
421
- let(:exposures) { Hash[format: :html] }
422
- let(:template) { Hanami::View::Template.new('apps/web/templates/books/index.html.erb') }
423
- let(:view) { described_class.new(template, exposures) }
424
- let(:rendered) { view.render }
425
-
426
- it 'exposes #format' do
427
- expect(view.format).to eq exposures.fetch(:format)
428
- end
429
- end
430
- END
431
- end
432
- end
433
- end # rspec
434
-
435
- it "prints help message" do
436
- with_project do
437
- output = <<~OUT
438
- Command:
439
- hanami generate action
440
-
441
- Usage:
442
- hanami generate action APP ACTION
443
-
444
- Description:
445
- Generate an action for app
446
-
447
- Arguments:
448
- APP # REQUIRED The app name (eg. `web`)
449
- ACTION # REQUIRED The action name (eg. `home#index`)
450
-
451
- Options:
452
- --url=VALUE # The action URL
453
- --method=VALUE # The action HTTP method
454
- --[no-]skip-view # Skip view and template, default: false
455
- --help, -h # Print this help
456
-
457
- Examples:
458
- hanami generate action web home#index # Basic usage
459
- hanami generate action admin home#index # Generate for `admin` app
460
- hanami generate action web home#index --url=/ # Specify URL
461
- hanami generate action web sessions#destroy --method=GET # Specify HTTP method
462
- hanami generate action web books#create --skip-view # Skip view and template
463
- OUT
464
-
465
- run_cmd 'hanami generate action --help', output
466
- end
467
- end
468
- end # action
469
- end
@@ -1,215 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "hanami/utils/string"
4
-
5
- RSpec.describe "hanami generate", type: :integration do
6
- describe "app" do
7
- context "with app name" do
8
- it_behaves_like "a new app" do
9
- let(:input) { "admin" }
10
- end
11
- end
12
-
13
- context "with underscored app name" do
14
- it_behaves_like "a new app" do
15
- let(:input) { "cool_app" }
16
- end
17
- end
18
-
19
- context "with dashed app name" do
20
- it_behaves_like "a new app" do
21
- let(:input) { "awesome-app" }
22
- end
23
- end
24
-
25
- context "with camel case app name" do
26
- it_behaves_like "a new app" do
27
- let(:input) { "CaMElAPp" }
28
- end
29
- end
30
-
31
- context "without require_relative" do
32
- it "generates app" do
33
- with_project("bookshelf_generate_app_without_require_relative") do
34
- app = "no_req_relative"
35
- app_name = Hanami::Utils::String.new(app).classify
36
- output = [
37
- "insert config/environment.rb"
38
- ]
39
-
40
- File.write(
41
- "config/environment.rb",
42
- File
43
- .read("config/environment.rb")
44
- .lines
45
- .reject { |l| l[/^require_relative '.*'\n$/] }
46
- .reject { |l| l[/^ mount Web::App, at: '\/'\n$/] }
47
- .join("")
48
- )
49
-
50
- run_cmd "hanami generate app #{app}", output
51
-
52
- #
53
- # config/environment.rb
54
- #
55
- expect("config/environment.rb").to have_file_content(%r{require_relative '../apps/#{app}/app'})
56
- expect("config/environment.rb").to have_file_content(%r{mount #{app_name}::App, at: '/no_req_relative'})
57
- end
58
- end
59
- end
60
-
61
- context "--app-base-url" do
62
- it "generates app" do
63
- with_project("bookshelf_generate_app_app_base_url") do
64
- app = "api"
65
- app_name = Hanami::Utils::String.new(app).classify
66
- output = [
67
- "insert config/environment.rb"
68
- ]
69
-
70
- run_cmd "hanami generate app #{app} --app-base-url=/api/v1", output
71
-
72
- #
73
- # config/environment.rb
74
- #
75
- expect("config/environment.rb").to have_file_content(%r{require_relative '../apps/#{app}/app'})
76
- expect("config/environment.rb").to have_file_content(%r{mount #{app_name}::App, at: '/api/v1'})
77
- end
78
- end
79
-
80
- it "fails with missing argument" do
81
- with_project("bookshelf_generate_app_missing_app_base_url") do
82
- output = "`' is not a valid URL"
83
- run_cmd "hanami generate app foo --app-base-url=", output, exit_status: 1
84
- end
85
- end
86
- end
87
-
88
- context "erb" do
89
- it "generates app" do
90
- with_project("bookshelf_generate_app_erb", template: :erb) do
91
- app = "admin"
92
- app_name = Hanami::Utils::String.new(app).classify
93
- output = [
94
- "create apps/#{app}/templates/app.html.erb"
95
- ]
96
-
97
- run_cmd "hanami generate app #{app}", output
98
-
99
- #
100
- # apps/admin/templates/app.html.erb
101
- #
102
- expect("apps/admin/templates/app.html.erb").to have_file_content <<~END
103
- <!DOCTYPE html>
104
- <html>
105
- <head>
106
- <title>#{app_name}</title>
107
- <%= favicon %>
108
- </head>
109
- <body>
110
- <%= yield %>
111
- </body>
112
- </html>
113
- END
114
- #
115
- # spec/admin/views/app_layout_spec.rb
116
- #
117
- expect("spec/admin/views/app_layout_spec.rb").to have_file_content(%r{Admin::Views::AppLayout})
118
- end
119
- end
120
- end # erb
121
-
122
- context "haml" do
123
- it "generates app" do
124
- with_project("bookshelf_generate_app_haml", template: :haml) do
125
- app = "admin"
126
- app_name = Hanami::Utils::String.new(app).classify
127
- output = [
128
- "create apps/#{app}/templates/app.html.haml"
129
- ]
130
-
131
- run_cmd "hanami generate app #{app}", output
132
-
133
- #
134
- # apps/admin/templates/app.html.haml
135
- #
136
- expect("apps/admin/templates/app.html.haml").to have_file_content <<~END
137
- !!!
138
- %html
139
- %head
140
- %title #{app_name}
141
- = favicon
142
- %body
143
- = yield
144
- END
145
-
146
- #
147
- # spec/admin/views/app_layout_spec.rb
148
- #
149
- expect("spec/admin/views/app_layout_spec.rb").to have_file_content(%r{Admin::Views::AppLayout})
150
- end
151
- end
152
- end # haml
153
-
154
- context "slim" do
155
- it "generates app" do
156
- with_project("bookshelf_generate_app_slim", template: :slim) do
157
- app = "admin"
158
- app_name = Hanami::Utils::String.new(app).classify
159
- output = [
160
- "create apps/#{app}/templates/app.html.slim"
161
- ]
162
-
163
- run_cmd "hanami generate app #{app}", output
164
-
165
- #
166
- # apps/admin/templates/app.html.slim
167
- #
168
- expect("apps/admin/templates/app.html.slim").to have_file_content <<~END
169
- doctype html
170
- html
171
- head
172
- title
173
- | #{app_name}
174
- = favicon
175
- body
176
- = yield
177
- END
178
-
179
- #
180
- # spec/admin/views/app_layout_spec.rb
181
- #
182
- expect("spec/admin/views/app_layout_spec.rb").to have_file_content(%r{Admin::Views::AppLayout})
183
- end
184
- end
185
- end # slim
186
-
187
- it "prints help message" do
188
- with_project do
189
- output = <<~OUT
190
- Command:
191
- hanami generate app
192
-
193
- Usage:
194
- hanami generate app APP
195
-
196
- Description:
197
- Generate an app
198
-
199
- Arguments:
200
- APP # REQUIRED The app name (eg. `web`)
201
-
202
- Options:
203
- --app-base-url=VALUE # The app base URL (eg. `/api/v1`)
204
- --help, -h # Print this help
205
-
206
- Examples:
207
- hanami generate app admin # Generate `admin` app
208
- hanami generate app api --app-base-url=/api/v1 # Generate `api` app and mount at `/api/v1`
209
- OUT
210
-
211
- run_cmd 'hanami generate app --help', output
212
- end
213
- end
214
- end # app
215
- end