ruby_raider 3.0.1 → 3.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.
Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/e2e_tests.yml +0 -17
  3. data/.github/workflows/system_tests.yml +0 -22
  4. data/README.md +8 -62
  5. data/lib/commands/scaffolding_commands.rb +1 -192
  6. data/lib/commands/utility_commands.rb +0 -43
  7. data/lib/generators/automation/templates/login.tt +1 -9
  8. data/lib/generators/automation/templates/page.tt +1 -7
  9. data/lib/generators/automation/templates/partials/initialize_selector.tt +1 -3
  10. data/lib/generators/automation/templates/partials/visit_method.tt +2 -6
  11. data/lib/generators/common_generator.rb +0 -6
  12. data/lib/generators/cucumber/cucumber_generator.rb +0 -24
  13. data/lib/generators/cucumber/templates/accessibility_steps.tt +2 -6
  14. data/lib/generators/cucumber/templates/cucumber.tt +0 -7
  15. data/lib/generators/cucumber/templates/env.tt +1 -3
  16. data/lib/generators/cucumber/templates/partials/appium_env.tt +1 -6
  17. data/lib/generators/cucumber/templates/partials/selenium_env.tt +0 -5
  18. data/lib/generators/cucumber/templates/partials/watir_env.tt +0 -5
  19. data/lib/generators/cucumber/templates/partials/web_steps.tt +4 -4
  20. data/lib/generators/cucumber/templates/world.tt +1 -3
  21. data/lib/generators/generator.rb +2 -46
  22. data/lib/generators/helper_generator.rb +4 -42
  23. data/lib/generators/infrastructure/templates/github.tt +2 -2
  24. data/lib/generators/infrastructure/templates/github_appium.tt +2 -6
  25. data/lib/generators/invoke_generators.rb +4 -25
  26. data/lib/generators/menu_generator.rb +10 -100
  27. data/lib/generators/rspec/rspec_generator.rb +0 -11
  28. data/lib/generators/rspec/templates/accessibility_spec.tt +2 -6
  29. data/lib/generators/rspec/templates/spec.tt +6 -8
  30. data/lib/generators/templates/common/gemfile.tt +0 -26
  31. data/lib/generators/templates/common/git_ignore.tt +0 -2
  32. data/lib/generators/templates/common/partials/mobile_config.tt +0 -4
  33. data/lib/generators/templates/common/partials/web_config.tt +0 -4
  34. data/lib/generators/templates/common/rakefile.tt +0 -9
  35. data/lib/generators/templates/common/read_me.tt +4 -10
  36. data/lib/generators/templates/helpers/allure_helper.tt +0 -10
  37. data/lib/generators/templates/helpers/partials/debug_diagnostics.tt +1 -3
  38. data/lib/generators/templates/helpers/partials/debug_start.tt +1 -3
  39. data/lib/generators/templates/helpers/partials/quit_driver.tt +1 -3
  40. data/lib/generators/templates/helpers/partials/screenshot.tt +1 -3
  41. data/lib/generators/templates/helpers/spec_helper.tt +2 -39
  42. data/lib/ruby_raider.rb +2 -50
  43. data/lib/scaffolding/project_detector.rb +2 -9
  44. data/lib/scaffolding/scaffolding.rb +0 -109
  45. data/lib/scaffolding/templates/component.tt +1 -4
  46. data/lib/scaffolding/templates/page_object.tt +0 -10
  47. data/lib/scaffolding/templates/spec.tt +2 -6
  48. data/lib/scaffolding/templates/steps.tt +0 -2
  49. data/lib/utilities/utilities.rb +23 -29
  50. data/lib/version +1 -1
  51. data/sig/commands/scaffolding_commands.rbs +0 -12
  52. data/sig/commands/utility_commands.rbs +0 -6
  53. data/sig/generators/cucumber/cucumber_generator.rbs +0 -4
  54. data/sig/generators/generator.rbs +0 -11
  55. data/sig/generators/helper_generator.rbs +1 -5
  56. data/sig/generators/invoke_generators.rbs +1 -2
  57. data/sig/generators/menu_generator.rbs +2 -6
  58. data/sig/generators/rspec/rspec_generator.rbs +0 -2
  59. data/sig/ruby_raider.rbs +1 -3
  60. data/sig/scaffolding/project_detector.rbs +0 -1
  61. data/sig/scaffolding/scaffolding.rbs +0 -23
  62. data/sig/utilities/utilities.rbs +0 -4
  63. data/spec/commands/raider_commands_spec.rb +0 -61
  64. data/spec/integration/commands/browser_update_after_creation_spec.rb +123 -0
  65. data/spec/integration/commands/scaffolding_commands_spec.rb +0 -20
  66. data/spec/integration/commands/utility_commands_spec.rb +5 -5
  67. data/spec/integration/content/ci_content_spec.rb +6 -61
  68. data/spec/integration/content/common_content_spec.rb +0 -64
  69. data/spec/integration/content/config_content_spec.rb +1 -51
  70. data/spec/integration/content/content_helper.rb +2 -2
  71. data/spec/integration/content/gemfile_content_spec.rb +0 -71
  72. data/spec/integration/content/helper_content_spec.rb +4 -240
  73. data/spec/integration/content/page_content_spec.rb +0 -89
  74. data/spec/integration/content/syntax_validation_spec.rb +2 -2
  75. data/spec/integration/content/test_content_spec.rb +0 -119
  76. data/spec/integration/end_to_end_features_spec.rb +13 -411
  77. data/spec/integration/end_to_end_spec.rb +0 -96
  78. data/spec/integration/generators/axe_addon_spec.rb +2 -52
  79. data/spec/integration/generators/common_generator_spec.rb +1 -13
  80. data/spec/integration/generators/config_features_spec.rb +3 -81
  81. data/spec/integration/generators/debug_helper_spec.rb +0 -20
  82. data/spec/integration/generators/github_generator_spec.rb +5 -15
  83. data/spec/integration/generators/helpers_generator_spec.rb +0 -37
  84. data/spec/integration/scaffolding_e2e_spec.rb +2 -237
  85. data/spec/integration/settings_helper.rb +1 -3
  86. data/spec/integration/spec_helper.rb +6 -11
  87. data/spec/menus/menu_generator_spec.rb +4 -107
  88. data/spec/scaffolding/scaffold_project_detector_spec.rb +4 -26
  89. data/spec/scaffolding/scaffolding_features_spec.rb +0 -183
  90. data/spec/system/selenium_spec.rb +1 -4
  91. data/spec/system/support/system_test_helper.rb +0 -1
  92. data/spec/system/watir_spec.rb +1 -4
  93. data/spec/utilities/headless_config_spec.rb +0 -7
  94. metadata +3 -97
  95. data/lib/adopter/adopt_menu.rb +0 -146
  96. data/lib/adopter/converters/base_converter.rb +0 -84
  97. data/lib/adopter/converters/identity_converter.rb +0 -53
  98. data/lib/adopter/migration_plan.rb +0 -74
  99. data/lib/adopter/migrator.rb +0 -96
  100. data/lib/adopter/plan_builder.rb +0 -275
  101. data/lib/adopter/project_analyzer.rb +0 -252
  102. data/lib/adopter/project_detector.rb +0 -157
  103. data/lib/generators/cucumber/templates/partials/capybara_env.tt +0 -38
  104. data/lib/generators/cucumber/templates/partials/capybara_world.tt +0 -6
  105. data/lib/generators/cucumber/templates/performance_feature.tt +0 -5
  106. data/lib/generators/cucumber/templates/performance_steps.tt +0 -17
  107. data/lib/generators/cucumber/templates/visual_feature.tt +0 -5
  108. data/lib/generators/cucumber/templates/visual_steps.tt +0 -19
  109. data/lib/generators/infrastructure/gitlab_generator.rb +0 -11
  110. data/lib/generators/infrastructure/templates/gitlab.tt +0 -46
  111. data/lib/generators/minitest/minitest_generator.rb +0 -35
  112. data/lib/generators/minitest/templates/accessibility_test.tt +0 -26
  113. data/lib/generators/minitest/templates/performance_test.tt +0 -18
  114. data/lib/generators/minitest/templates/test.tt +0 -64
  115. data/lib/generators/minitest/templates/visual_test.tt +0 -23
  116. data/lib/generators/rspec/templates/performance_spec.tt +0 -18
  117. data/lib/generators/rspec/templates/visual_spec.tt +0 -20
  118. data/lib/generators/templates/helpers/capybara_helper.tt +0 -32
  119. data/lib/generators/templates/helpers/performance_helper.tt +0 -57
  120. data/lib/generators/templates/helpers/visual_helper.tt +0 -58
  121. data/lib/llm/client.rb +0 -79
  122. data/lib/llm/config.rb +0 -57
  123. data/lib/llm/prompts.rb +0 -84
  124. data/lib/llm/provider.rb +0 -27
  125. data/lib/llm/providers/anthropic_provider.rb +0 -43
  126. data/lib/llm/providers/ollama_provider.rb +0 -56
  127. data/lib/llm/providers/openai_provider.rb +0 -42
  128. data/lib/llm/response_parser.rb +0 -67
  129. data/lib/plugin/plugin.rb +0 -111
  130. data/lib/plugin/plugin_exposer.rb +0 -55
  131. data/lib/scaffolding/crud_generator.rb +0 -94
  132. data/lib/scaffolding/dry_run_presenter.rb +0 -16
  133. data/lib/scaffolding/page_introspector.rb +0 -45
  134. data/lib/scaffolding/scaffold_menu.rb +0 -103
  135. data/lib/scaffolding/templates/page_from_url.tt +0 -75
  136. data/lib/scaffolding/templates/spec_from_page.tt +0 -31
  137. data/lib/scaffolding/templates/spec_from_url.tt +0 -46
  138. data/lib/scaffolding/url_analyzer.rb +0 -179
  139. data/sig/adopter/adopt_menu.rbs +0 -25
  140. data/sig/adopter/converters/base_converter.rbs +0 -23
  141. data/sig/adopter/converters/identity_converter.rbs +0 -16
  142. data/sig/adopter/migration_plan.rbs +0 -34
  143. data/sig/adopter/migrator.rbs +0 -21
  144. data/sig/adopter/plan_builder.rbs +0 -38
  145. data/sig/adopter/project_analyzer.rbs +0 -39
  146. data/sig/adopter/project_detector.rbs +0 -26
  147. data/sig/generators/infrastructure/gitlab_generator.rbs +0 -4
  148. data/sig/generators/minitest/minitest_generator.rbs +0 -8
  149. data/sig/llm/client.rbs +0 -15
  150. data/sig/llm/config.rbs +0 -20
  151. data/sig/llm/prompts.rbs +0 -8
  152. data/sig/llm/provider.rbs +0 -12
  153. data/sig/llm/providers/anthropic_provider.rbs +0 -16
  154. data/sig/llm/providers/ollama_provider.rbs +0 -18
  155. data/sig/llm/providers/openai_provider.rbs +0 -16
  156. data/sig/llm/response_parser.rbs +0 -13
  157. data/sig/plugin/plugin.rbs +0 -24
  158. data/sig/plugin/plugin_exposer.rbs +0 -20
  159. data/sig/scaffolding/crud_generator.rbs +0 -16
  160. data/sig/scaffolding/dry_run_presenter.rbs +0 -4
  161. data/sig/scaffolding/page_introspector.rbs +0 -14
  162. data/sig/scaffolding/scaffold_menu.rbs +0 -18
  163. data/sig/scaffolding/url_analyzer.rbs +0 -28
  164. data/spec/adopter/adopt_menu_spec.rb +0 -176
  165. data/spec/adopter/converters/identity_converter_spec.rb +0 -145
  166. data/spec/adopter/migration_plan_spec.rb +0 -113
  167. data/spec/adopter/migrator_spec.rb +0 -277
  168. data/spec/adopter/plan_builder_spec.rb +0 -298
  169. data/spec/adopter/project_analyzer_spec.rb +0 -337
  170. data/spec/adopter/project_detector_spec.rb +0 -295
  171. data/spec/generators/generator_spec.rb +0 -23
  172. data/spec/integration/content/reporter_content_spec.rb +0 -236
  173. data/spec/integration/content/skip_flags_content_spec.rb +0 -206
  174. data/spec/integration/generators/gitlab_generator_spec.rb +0 -38
  175. data/spec/integration/generators/lighthouse_addon_spec.rb +0 -132
  176. data/spec/integration/generators/minitest_generator_spec.rb +0 -64
  177. data/spec/integration/generators/reporter_spec.rb +0 -159
  178. data/spec/integration/generators/skip_flags_spec.rb +0 -134
  179. data/spec/integration/generators/visual_addon_spec.rb +0 -148
  180. data/spec/llm/client_spec.rb +0 -79
  181. data/spec/llm/config_spec.rb +0 -92
  182. data/spec/llm/prompts_spec.rb +0 -49
  183. data/spec/llm/response_parser_spec.rb +0 -92
  184. data/spec/menus/adopter_adopt_menu_spec.rb +0 -97
  185. data/spec/scaffolding/page_introspector_spec.rb +0 -82
  186. data/spec/scaffolding/url_analyzer_spec.rb +0 -110
  187. data/spec/system/adopt_matrix_spec.rb +0 -537
  188. data/spec/system/adopt_spec.rb +0 -225
  189. data/spec/system/capybara_spec.rb +0 -42
