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.
- checksums.yaml +4 -4
- data/.github/workflows/e2e_tests.yml +0 -17
- data/.github/workflows/system_tests.yml +0 -22
- data/README.md +8 -62
- data/lib/commands/scaffolding_commands.rb +1 -192
- data/lib/commands/utility_commands.rb +0 -43
- data/lib/generators/automation/templates/login.tt +1 -9
- data/lib/generators/automation/templates/page.tt +1 -7
- data/lib/generators/automation/templates/partials/initialize_selector.tt +1 -3
- data/lib/generators/automation/templates/partials/visit_method.tt +2 -6
- data/lib/generators/common_generator.rb +0 -6
- data/lib/generators/cucumber/cucumber_generator.rb +0 -24
- data/lib/generators/cucumber/templates/accessibility_steps.tt +2 -6
- data/lib/generators/cucumber/templates/cucumber.tt +0 -7
- data/lib/generators/cucumber/templates/env.tt +1 -3
- data/lib/generators/cucumber/templates/partials/appium_env.tt +1 -6
- data/lib/generators/cucumber/templates/partials/selenium_env.tt +0 -5
- data/lib/generators/cucumber/templates/partials/watir_env.tt +0 -5
- data/lib/generators/cucumber/templates/partials/web_steps.tt +4 -4
- data/lib/generators/cucumber/templates/world.tt +1 -3
- data/lib/generators/generator.rb +2 -46
- data/lib/generators/helper_generator.rb +4 -42
- data/lib/generators/infrastructure/templates/github.tt +2 -2
- data/lib/generators/infrastructure/templates/github_appium.tt +2 -6
- data/lib/generators/invoke_generators.rb +4 -25
- data/lib/generators/menu_generator.rb +10 -100
- data/lib/generators/rspec/rspec_generator.rb +0 -11
- data/lib/generators/rspec/templates/accessibility_spec.tt +2 -6
- data/lib/generators/rspec/templates/spec.tt +6 -8
- data/lib/generators/templates/common/gemfile.tt +0 -26
- data/lib/generators/templates/common/git_ignore.tt +0 -2
- data/lib/generators/templates/common/partials/mobile_config.tt +0 -4
- data/lib/generators/templates/common/partials/web_config.tt +0 -4
- data/lib/generators/templates/common/rakefile.tt +0 -9
- data/lib/generators/templates/common/read_me.tt +4 -10
- data/lib/generators/templates/helpers/allure_helper.tt +0 -10
- data/lib/generators/templates/helpers/partials/debug_diagnostics.tt +1 -3
- data/lib/generators/templates/helpers/partials/debug_start.tt +1 -3
- data/lib/generators/templates/helpers/partials/quit_driver.tt +1 -3
- data/lib/generators/templates/helpers/partials/screenshot.tt +1 -3
- data/lib/generators/templates/helpers/spec_helper.tt +2 -39
- data/lib/ruby_raider.rb +2 -50
- data/lib/scaffolding/project_detector.rb +2 -9
- data/lib/scaffolding/scaffolding.rb +0 -109
- data/lib/scaffolding/templates/component.tt +1 -4
- data/lib/scaffolding/templates/page_object.tt +0 -10
- data/lib/scaffolding/templates/spec.tt +2 -6
- data/lib/scaffolding/templates/steps.tt +0 -2
- data/lib/utilities/utilities.rb +23 -29
- data/lib/version +1 -1
- data/sig/commands/scaffolding_commands.rbs +0 -12
- data/sig/commands/utility_commands.rbs +0 -6
- data/sig/generators/cucumber/cucumber_generator.rbs +0 -4
- data/sig/generators/generator.rbs +0 -11
- data/sig/generators/helper_generator.rbs +1 -5
- data/sig/generators/invoke_generators.rbs +1 -2
- data/sig/generators/menu_generator.rbs +2 -6
- data/sig/generators/rspec/rspec_generator.rbs +0 -2
- data/sig/ruby_raider.rbs +1 -3
- data/sig/scaffolding/project_detector.rbs +0 -1
- data/sig/scaffolding/scaffolding.rbs +0 -23
- data/sig/utilities/utilities.rbs +0 -4
- data/spec/commands/raider_commands_spec.rb +0 -61
- data/spec/integration/commands/browser_update_after_creation_spec.rb +123 -0
- data/spec/integration/commands/scaffolding_commands_spec.rb +0 -20
- data/spec/integration/commands/utility_commands_spec.rb +5 -5
- data/spec/integration/content/ci_content_spec.rb +6 -61
- data/spec/integration/content/common_content_spec.rb +0 -64
- data/spec/integration/content/config_content_spec.rb +1 -51
- data/spec/integration/content/content_helper.rb +2 -2
- data/spec/integration/content/gemfile_content_spec.rb +0 -71
- data/spec/integration/content/helper_content_spec.rb +4 -240
- data/spec/integration/content/page_content_spec.rb +0 -89
- data/spec/integration/content/syntax_validation_spec.rb +2 -2
- data/spec/integration/content/test_content_spec.rb +0 -119
- data/spec/integration/end_to_end_features_spec.rb +13 -411
- data/spec/integration/end_to_end_spec.rb +0 -96
- data/spec/integration/generators/axe_addon_spec.rb +2 -52
- data/spec/integration/generators/common_generator_spec.rb +1 -13
- data/spec/integration/generators/config_features_spec.rb +3 -81
- data/spec/integration/generators/debug_helper_spec.rb +0 -20
- data/spec/integration/generators/github_generator_spec.rb +5 -15
- data/spec/integration/generators/helpers_generator_spec.rb +0 -37
- data/spec/integration/scaffolding_e2e_spec.rb +2 -237
- data/spec/integration/settings_helper.rb +1 -3
- data/spec/integration/spec_helper.rb +6 -11
- data/spec/menus/menu_generator_spec.rb +4 -107
- data/spec/scaffolding/scaffold_project_detector_spec.rb +4 -26
- data/spec/scaffolding/scaffolding_features_spec.rb +0 -183
- data/spec/system/selenium_spec.rb +1 -4
- data/spec/system/support/system_test_helper.rb +0 -1
- data/spec/system/watir_spec.rb +1 -4
- data/spec/utilities/headless_config_spec.rb +0 -7
- metadata +3 -97
- data/lib/adopter/adopt_menu.rb +0 -146
- data/lib/adopter/converters/base_converter.rb +0 -84
- data/lib/adopter/converters/identity_converter.rb +0 -53
- data/lib/adopter/migration_plan.rb +0 -74
- data/lib/adopter/migrator.rb +0 -96
- data/lib/adopter/plan_builder.rb +0 -275
- data/lib/adopter/project_analyzer.rb +0 -252
- data/lib/adopter/project_detector.rb +0 -157
- data/lib/generators/cucumber/templates/partials/capybara_env.tt +0 -38
- data/lib/generators/cucumber/templates/partials/capybara_world.tt +0 -6
- data/lib/generators/cucumber/templates/performance_feature.tt +0 -5
- data/lib/generators/cucumber/templates/performance_steps.tt +0 -17
- data/lib/generators/cucumber/templates/visual_feature.tt +0 -5
- data/lib/generators/cucumber/templates/visual_steps.tt +0 -19
- data/lib/generators/infrastructure/gitlab_generator.rb +0 -11
- data/lib/generators/infrastructure/templates/gitlab.tt +0 -46
- data/lib/generators/minitest/minitest_generator.rb +0 -35
- data/lib/generators/minitest/templates/accessibility_test.tt +0 -26
- data/lib/generators/minitest/templates/performance_test.tt +0 -18
- data/lib/generators/minitest/templates/test.tt +0 -64
- data/lib/generators/minitest/templates/visual_test.tt +0 -23
- data/lib/generators/rspec/templates/performance_spec.tt +0 -18
- data/lib/generators/rspec/templates/visual_spec.tt +0 -20
- data/lib/generators/templates/helpers/capybara_helper.tt +0 -32
- data/lib/generators/templates/helpers/performance_helper.tt +0 -57
- data/lib/generators/templates/helpers/visual_helper.tt +0 -58
- data/lib/llm/client.rb +0 -79
- data/lib/llm/config.rb +0 -57
- data/lib/llm/prompts.rb +0 -84
- data/lib/llm/provider.rb +0 -27
- data/lib/llm/providers/anthropic_provider.rb +0 -43
- data/lib/llm/providers/ollama_provider.rb +0 -56
- data/lib/llm/providers/openai_provider.rb +0 -42
- data/lib/llm/response_parser.rb +0 -67
- data/lib/plugin/plugin.rb +0 -111
- data/lib/plugin/plugin_exposer.rb +0 -55
- data/lib/scaffolding/crud_generator.rb +0 -94
- data/lib/scaffolding/dry_run_presenter.rb +0 -16
- data/lib/scaffolding/page_introspector.rb +0 -45
- data/lib/scaffolding/scaffold_menu.rb +0 -103
- data/lib/scaffolding/templates/page_from_url.tt +0 -75
- data/lib/scaffolding/templates/spec_from_page.tt +0 -31
- data/lib/scaffolding/templates/spec_from_url.tt +0 -46
- data/lib/scaffolding/url_analyzer.rb +0 -179
- data/sig/adopter/adopt_menu.rbs +0 -25
- data/sig/adopter/converters/base_converter.rbs +0 -23
- data/sig/adopter/converters/identity_converter.rbs +0 -16
- data/sig/adopter/migration_plan.rbs +0 -34
- data/sig/adopter/migrator.rbs +0 -21
- data/sig/adopter/plan_builder.rbs +0 -38
- data/sig/adopter/project_analyzer.rbs +0 -39
- data/sig/adopter/project_detector.rbs +0 -26
- data/sig/generators/infrastructure/gitlab_generator.rbs +0 -4
- data/sig/generators/minitest/minitest_generator.rbs +0 -8
- data/sig/llm/client.rbs +0 -15
- data/sig/llm/config.rbs +0 -20
- data/sig/llm/prompts.rbs +0 -8
- data/sig/llm/provider.rbs +0 -12
- data/sig/llm/providers/anthropic_provider.rbs +0 -16
- data/sig/llm/providers/ollama_provider.rbs +0 -18
- data/sig/llm/providers/openai_provider.rbs +0 -16
- data/sig/llm/response_parser.rbs +0 -13
- data/sig/plugin/plugin.rbs +0 -24
- data/sig/plugin/plugin_exposer.rbs +0 -20
- data/sig/scaffolding/crud_generator.rbs +0 -16
- data/sig/scaffolding/dry_run_presenter.rbs +0 -4
- data/sig/scaffolding/page_introspector.rbs +0 -14
- data/sig/scaffolding/scaffold_menu.rbs +0 -18
- data/sig/scaffolding/url_analyzer.rbs +0 -28
- data/spec/adopter/adopt_menu_spec.rb +0 -176
- data/spec/adopter/converters/identity_converter_spec.rb +0 -145
- data/spec/adopter/migration_plan_spec.rb +0 -113
- data/spec/adopter/migrator_spec.rb +0 -277
- data/spec/adopter/plan_builder_spec.rb +0 -298
- data/spec/adopter/project_analyzer_spec.rb +0 -337
- data/spec/adopter/project_detector_spec.rb +0 -295
- data/spec/generators/generator_spec.rb +0 -23
- data/spec/integration/content/reporter_content_spec.rb +0 -236
- data/spec/integration/content/skip_flags_content_spec.rb +0 -206
- data/spec/integration/generators/gitlab_generator_spec.rb +0 -38
- data/spec/integration/generators/lighthouse_addon_spec.rb +0 -132
- data/spec/integration/generators/minitest_generator_spec.rb +0 -64
- data/spec/integration/generators/reporter_spec.rb +0 -159
- data/spec/integration/generators/skip_flags_spec.rb +0 -134
- data/spec/integration/generators/visual_addon_spec.rb +0 -148
- data/spec/llm/client_spec.rb +0 -79
- data/spec/llm/config_spec.rb +0 -92
- data/spec/llm/prompts_spec.rb +0 -49
- data/spec/llm/response_parser_spec.rb +0 -92
- data/spec/menus/adopter_adopt_menu_spec.rb +0 -97
- data/spec/scaffolding/page_introspector_spec.rb +0 -82
- data/spec/scaffolding/url_analyzer_spec.rb +0 -110
- data/spec/system/adopt_matrix_spec.rb +0 -537
- data/spec/system/adopt_spec.rb +0 -225
- 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',
|
|
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
|
|
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:
|
|
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, '
|
|
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 '
|
|
64
|
-
FileUtils.mkdir_p('
|
|
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
|
|
72
|
-
expect(described_class.detect_framework).to eq('
|
|
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
|
|
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
|
data/spec/system/watir_spec.rb
CHANGED
|
@@ -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
|
|
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__))
|