hanami 2.0.0.beta2 → 2.0.0.beta3

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 (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,189 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe "hanami generate", type: :integration do
4
- describe "mailer" do
5
- context "generates a new mailer" do
6
- let(:output) do
7
- ["create lib/bookshelf_generate_mailer/mailers/welcome.rb",
8
- "create spec/bookshelf_generate_mailer/mailers/welcome_spec.rb",
9
- "create lib/bookshelf_generate_mailer/mailers/templates/welcome.txt.erb",
10
- "create lib/bookshelf_generate_mailer/mailers/templates/welcome.html.erb"]
11
- end
12
-
13
- it 'generate the mailer files' do
14
- with_project('bookshelf_generate_mailer', test: 'rspec') do
15
- run_cmd "hanami generate mailer welcome", output
16
- #
17
- # lib/bookshelf_generate_mailer/mailers/welcome.rb
18
- #
19
- expect("lib/bookshelf_generate_mailer/mailers/welcome.rb").to have_file_content <<~END
20
- module Mailers
21
- class Welcome
22
- include Hanami::Mailer
23
-
24
- from '<from>'
25
- to '<to>'
26
- subject 'Hello'
27
- end
28
- end
29
- END
30
-
31
- expect("lib/bookshelf_generate_mailer/mailers/templates/welcome.txt.erb").to have_file_content ""
32
- expect("lib/bookshelf_generate_mailer/mailers/templates/welcome.html.erb").to have_file_content ""
33
- end
34
- end
35
-
36
- it 'generates a proper minitest file' do
37
- with_project('bookshelf_generate_mailer', test: 'minitest') do
38
- run_cmd "hanami generate mailer welcome", output
39
- #
40
- # spec/bookshelf_generate_mailer/mailers/welcome_spec.rb
41
- #
42
- expect("spec/bookshelf_generate_mailer/mailers/welcome_spec.rb").to have_file_content <<~END
43
- require_relative '../../spec_helper'
44
-
45
- describe Mailers::Welcome do
46
- it 'delivers email' do
47
- mail = Mailers::Welcome.deliver
48
- end
49
- end
50
- END
51
- end
52
- end
53
-
54
- it 'generates a proper RSpec file' do
55
- with_project('bookshelf_generate_mailer', test: 'rspec') do
56
- run_cmd "hanami generate mailer welcome", output
57
- #
58
- # spec/bookshelf_generate_mailer/mailers/welcome_spec.rb
59
- #
60
- expect("spec/bookshelf_generate_mailer/mailers/welcome_spec.rb").to have_file_content <<~END
61
- RSpec.describe Mailers::Welcome, type: :mailer do
62
- it 'delivers email' do
63
- mail = Mailers::Welcome.deliver
64
- end
65
- end
66
- END
67
- end
68
- end
69
- end
70
-
71
- it "generates mailer with options from, to and subject with single quotes" do
72
- with_project("bookshelf_generate_mailer_with_options") do
73
- output = [
74
- "create spec/bookshelf_generate_mailer_with_options/mailers/welcome_spec.rb",
75
- "create lib/bookshelf_generate_mailer_with_options/mailers/welcome.rb",
76
- "create lib/bookshelf_generate_mailer_with_options/mailers/templates/welcome.txt.erb",
77
- "create lib/bookshelf_generate_mailer_with_options/mailers/templates/welcome.html.erb"
78
- ]
79
-
80
- run_cmd "hanami generate mailer welcome --from=\"'mail@example.com'\" --to=\"'user@example.com'\" --subject=\"'Let\'s start'\"", output
81
-
82
- expect("lib/bookshelf_generate_mailer_with_options/mailers/welcome.rb").to have_file_content <<~END
83
- module Mailers
84
- class Welcome
85
- include Hanami::Mailer
86
-
87
- from 'mail@example.com'
88
- to 'user@example.com'
89
- subject 'Let\'s start'
90
- end
91
- end
92
- END
93
- end
94
- end
95
-
96
- it "generates mailer with options from, to and subject with double quotes" do
97
- with_project("bookshelf_generate_mailer_with_options") do
98
- output = [
99
- "create spec/bookshelf_generate_mailer_with_options/mailers/welcome_spec.rb",
100
- "create lib/bookshelf_generate_mailer_with_options/mailers/welcome.rb",
101
- "create lib/bookshelf_generate_mailer_with_options/mailers/templates/welcome.txt.erb",
102
- "create lib/bookshelf_generate_mailer_with_options/mailers/templates/welcome.html.erb"
103
- ]
104
-
105
- run_cmd "hanami generate mailer welcome --from='\"mail@example.com\"' --to='\"user@example.com\"' --subject='\"Come on \"Folks\"\"'", output
106
-
107
- expect("lib/bookshelf_generate_mailer_with_options/mailers/welcome.rb").to have_file_content <<~END
108
- module Mailers
109
- class Welcome
110
- include Hanami::Mailer
111
-
112
- from 'mail@example.com'
113
- to 'user@example.com'
114
- subject 'Come on "Folks"'
115
- end
116
- end
117
- END
118
- end
119
- end
120
-
121
- it "generates mailer with options from, to and subject without quotes" do
122
- with_project("bookshelf_generate_mailer_with_options") do
123
- output = [
124
- "create spec/bookshelf_generate_mailer_with_options/mailers/welcome_spec.rb",
125
- "create lib/bookshelf_generate_mailer_with_options/mailers/welcome.rb",
126
- "create lib/bookshelf_generate_mailer_with_options/mailers/templates/welcome.txt.erb",
127
- "create lib/bookshelf_generate_mailer_with_options/mailers/templates/welcome.html.erb"
128
- ]
129
-
130
- run_cmd "hanami generate mailer welcome --from=mail@example.com --to=user@example.com --subject=Welcome", output
131
-
132
- expect("lib/bookshelf_generate_mailer_with_options/mailers/welcome.rb").to have_file_content <<~END
133
- module Mailers
134
- class Welcome
135
- include Hanami::Mailer
136
-
137
- from 'mail@example.com'
138
- to 'user@example.com'
139
- subject 'Welcome'
140
- end
141
- end
142
- END
143
- end
144
- end
145
-
146
- it "fails with missing arguments" do
147
- with_project("bookshelf_generate_mailer_without_args") do
148
- output = <<~OUT
149
- ERROR: "hanami generate mailer" was called with no arguments
150
- Usage: "hanami generate mailer MAILER"
151
- OUT
152
-
153
- run_cmd "hanami generate mailer", output, exit_status: 1
154
- end
155
- end
156
-
157
- it "prints help message" do
158
- with_project do
159
- output = <<~OUT
160
- Command:
161
- hanami generate mailer
162
-
163
- Usage:
164
- hanami generate mailer MAILER
165
-
166
- Description:
167
- Generate a mailer
168
-
169
- Arguments:
170
- MAILER # REQUIRED The mailer name (eg. `welcome`)
171
-
172
- Options:
173
- --from=VALUE # The default `from` field of the mail
174
- --to=VALUE # The default `to` field of the mail
175
- --subject=VALUE # The mail subject
176
- --help, -h # Print this help
177
-
178
- Examples:
179
- hanami generate mailer welcome # Basic usage
180
- hanami generate mailer welcome --from="noreply@example.com" # Generate with default `from` value
181
- hanami generate mailer announcement --to="users@example.com" # Generate with default `to` value
182
- hanami generate mailer forgot_password --subject="Your password reset" # Generate with default `subject`
183
- OUT
184
-
185
- run_cmd 'hanami generate mailer --help', output
186
- end
187
- end
188
- end
189
- end
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe "hanami generate", type: :integration do
4
- describe "migration" do
5
- context "with migration name" do
6
- it_behaves_like "a new migration" do
7
- let(:input) { "users" }
8
- end
9
- end
10
-
11
- context "with underscored name" do
12
- it_behaves_like "a new migration" do
13
- let(:input) { "create_users" }
14
- end
15
- end
16
-
17
- context "with dashed name" do
18
- it_behaves_like "a new migration" do
19
- let(:input) { "add-verified-at-to-users" }
20
- end
21
- end
22
-
23
- context "with camel case app name" do
24
- it_behaves_like "a new migration" do
25
- let(:input) { "AddUniqueIndexUsersEmail" }
26
- end
27
- end
28
-
29
- context "with missing argument" do
30
- it "fails" do
31
- with_project('bookshelf_generate_migration_missing_arguments') do
32
- output = <<-END
33
- ERROR: "hanami generate migration" was called with no arguments
34
- Usage: "hanami generate migration MIGRATION"
35
- END
36
-
37
- run_cmd "hanami generate migration", output, exit_status: 1
38
- end
39
- end
40
- end
41
-
42
- it "prints help message" do
43
- with_project do
44
- banner = <<~OUT
45
- Command:
46
- hanami generate migration
47
-
48
- Usage:
49
- hanami generate migration MIGRATION
50
-
51
- Description:
52
- Generate a migration
53
-
54
- Arguments:
55
- MIGRATION # REQUIRED The migration name (eg. `create_users`)
56
-
57
- Options:
58
- --help, -h # Print this help
59
-
60
- Examples:
61
- OUT
62
-
63
- output = [
64
- banner,
65
- %r{ hanami generate migration create_users # Generate `db/migrations/[\d]{14}_create_users.rb`},
66
- ]
67
-
68
- run_cmd 'hanami generate migration --help', output
69
- end
70
- end
71
- end # migration
72
- end
@@ -1,290 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "hanami/utils/string"
4
-
5
- RSpec.describe "hanami generate", type: :integration do
6
- describe "model" do
7
- context "with model name" do
8
- it_behaves_like "a new model" do
9
- let(:input) { "user" }
10
- end
11
- end
12
-
13
- context "with underscored name" do
14
- it_behaves_like "a new model" do
15
- let(:input) { "discounted_book" }
16
- end
17
- end
18
-
19
- context "with dashed name" do
20
- it_behaves_like "a new model" do
21
- let(:input) { "user-event" }
22
- end
23
- end
24
-
25
- context "with camel case name" do
26
- it_behaves_like "a new model" do
27
- let(:input) { "VerifiedUser" }
28
- end
29
- end
30
-
31
- context "with missing argument" do
32
- it "fails" do
33
- with_project('bookshelf_generate_model_missing_arguments') do
34
- output = <<-END
35
- ERROR: "hanami generate model" was called with no arguments
36
- Usage: "hanami generate model MODEL"
37
- END
38
-
39
- run_cmd "hanami generate model", output, exit_status: 1
40
- end
41
- end
42
- end
43
-
44
- context "with missing migrations directory" do
45
- it "will create directory and migration" do
46
- with_project do
47
- model_name = "book"
48
- directory = Pathname.new("db").join("migrations")
49
- FileUtils.rm_rf(directory)
50
-
51
- run_cmd "hanami generate model #{model_name}"
52
- expect(directory).to be_directory
53
-
54
- migration = directory.children.find do |m|
55
- m.to_s.include?(model_name)
56
- end
57
-
58
- expect(migration).to_not be(nil)
59
- end
60
- end
61
- end
62
-
63
- context "with skip-migration" do
64
- it "doesn't create a migration file" do
65
- model_name = "user"
66
- table_name = "users"
67
- project = "bookshelf_generate_model_skip_migration"
68
- with_project(project) do
69
- run_cmd "hanami generate model #{model_name} --skip-migration"
70
- #
71
- # db/migrations/<timestamp>_create_<models>.rb
72
- #
73
- migrations = Pathname.new("db").join("migrations").children
74
- file = migrations.find do |child|
75
- child.to_s.include?("create_#{table_name}")
76
- end
77
-
78
- expect(file).to be_nil, "Expected to not find a migration matching: create_#{table_name}. Found #{file&.to_s}"
79
- end
80
- end
81
-
82
- it "doesn't create a migration file when --relation is used" do
83
- model_name = "user"
84
- table_name = "accounts"
85
- project = "bookshelf_generate_model_skip_migration"
86
- with_project(project) do
87
- run_cmd "hanami generate model #{model_name} --skip-migration --relation=#{table_name}"
88
- #
89
- # db/migrations/<timestamp>_create_<models>.rb
90
- #
91
- migrations = Pathname.new("db").join("migrations").children
92
- file = migrations.find do |child|
93
- child.to_s.include?("create_#{table_name}")
94
- end
95
-
96
- expect(file).to be_nil, "Expected to not find a migration matching: create_#{table_name}. Found #{file&.to_s}"
97
- end
98
- end
99
- end
100
-
101
- context "with relation option" do
102
- let(:project) { "generate_model_with_relation_name" }
103
- let(:model_name) { "stimulus" }
104
- let(:class_name) { "Stimulus" }
105
- let(:relation_name) { "stimuli" }
106
-
107
- it "creates correct entity, repository, and migration" do
108
- with_project(project) do
109
- output = [
110
- "create lib/#{project}/entities/#{model_name}.rb",
111
- "create lib/#{project}/repositories/#{model_name}_repository.rb",
112
- /create db\/migrations\/(\d+)_create_#{relation_name}.rb/
113
- ]
114
-
115
- run_cmd "hanami generate model #{model_name} --relation=#{relation_name}", output
116
-
117
- expect("lib/#{project}/repositories/#{model_name}_repository.rb").to have_file_content <<~END
118
- class #{class_name}Repository < Hanami::Repository
119
- self.relation = :#{relation_name}
120
- end
121
- END
122
-
123
- migration = Pathname.new("db").join("migrations").children.find do |child|
124
- child.to_s.include?("create_#{relation_name}")
125
- end
126
-
127
- expect(migration.to_s).to have_file_content <<~END
128
- Hanami::Model.migration do
129
- change do
130
- create_table :#{relation_name} do
131
- primary_key :id
132
-
133
- column :created_at, DateTime, null: false
134
- column :updated_at, DateTime, null: false
135
- end
136
- end
137
- end
138
- END
139
- end
140
- end
141
-
142
- it "handles CamelCase arguments" do
143
- with_project(project) do
144
- model = "sheep"
145
- relation_name = "black_sheeps"
146
- output = [
147
- "create lib/#{project}/entities/#{model}.rb",
148
- "create lib/#{project}/repositories/#{model}_repository.rb",
149
- /create db\/migrations\/(\d+)_create_#{relation_name}.rb/
150
- ]
151
-
152
- run_cmd "hanami generate model #{model} --relation=BlackSheeps", output
153
-
154
- expect("lib/#{project}/repositories/sheep_repository.rb").to have_file_content <<~END
155
- class SheepRepository < Hanami::Repository
156
- self.relation = :#{relation_name}
157
- end
158
- END
159
-
160
- migration = Pathname.new("db").join("migrations").children.find do |child|
161
- child.to_s.include?("create_#{relation_name}")
162
- end
163
-
164
- expect(migration.to_s).to have_file_content <<~END
165
- Hanami::Model.migration do
166
- change do
167
- create_table :#{relation_name} do
168
- primary_key :id
169
-
170
- column :created_at, DateTime, null: false
171
- column :updated_at, DateTime, null: false
172
- end
173
- end
174
- end
175
- END
176
- end
177
- end
178
-
179
- it "returns error for blank option" do
180
- with_project(project) do
181
- run_cmd "hanami generate model #{model_name} --relation=", "`' is not a valid relation name", exit_status: 1
182
- end
183
- end
184
- end
185
-
186
- context "minitest" do
187
- it "generates model" do
188
- project = "bookshelf_generate_model_minitest"
189
-
190
- with_project(project, test: :minitest) do
191
- model = "book"
192
- class_name = Hanami::Utils::String.new(model).classify
193
- output = [
194
- "create spec/#{project}/entities/#{model}_spec.rb",
195
- "create spec/#{project}/repositories/#{model}_repository_spec.rb"
196
- ]
197
-
198
- run_cmd "hanami generate model #{model}", output
199
-
200
- #
201
- # spec/<project>/entities/<model>_spec.rb
202
- #
203
- expect("spec/#{project}/entities/#{model}_spec.rb").to have_file_content <<~END
204
- require_relative '../../spec_helper'
205
-
206
- describe #{class_name} do
207
- # place your tests here
208
- end
209
- END
210
-
211
- #
212
- # spec/<project>/repositories/<model>_repository_spec.rb
213
- #
214
- expect("spec/#{project}/repositories/#{model}_repository_spec.rb").to have_file_content <<~END
215
- require_relative '../../spec_helper'
216
-
217
- describe #{class_name}Repository do
218
- # place your tests here
219
- end
220
- END
221
- end
222
- end
223
- end # minitest
224
-
225
- context "rspec" do
226
- it "generates model" do
227
- project = "bookshelf_generate_model_rspec"
228
-
229
- with_project(project, test: :rspec) do
230
- model = "book"
231
- class_name = Hanami::Utils::String.new(model).classify
232
- output = [
233
- "create spec/#{project}/entities/#{model}_spec.rb",
234
- "create spec/#{project}/repositories/#{model}_repository_spec.rb"
235
- ]
236
-
237
- run_cmd "hanami generate model #{model}", output
238
-
239
- #
240
- # spec/<project>/entities/<model>_spec.rb
241
- #
242
- expect("spec/#{project}/entities/#{model}_spec.rb").to have_file_content <<~END
243
- RSpec.describe #{class_name}, type: :entity do
244
- # place your tests here
245
- end
246
- END
247
-
248
- #
249
- # spec/<project>/repositories/<model>_repository_spec.rb
250
- #
251
- expect("spec/#{project}/repositories/#{model}_repository_spec.rb").to have_file_content <<~END
252
- RSpec.describe BookRepository, type: :repository do
253
- # place your tests here
254
- end
255
- END
256
- end
257
- end
258
- end # rspec
259
-
260
- it "prints help message" do
261
- with_project do
262
- output = <<~OUT
263
- Command:
264
- hanami generate model
265
-
266
- Usage:
267
- hanami generate model MODEL
268
-
269
- Description:
270
- Generate a model
271
-
272
- Arguments:
273
- MODEL # REQUIRED Model name (eg. `user`)
274
-
275
- Options:
276
- --[no-]skip-migration # Skip migration, default: false
277
- --relation=VALUE # Name of the database relation, default: pluralized model name
278
- --help, -h # Print this help
279
-
280
- Examples:
281
- hanami generate model user # Generate `User` entity, `UserRepository` repository, and the migration
282
- hanami generate model user --skip-migration # Generate `User` entity and `UserRepository` repository
283
- hanami generate model user --relation=accounts # Generate `User` entity, `UserRepository` and migration to create `accounts` table
284
- OUT
285
-
286
- run_cmd 'hanami generate model --help', output
287
- end
288
- end
289
- end # model
290
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe "hanami generate", type: :integration do
4
- describe "secret" do
5
- context "without app name" do
6
- it "prints secret" do
7
- with_project do
8
- generate "secret"
9
-
10
- expect(out).to match(/[\w]{64}/)
11
- end
12
- end
13
- end
14
-
15
- context "with app name" do
16
- it "prints secret" do
17
- with_project do
18
- generate "secret web"
19
-
20
- expect(out).to match(%r{WEB_SESSIONS_SECRET="[\w]{64}"})
21
- end
22
- end
23
- end
24
-
25
- it 'prints help message' do
26
- with_project do
27
- banner = <<~OUT
28
- Command:
29
- hanami generate secret
30
-
31
- Usage:
32
- hanami generate secret [APP]
33
-
34
- Description:
35
- Generate session secret
36
-
37
- Arguments:
38
- APP # The app name (eg. `web`)
39
-
40
- Options:
41
- --help, -h # Print this help
42
-
43
- Examples:
44
- OUT
45
-
46
- output = [
47
- banner,
48
- # %r{ hanami generate secret # Prints secret (eg. `[\w]{64}`)},
49
- # %r{ hanami generate secret web # Prints session secret (eg. `WEB_SESSIONS_SECRET=[\w]{64}`)}
50
- ]
51
-
52
- run_cmd 'hanami generate secret --help', output
53
- end
54
- end
55
- end # secret
56
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe "hanami generate", type: :integration do
4
- it "prints subcommands" do
5
- with_project do
6
- output = <<~OUT
7
- Commands:
8
- hanami generate action APP ACTION # Generate an action for app
9
- hanami generate app APP # Generate an app
10
- hanami generate mailer MAILER # Generate a mailer
11
- hanami generate migration MIGRATION # Generate a migration
12
- hanami generate model MODEL # Generate a model
13
- hanami generate secret [APP] # Generate session secret
14
- OUT
15
-
16
- run_cmd "hanami generate", output, exit_status: 1
17
- end
18
- end
19
- end