@@ -20,7 +20,6 @@ RSpec.describe MenuGenerator do
20
20
  menu_generator.generate_choice_menu
21
21
 
22
22
  expect(menu).to have_received(:choice).with(:Selenium, anything)
23
- expect(menu).to have_received(:choice).with(:Capybara, anything)
24
23
  expect(menu).to have_received(:choice).with(:Appium, anything)
25
24
  expect(menu).to have_received(:choice).with(:Watir, anything)
26
25
  expect(menu).to have_received(:choice).with(:Quit, anything)
@@ -38,7 +37,6 @@ RSpec.describe MenuGenerator do
38
37
 
39
38
  expect(menu).to have_received(:choice).with(:Cucumber, anything)
40
39
  expect(menu).to have_received(:choice).with(:Rspec, anything)
41
- expect(menu).to have_received(:choice).with(:Minitest, anything)
42
40
  expect(menu).to have_received(:choice).with(:Quit, anything)
43
41
  end
44
42
  end
@@ -61,7 +59,7 @@ RSpec.describe MenuGenerator do
61
59
 
62
60
  describe '#set_up_framework' do
63
61
  let(:options) do
64
- { automation: 'selenium', framework: 'rspec', ci_platform: 'github', accessibility: true }
62
+ { automation: 'selenium', framework: 'rspec', accessibility: true }
65
63
  end
66
64
 
67
65
  before do
@@ -78,7 +76,6 @@ RSpec.describe MenuGenerator do
78
76
  hash_including(
79
77
  automation: 'selenium',
80
78
  framework: 'rspec',
81
- ci_platform: 'github',
82
79
  accessibility: true,
83
80
  name: 'test_project'
84
81
  )
@@ -95,7 +92,7 @@ RSpec.describe MenuGenerator do
95
92
  end
96
93
  end
97
94
 
98
- describe 'full flow: selenium + rspec + no CI' do
95
+ describe 'full flow: selenium + rspec' do
99
96
  it 'calls set_up_framework with correct options' do
100
97
  allow(menu_generator).to receive(:generate_framework)
101
98
  allow(menu_generator).to receive(:system)
@@ -110,41 +107,19 @@ RSpec.describe MenuGenerator do
110
107
  end
111
108
  end
112
109
 
113
- describe 'full flow: capybara + minitest + github' do
110
+ describe 'full flow: watir + cucumber' do
114
111
  it 'calls set_up_framework with correct options' do
115
112
  allow(menu_generator).to receive(:generate_framework)
116
113
  allow(menu_generator).to receive(:system)
117
114
  allow(prompt).to receive(:say)
118
115
  allow(prompt).to receive(:yes?).and_return(false)
119
116
 
120
- menu_generator.send(:create_framework, 'Minitest', 'capybara', ci_platform: 'github')
121
-
122
- expect(menu_generator).to have_received(:generate_framework).with(
123
- hash_including(
124
- automation: 'capybara',
125
- framework: 'minitest',
126
- ci_platform: 'github',
127
- accessibility: false,
128
- name: 'test_project'
129
- )
130
- )
131
- end
132
- end
133
-
134
- describe 'full flow: watir + cucumber + gitlab' do
135
- it 'calls set_up_framework with correct options' do
136
- allow(menu_generator).to receive(:generate_framework)
137
- allow(menu_generator).to receive(:system)
138
- allow(prompt).to receive(:say)
139
- allow(prompt).to receive(:yes?).and_return(false)
140
-
141
- menu_generator.send(:create_framework, 'Cucumber', 'watir', ci_platform: 'gitlab')
117
+ menu_generator.send(:create_framework, 'Cucumber', 'watir')
142
118
 
143
119
  expect(menu_generator).to have_received(:generate_framework).with(
144
120
  hash_including(
145
121
  automation: 'watir',
146
122
  framework: 'cucumber',
147
- ci_platform: 'gitlab',
148
123
  accessibility: false,
149
124
  name: 'test_project'
150
125
  )
@@ -167,84 +142,6 @@ RSpec.describe MenuGenerator do
167
142
  end
168
143
  end
169
144
 
170
- describe 'full flow: selenium + rspec + visual' do
171
- it 'passes visual flag through' do
172
- allow(menu_generator).to receive(:generate_framework)
173
- allow(menu_generator).to receive(:system)
174
- allow(prompt).to receive(:say)
175
- allow(prompt).to receive(:yes?).and_return(false)
176
-
177
- menu_generator.send(:create_framework, 'Rspec', 'selenium', visual: true)
178
-
179
- expect(menu_generator).to have_received(:generate_framework).with(
180
- hash_including(automation: 'selenium', framework: 'rspec', visual: true)
181
- )
182
- end
183
- end
184
-
185
- describe 'full flow: selenium + rspec + performance' do
186
- it 'passes performance flag through' do
187
- allow(menu_generator).to receive(:generate_framework)
188
- allow(menu_generator).to receive(:system)
189
- allow(prompt).to receive(:say)
190
- allow(prompt).to receive(:yes?).and_return(false)
191
-
192
- menu_generator.send(:create_framework, 'Rspec', 'selenium', performance: true)
193
-
194
- expect(menu_generator).to have_received(:generate_framework).with(
195
- hash_including(automation: 'selenium', framework: 'rspec', performance: true)
196
- )
197
- end
198
- end
199
-
200
- describe 'ruby version selection menu' do
201
- it 'presents ruby version choices' do # rubocop:disable RSpec/MultipleExpectations
202
- menu = double('menu') # rubocop:disable RSpec/VerifiedDoubles
203
- allow(menu).to receive(:choice)
204
- allow(prompt).to receive(:select).with('Select Ruby version for your project').and_yield(menu)
205
-
206
- menu_generator.send(:select_ruby_version, 'Rspec', 'selenium')
207
-
208
- expect(menu).to have_received(:choice).with(:'3.4 (latest)', anything)
209
- expect(menu).to have_received(:choice).with(:'3.3', anything)
210
- expect(menu).to have_received(:choice).with(:'3.2', anything)
211
- expect(menu).to have_received(:choice).with(:'3.1', anything)
212
- expect(menu).to have_received(:choice).with(:Quit, anything)
213
- end
214
- end
215
-
216
- describe 'ruby_version propagation' do
217
- it 'passes ruby_version through to generate_framework' do
218
- allow(menu_generator).to receive(:generate_framework)
219
- allow(menu_generator).to receive(:system)
220
- allow(prompt).to receive(:say)
221
- allow(prompt).to receive(:yes?).and_return(false)
222
-
223
- menu_generator.send(:create_framework, 'Rspec', 'selenium', ruby_version: '3.3')
224
-
225
- expect(menu_generator).to have_received(:generate_framework).with(
226
- hash_including(ruby_version: '3.3')
227
- )
228
- end
229
- end
230
-
231
- describe 'reporter selection menu' do
232
- it 'includes JSON and All reporter choices' do # rubocop:disable RSpec/MultipleExpectations
233
- menu = double('menu') # rubocop:disable RSpec/VerifiedDoubles
234
- allow(menu).to receive(:choice)
235
- allow(prompt).to receive(:select).with('Select your test reporter').and_yield(menu)
236
-
237
- menu_generator.send(:select_reporter, 'Rspec', 'selenium')
238
-
239
- expect(menu).to have_received(:choice).with(:JSON, anything)
240
- expect(menu).to have_received(:choice).with(:All, anything)
241
- expect(menu).to have_received(:choice).with(:Allure, anything)
242
- expect(menu).to have_received(:choice).with(:JUnit, anything)
243
- expect(menu).to have_received(:choice).with(:Both, anything)
244
- expect(menu).to have_received(:choice).with(:None, anything)
245
- end
246
- end
247
-
248
145
  describe 'project name propagation' do
249
146
  it 'uses the project name from initialization' do
250
147
  generator = described_class.new('my_custom_project')
@@ -34,42 +34,20 @@ RSpec.describe ScaffoldProjectDetector do
34
34
  expect(described_class.selenium?).to be true
35
35
  end
36
36
 
37
- it 'reports not capybara?' do
38
- expect(described_class.capybara?).to be false
39
- end
40
- end
41
-
42
- context 'with capybara project' do
43
- before do
44
- File.write('Gemfile', "gem 'capybara'\ngem 'cucumber'\n")
45
- FileUtils.mkdir_p('features')
46
- end
47
-
48
- it 'detects capybara automation' do
49
- expect(described_class.detect_automation).to eq('capybara')
50
- end
51
-
52
- it 'detects cucumber framework' do
53
- expect(described_class.detect_framework).to eq('cucumber')
54
- end
55
-
56
- it 'reports capybara?' do
57
- expect(described_class.capybara?).to be true
58
- end
59
37
  end
60
38
 
61
39
  context 'with watir project' do
62
40
  before do
63
- File.write('Gemfile', "gem 'watir'\ngem 'minitest'\n")
64
- FileUtils.mkdir_p('test')
41
+ File.write('Gemfile', "gem 'watir'\ngem 'rspec'\n")
42
+ FileUtils.mkdir_p('spec')
65
43
  end
66
44
 
67
45
  it 'detects watir automation' do
68
46
  expect(described_class.detect_automation).to eq('watir')
69
47
  end
70
48
 
71
- it 'detects minitest framework' do
72
- expect(described_class.detect_framework).to eq('minitest')
49
+ it 'detects rspec framework' do
50
+ expect(described_class.detect_framework).to eq('rspec')
73
51
  end
74
52
 
75
53
  it 'reports watir?' do
@@ -50,24 +50,6 @@ RSpec.describe 'Scaffolding features' do
50
50
  end
51
51
  end
52
52
 
53
- # --- Feature 6: Dry run ---
54
-
55
- describe 'dry run' do
56
- it 'does not create files with --dry-run' do
57
- expect do
58
- scaffold.new.invoke(:page, nil, %w[checkout --dry-run])
59
- end.to output(/checkout/).to_stdout
60
-
61
- expect(Pathname.new('page_objects/pages/checkout.rb')).not_to be_file
62
- end
63
-
64
- it 'shows planned file path' do
65
- expect do
66
- scaffold.new.invoke(:spec, nil, %w[checkout --dry-run])
67
- end.to output(/checkout/).to_stdout
68
- end
69
- end
70
-
71
53
  # --- Feature 8: Component scaffolding ---
72
54
 
73
55
  describe 'component scaffolding' do
@@ -87,12 +69,6 @@ RSpec.describe 'Scaffolding features' do
87
69
  content = File.read('page_objects/components/sidebar.rb')
88
70
  expect(content).to include('# frozen_string_literal: true')
89
71
  end
90
-
91
- it 'deletes a component' do
92
- scaffold.new.invoke(:component, nil, %w[sidebar])
93
- scaffold.new.invoke(:component, nil, %w[sidebar --delete])
94
- expect(Pathname.new('page_objects/components/sidebar.rb')).not_to be_file
95
- end
96
72
  end
97
73
 
98
74
  # --- Feature 10: Config-aware templates ---
@@ -149,163 +125,4 @@ RSpec.describe 'Scaffolding features' do
149
125
  end
150
126
  end
151
127
 
152
- # --- Feature 1: Selective --with ---
153
-
154
- describe 'selective scaffolding (--with)' do
155
- it 'generates only selected components' do
156
- scaffold.new.invoke(:scaffold, nil, %w[checkout --with page])
157
- expect(Pathname.new('page_objects/pages/checkout.rb')).to be_file
158
- expect(Pathname.new('spec/checkout_page_spec.rb')).not_to be_file
159
- end
160
-
161
- it 'generates page and helper with --with' do
162
- scaffold.new.invoke(:scaffold, nil, %w[checkout --with page helper])
163
- expect(Pathname.new('page_objects/pages/checkout.rb')).to be_file
164
- expect(Pathname.new('helpers/checkout_helper.rb')).to be_file
165
- end
166
-
167
- it 'generates model data with --with model' do
168
- scaffold.new.invoke(:scaffold, nil, %w[user --with model])
169
- expect(Pathname.new('models/data/user.yml')).to be_file
170
- end
171
- end
172
-
173
- # --- Feature 5: CRUD ---
174
-
175
- describe 'CRUD scaffolding' do
176
- it 'generates CRUD pages' do
177
- scaffold.new.invoke(:scaffold, nil, %w[user --crud])
178
- %w[user_list user_create user_detail user_edit].each do |page|
179
- expect(Pathname.new("page_objects/pages/#{page}.rb")).to be_file
180
- end
181
- end
182
-
183
- it 'generates CRUD specs' do
184
- scaffold.new.invoke(:scaffold, nil, %w[user --crud])
185
- %w[user_list user_create user_detail user_edit].each do |page|
186
- expect(Pathname.new("spec/#{page}_page_spec.rb")).to be_file
187
- end
188
- end
189
-
190
- it 'generates model data file' do
191
- scaffold.new.invoke(:scaffold, nil, %w[user --crud])
192
- expect(Pathname.new('models/data/user.yml')).to be_file
193
- end
194
-
195
- it 'model data has expected structure' do
196
- scaffold.new.invoke(:scaffold, nil, %w[user --crud])
197
- content = File.read('models/data/user.yml')
198
- expect(content).to include('default:')
199
- expect(content).to include('valid:')
200
- expect(content).to include('invalid:')
201
- end
202
- end
203
-
204
- # --- Feature: Destroy command ---
205
-
206
- describe 'destroy command' do
207
- it 'removes page and spec files' do
208
- scaffold.new.invoke(:scaffold, nil, %w[login])
209
- expect(Pathname.new('page_objects/pages/login.rb')).to be_file
210
- expect(Pathname.new('spec/login_page_spec.rb')).to be_file
211
-
212
- scaffold.new.invoke(:destroy, nil, %w[login])
213
- expect(Pathname.new('page_objects/pages/login.rb')).not_to be_file
214
- expect(Pathname.new('spec/login_page_spec.rb')).not_to be_file
215
- end
216
-
217
- it 'removes only specified components with --with' do # rubocop:disable RSpec/MultipleExpectations
218
- scaffold.new.invoke(:scaffold, nil, %w[checkout --with page spec helper])
219
- expect(Pathname.new('page_objects/pages/checkout.rb')).to be_file
220
- expect(Pathname.new('spec/checkout_page_spec.rb')).to be_file
221
- expect(Pathname.new('helpers/checkout_helper.rb')).to be_file
222
-
223
- scaffold.new.invoke(:destroy, nil, %w[checkout --with page helper])
224
- expect(Pathname.new('page_objects/pages/checkout.rb')).not_to be_file
225
- expect(Pathname.new('helpers/checkout_helper.rb')).not_to be_file
226
- expect(Pathname.new('spec/checkout_page_spec.rb')).to be_file
227
- end
228
-
229
- it 'destroys multiple names at once' do
230
- scaffold.new.invoke(:scaffold, nil, %w[login dashboard])
231
- scaffold.new.invoke(:destroy, nil, %w[login dashboard])
232
- expect(Pathname.new('page_objects/pages/login.rb')).not_to be_file
233
- expect(Pathname.new('page_objects/pages/dashboard.rb')).not_to be_file
234
- end
235
- end
236
-
237
- # --- Feature: Template overrides ---
238
-
239
- describe 'template overrides' do
240
- before do
241
- FileUtils.mkdir_p('.ruby_raider/templates')
242
- end
243
-
244
- after do
245
- FileUtils.rm_rf('.ruby_raider')
246
- end
247
-
248
- it 'uses override template when present' do
249
- File.write('.ruby_raider/templates/page_object.tt', <<~ERB)
250
- # Custom page for <%= class_name %>
251
- class <%= page_class_name %> < Page
252
- # CUSTOM OVERRIDE
253
- end
254
- ERB
255
-
256
- Scaffolding.new(%w[widget]).generate_page
257
- content = File.read('page_objects/pages/widget.rb')
258
- expect(content).to include('CUSTOM OVERRIDE')
259
- expect(content).to include('class WidgetPage < Page')
260
- end
261
-
262
- it 'falls back to default template when no override exists' do
263
- Scaffolding.new(%w[gadget]).generate_page
264
- content = File.read('page_objects/pages/gadget.rb')
265
- expect(content).not_to include('CUSTOM OVERRIDE')
266
- expect(content).to include('class GadgetPage < Page')
267
- end
268
- end
269
-
270
- # --- Feature 3: Spec from page ---
271
-
272
- describe 'spec from page (--from)' do
273
- before do
274
- File.write('page_objects/pages/login.rb', <<~RUBY)
275
- class LoginPage < Page
276
- def login(username, password)
277
- username_field.send_keys username
278
- end
279
-
280
- def welcome_message
281
- driver.find_element(css: '.welcome').text
282
- end
283
-
284
- private
285
-
286
- def username_field
287
- driver.find_element(id: 'username')
288
- end
289
- end
290
- RUBY
291
- end
292
-
293
- it 'generates spec with method stubs' do
294
- scaffold.new.invoke(:spec, nil, %w[login --from page_objects/pages/login.rb])
295
- expect(Pathname.new('spec/login_spec.rb')).to be_file
296
- end
297
-
298
- it 'spec includes describe blocks for each public method' do
299
- scaffold.new.invoke(:spec, nil, %w[login --from page_objects/pages/login.rb])
300
- content = File.read('spec/login_spec.rb')
301
- expect(content).to include("describe '#login'")
302
- expect(content).to include("describe '#welcome_message'")
303
- end
304
-
305
- it 'spec does not include private methods' do
306
- scaffold.new.invoke(:spec, nil, %w[login --from page_objects/pages/login.rb])
307
- content = File.read('spec/login_spec.rb')
308
- expect(content).not_to include('username_field')
309
- end
310
- end
311
128
  end
@@ -3,7 +3,7 @@
3
3
  require_relative '../../lib/ruby_raider'
4
4
  require_relative 'support/system_test_helper'
5
5
 
6
- FRAMEWORKS = %w[cucumber rspec minitest].freeze
6
+ FRAMEWORKS = %w[cucumber rspec].freeze
7
7
 
8
8
  describe 'Selenium based frameworks' do
9
9
  include SystemTestHelper
@@ -36,7 +36,4 @@ describe 'Selenium based frameworks' do
36
36
  include_examples 'runs tests successfully', 'cucumber'
37
37
  end
38
38
 
39
- context 'with minitest' do
40
- include_examples 'runs tests successfully', 'minitest'
41
- end
42
39
  end
@@ -6,7 +6,6 @@ module SystemTestHelper
6
6
  def test_command_for(framework)
7
7
  case framework
8
8
  when 'cucumber' then 'bundle exec cucumber features --format pretty'
9
- when 'minitest' then 'bundle exec ruby -Itest test/test_login_page.rb'
10
9
  else 'bundle exec rspec spec --format documentation'
11
10
  end
12
11
  end
@@ -3,7 +3,7 @@
3
3
  require_relative '../../lib/ruby_raider'
4
4
  require_relative 'support/system_test_helper'
5
5
 
6
- FRAMEWORKS = %w[cucumber rspec minitest].freeze unless defined?(FRAMEWORKS)
6
+ FRAMEWORKS = %w[cucumber rspec].freeze unless defined?(FRAMEWORKS)
7
7
 
8
8
  describe 'Watir based frameworks' do
9
9
  include SystemTestHelper
@@ -36,7 +36,4 @@ describe 'Watir based frameworks' do
36
36
  include_examples 'runs tests successfully', 'cucumber'
37
37
  end
38
38
 
39
- context 'with minitest' do
40
- include_examples 'runs tests successfully', 'minitest'
41
- end
42
39
  end
@@ -31,13 +31,6 @@ RSpec.describe 'Headless config support in driver templates' do
31
31
  end
32
32
  end
33
33
 
34
- describe 'capybara helper template' do
35
- it 'checks config headless key' do
36
- content = File.read(File.expand_path('../../lib/generators/templates/helpers/capybara_helper.tt', __dir__))
37
- expect(content).to include("config['headless']")
38
- end
39
- end
40
-
41
34
  describe 'browser helper template (watir)' do
42
35
  it 'checks config headless key' do
43
36
  content = File.read(File.expand_path('../../lib/generators/templates/helpers/browser_helper.tt', __dir__))