ruby_raider 2.0.0 → 3.0.1

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 (228) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/e2e_tests.yml +58 -0
  3. data/.github/workflows/steep.yml +21 -0
  4. data/.gitignore +1 -1
  5. data/.reek.yml +46 -4
  6. data/.ruby-version +1 -1
  7. data/README.md +138 -77
  8. data/Steepfile +22 -0
  9. data/assets/ruby_raider_logo.svg +51 -0
  10. data/lib/adopter/adopt_menu.rb +11 -15
  11. data/lib/adopter/converters/base_converter.rb +1 -2
  12. data/lib/adopter/converters/identity_converter.rb +3 -6
  13. data/lib/adopter/migration_plan.rb +0 -1
  14. data/lib/adopter/plan_builder.rb +2 -5
  15. data/lib/adopter/project_analyzer.rb +1 -5
  16. data/lib/adopter/project_detector.rb +3 -5
  17. data/lib/commands/adopt_commands.rb +0 -1
  18. data/lib/commands/plugin_commands.rb +0 -2
  19. data/lib/commands/scaffolding_commands.rb +246 -38
  20. data/lib/commands/utility_commands.rb +92 -3
  21. data/lib/generators/automation/automation_generator.rb +0 -7
  22. data/lib/generators/automation/templates/partials/element.tt +1 -1
  23. data/lib/generators/automation/templates/partials/initialize_selector.tt +0 -7
  24. data/lib/generators/automation/templates/partials/url_methods.tt +0 -1
  25. data/lib/generators/common_generator.rb +12 -0
  26. data/lib/generators/cucumber/cucumber_generator.rb +36 -0
  27. data/lib/generators/cucumber/templates/accessibility_feature.tt +5 -0
  28. data/lib/generators/cucumber/templates/accessibility_steps.tt +21 -0
  29. data/lib/generators/cucumber/templates/cucumber.tt +8 -1
  30. data/lib/generators/cucumber/templates/feature.tt +0 -4
  31. data/lib/generators/cucumber/templates/partials/appium_env.tt +5 -0
  32. data/lib/generators/cucumber/templates/partials/capybara_env.tt +19 -1
  33. data/lib/generators/cucumber/templates/partials/driver_world.tt +1 -4
  34. data/lib/generators/cucumber/templates/partials/selenium_env.tt +22 -35
  35. data/lib/generators/cucumber/templates/partials/watir_env.tt +20 -1
  36. data/lib/generators/cucumber/templates/partials/web_steps.tt +6 -12
  37. data/lib/generators/cucumber/templates/performance_feature.tt +5 -0
  38. data/lib/generators/cucumber/templates/performance_steps.tt +17 -0
  39. data/lib/generators/cucumber/templates/visual_feature.tt +5 -0
  40. data/lib/generators/cucumber/templates/visual_steps.tt +19 -0
  41. data/lib/generators/generator.rb +38 -7
  42. data/lib/generators/helper_generator.rb +24 -7
  43. data/lib/generators/infrastructure/templates/github.tt +1 -1
  44. data/lib/generators/infrastructure/templates/github_appium.tt +2 -2
  45. data/lib/generators/infrastructure/templates/gitlab.tt +1 -1
  46. data/lib/generators/invoke_generators.rb +42 -9
  47. data/lib/generators/menu_generator.rb +120 -11
  48. data/lib/generators/minitest/minitest_generator.rb +16 -4
  49. data/lib/generators/minitest/templates/accessibility_test.tt +26 -0
  50. data/lib/generators/minitest/templates/performance_test.tt +18 -0
  51. data/lib/generators/minitest/templates/test.tt +5 -34
  52. data/lib/generators/minitest/templates/visual_test.tt +23 -0
  53. data/lib/generators/rspec/rspec_generator.rb +16 -4
  54. data/lib/generators/rspec/templates/accessibility_spec.tt +25 -0
  55. data/lib/generators/rspec/templates/performance_spec.tt +18 -0
  56. data/lib/generators/rspec/templates/spec.tt +5 -35
  57. data/lib/generators/rspec/templates/visual_spec.tt +20 -0
  58. data/lib/generators/template_renderer/partial_cache.rb +11 -1
  59. data/lib/generators/template_renderer/partial_resolver.rb +17 -10
  60. data/lib/generators/template_renderer.rb +17 -1
  61. data/lib/generators/templates/common/gemfile.tt +21 -6
  62. data/lib/generators/templates/common/git_ignore.tt +6 -1
  63. data/lib/generators/templates/common/partials/mobile_config.tt +5 -1
  64. data/lib/generators/templates/common/partials/web_config.tt +16 -7
  65. data/lib/generators/templates/common/rakefile.tt +36 -0
  66. data/lib/generators/templates/common/read_me.tt +41 -91
  67. data/lib/generators/templates/common/rspec.tt +3 -0
  68. data/lib/generators/templates/common/ruby_version.tt +1 -0
  69. data/lib/generators/templates/helpers/allure_helper.tt +11 -0
  70. data/lib/generators/templates/helpers/browser_helper.tt +13 -3
  71. data/lib/generators/templates/helpers/capybara_helper.tt +6 -2
  72. data/lib/generators/templates/helpers/debug_helper.tt +190 -0
  73. data/lib/generators/templates/helpers/driver_helper.tt +2 -10
  74. data/lib/generators/templates/helpers/partials/appium_driver.tt +0 -2
  75. data/lib/generators/templates/helpers/partials/debug_diagnostics.tt +7 -0
  76. data/lib/generators/templates/helpers/partials/debug_start.tt +7 -0
  77. data/lib/generators/templates/helpers/partials/driver_and_options.tt +1 -3
  78. data/lib/generators/templates/helpers/partials/selenium_driver.tt +9 -8
  79. data/lib/generators/templates/helpers/partials/video_start.tt +9 -0
  80. data/lib/generators/templates/helpers/partials/video_stop.tt +4 -0
  81. data/lib/generators/templates/helpers/performance_helper.tt +57 -0
  82. data/lib/generators/templates/helpers/spec_helper.tt +57 -8
  83. data/lib/generators/templates/helpers/test_helper.tt +69 -1
  84. data/lib/generators/templates/helpers/video_helper.tt +270 -0
  85. data/lib/generators/templates/helpers/visual_helper.tt +39 -46
  86. data/lib/llm/client.rb +79 -0
  87. data/lib/llm/config.rb +57 -0
  88. data/lib/llm/prompts.rb +84 -0
  89. data/lib/llm/provider.rb +27 -0
  90. data/lib/llm/providers/anthropic_provider.rb +43 -0
  91. data/lib/llm/providers/ollama_provider.rb +56 -0
  92. data/lib/llm/providers/openai_provider.rb +42 -0
  93. data/lib/llm/response_parser.rb +67 -0
  94. data/lib/plugin/plugin.rb +22 -20
  95. data/lib/plugin/plugin_exposer.rb +16 -38
  96. data/lib/ruby_raider.rb +47 -12
  97. data/lib/scaffolding/crud_generator.rb +94 -0
  98. data/lib/scaffolding/dry_run_presenter.rb +16 -0
  99. data/lib/scaffolding/name_normalizer.rb +63 -0
  100. data/lib/scaffolding/page_introspector.rb +45 -0
  101. data/lib/scaffolding/project_detector.rb +96 -0
  102. data/lib/scaffolding/scaffold_menu.rb +103 -0
  103. data/lib/scaffolding/scaffolding.rb +158 -11
  104. data/lib/scaffolding/templates/component.tt +30 -0
  105. data/lib/scaffolding/templates/feature.tt +4 -4
  106. data/lib/scaffolding/templates/helper.tt +15 -1
  107. data/lib/scaffolding/templates/page_from_url.tt +75 -0
  108. data/lib/scaffolding/templates/page_object.tt +50 -1
  109. data/lib/scaffolding/templates/spec.tt +33 -2
  110. data/lib/scaffolding/templates/spec_from_page.tt +31 -0
  111. data/lib/scaffolding/templates/spec_from_url.tt +46 -0
  112. data/lib/scaffolding/templates/steps.tt +17 -5
  113. data/lib/scaffolding/url_analyzer.rb +179 -0
  114. data/lib/utilities/desktop_downloader.rb +177 -0
  115. data/lib/utilities/logo.rb +83 -0
  116. data/lib/utilities/utilities.rb +61 -20
  117. data/lib/version +1 -1
  118. data/ruby_raider.gemspec +1 -0
  119. data/sig/adopter/adopt_menu.rbs +25 -0
  120. data/sig/adopter/converters/base_converter.rbs +23 -0
  121. data/sig/adopter/converters/identity_converter.rbs +16 -0
  122. data/sig/adopter/migration_plan.rbs +34 -0
  123. data/sig/adopter/migrator.rbs +21 -0
  124. data/sig/adopter/plan_builder.rbs +38 -0
  125. data/sig/adopter/project_analyzer.rbs +39 -0
  126. data/sig/adopter/project_detector.rbs +26 -0
  127. data/sig/commands/adopt_commands.rbs +8 -0
  128. data/sig/commands/loaded_commands.rbs +5 -0
  129. data/sig/commands/plugin_commands.rbs +9 -0
  130. data/sig/commands/scaffolding_commands.rbs +28 -0
  131. data/sig/commands/utility_commands.rbs +21 -0
  132. data/sig/generators/automation/automation_generator.rbs +20 -0
  133. data/sig/generators/common_generator.rbs +12 -0
  134. data/sig/generators/cucumber/cucumber_generator.rbs +16 -0
  135. data/sig/generators/generator.rbs +40 -0
  136. data/sig/generators/helper_generator.rbs +18 -0
  137. data/sig/generators/infrastructure/github_generator.rbs +5 -0
  138. data/sig/generators/infrastructure/gitlab_generator.rbs +4 -0
  139. data/sig/generators/invoke_generators.rbs +10 -0
  140. data/sig/generators/menu_generator.rbs +29 -0
  141. data/sig/generators/minitest/minitest_generator.rbs +8 -0
  142. data/sig/generators/rspec/rspec_generator.rbs +8 -0
  143. data/sig/generators/template_renderer/partial_cache.rbs +20 -0
  144. data/sig/generators/template_renderer/partial_resolver.rbs +20 -0
  145. data/sig/generators/template_renderer/template_error.rbs +19 -0
  146. data/sig/generators/template_renderer.rbs +10 -0
  147. data/sig/llm/client.rbs +15 -0
  148. data/sig/llm/config.rbs +20 -0
  149. data/sig/llm/prompts.rbs +8 -0
  150. data/sig/llm/provider.rbs +12 -0
  151. data/sig/llm/providers/anthropic_provider.rbs +16 -0
  152. data/sig/llm/providers/ollama_provider.rbs +18 -0
  153. data/sig/llm/providers/openai_provider.rbs +16 -0
  154. data/sig/llm/response_parser.rbs +13 -0
  155. data/sig/plugin/plugin.rbs +24 -0
  156. data/sig/plugin/plugin_exposer.rbs +20 -0
  157. data/sig/ruby_raider.rbs +15 -0
  158. data/sig/scaffolding/crud_generator.rbs +16 -0
  159. data/sig/scaffolding/dry_run_presenter.rbs +4 -0
  160. data/sig/scaffolding/name_normalizer.rbs +17 -0
  161. data/sig/scaffolding/page_introspector.rbs +14 -0
  162. data/sig/scaffolding/project_detector.rbs +14 -0
  163. data/sig/scaffolding/scaffold_menu.rbs +18 -0
  164. data/sig/scaffolding/scaffolding.rbs +55 -0
  165. data/sig/scaffolding/url_analyzer.rbs +28 -0
  166. data/sig/utilities/desktop_downloader.rbs +23 -0
  167. data/sig/utilities/logger.rbs +13 -0
  168. data/sig/utilities/logo.rbs +16 -0
  169. data/sig/utilities/utilities.rbs +30 -0
  170. data/sig/vendor/thor.rbs +34 -0
  171. data/sig/vendor/tty_prompt.rbs +15 -0
  172. data/spec/adopter/adopt_menu_spec.rb +12 -12
  173. data/spec/adopter/migration_plan_spec.rb +1 -1
  174. data/spec/adopter/migrator_spec.rb +2 -2
  175. data/spec/adopter/project_detector_spec.rb +1 -1
  176. data/spec/commands/raider_commands_spec.rb +129 -0
  177. data/spec/commands/scaffolding_commands_spec.rb +22 -0
  178. data/spec/generators/generator_spec.rb +23 -0
  179. data/spec/integration/commands/scaffolding_commands_spec.rb +1 -1
  180. data/spec/integration/commands/utility_commands_spec.rb +29 -9
  181. data/spec/integration/content/ci_content_spec.rb +119 -0
  182. data/spec/integration/content/common_content_spec.rb +288 -0
  183. data/spec/integration/content/config_content_spec.rb +175 -0
  184. data/spec/integration/content/content_helper.rb +32 -0
  185. data/spec/integration/content/gemfile_content_spec.rb +209 -0
  186. data/spec/integration/content/helper_content_spec.rb +485 -0
  187. data/spec/integration/content/page_content_spec.rb +259 -0
  188. data/spec/integration/content/reporter_content_spec.rb +236 -0
  189. data/spec/integration/content/skip_flags_content_spec.rb +206 -0
  190. data/spec/integration/content/syntax_validation_spec.rb +30 -0
  191. data/spec/integration/content/test_content_spec.rb +266 -0
  192. data/spec/integration/end_to_end_features_spec.rb +690 -0
  193. data/spec/integration/end_to_end_spec.rb +52 -16
  194. data/spec/integration/generators/automation_generator_spec.rb +0 -12
  195. data/spec/integration/generators/axe_addon_spec.rb +150 -0
  196. data/spec/integration/generators/common_generator_spec.rb +12 -13
  197. data/spec/integration/generators/config_features_spec.rb +155 -0
  198. data/spec/integration/generators/debug_helper_spec.rb +68 -0
  199. data/spec/integration/generators/helpers_generator_spec.rb +0 -12
  200. data/spec/integration/generators/lighthouse_addon_spec.rb +132 -0
  201. data/spec/integration/generators/minitest_generator_spec.rb +0 -6
  202. data/spec/integration/generators/reporter_spec.rb +159 -0
  203. data/spec/integration/generators/skip_flags_spec.rb +134 -0
  204. data/spec/integration/generators/visual_addon_spec.rb +148 -0
  205. data/spec/integration/scaffolding_e2e_spec.rb +775 -0
  206. data/spec/integration/settings_helper.rb +0 -3
  207. data/spec/integration/spec_helper.rb +30 -13
  208. data/spec/llm/client_spec.rb +79 -0
  209. data/spec/llm/config_spec.rb +92 -0
  210. data/spec/llm/prompts_spec.rb +49 -0
  211. data/spec/llm/response_parser_spec.rb +92 -0
  212. data/spec/menus/adopter_adopt_menu_spec.rb +97 -0
  213. data/spec/menus/menu_generator_spec.rb +263 -0
  214. data/spec/scaffolding/name_normalizer_spec.rb +113 -0
  215. data/spec/scaffolding/page_introspector_spec.rb +82 -0
  216. data/spec/scaffolding/scaffold_project_detector_spec.rb +142 -0
  217. data/spec/scaffolding/scaffolding_features_spec.rb +311 -0
  218. data/spec/scaffolding/url_analyzer_spec.rb +110 -0
  219. data/spec/system/adopt_matrix_spec.rb +537 -0
  220. data/spec/system/adopt_spec.rb +225 -0
  221. data/spec/system/support/system_test_helper.rb +0 -2
  222. data/spec/utilities/desktop_downloader_spec.rb +92 -0
  223. data/spec/utilities/headless_config_spec.rb +89 -0
  224. data/spec/utilities/utilities_spec.rb +105 -0
  225. metadata +154 -5
  226. data/lib/generators/automation/templates/visual_options.tt +0 -16
  227. data/lib/generators/templates/helpers/partials/axe_driver.tt +0 -10
  228. data/lib/generators/templates/helpers/visual_spec_helper.tt +0 -35
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require_relative '../../../lib/generators/invoke_generators'
5
+ require_relative '../settings_helper'
6
+
7
+ describe 'Lighthouse addon generation' do
8
+ include InvokeGenerators
9
+ include SettingsHelper
10
+
11
+ # rubocop:disable RSpec/BeforeAfterAll, RSpec/InstanceVariable
12
+ before(:all) do
13
+ @lighthouse_projects = []
14
+ %w[rspec cucumber minitest].each do |framework|
15
+ %w[selenium watir capybara].each do |automation|
16
+ name = "lighthouse_#{framework}_#{automation}"
17
+ @lighthouse_projects << { name:, framework:, automation: }
18
+ InvokeGenerators.generate_framework(
19
+ automation:, framework:, name:, performance: true
20
+ )
21
+ end
22
+ end
23
+ end
24
+
25
+ after(:all) do
26
+ @lighthouse_projects.each { |p| FileUtils.rm_rf(p[:name]) }
27
+ end
28
+ # rubocop:enable RSpec/BeforeAfterAll, RSpec/InstanceVariable
29
+
30
+ context 'with rspec and selenium' do
31
+ let(:name) { 'lighthouse_rspec_selenium' }
32
+
33
+ it 'creates performance_helper.rb' do
34
+ expect(File).to exist("#{name}/helpers/performance_helper.rb")
35
+ end
36
+
37
+ it 'creates performance_spec.rb' do
38
+ expect(File).to exist("#{name}/spec/performance_spec.rb")
39
+ end
40
+
41
+ it 'performance helper has valid Ruby syntax' do
42
+ content = File.read("#{name}/helpers/performance_helper.rb")
43
+ expect { RubyVM::InstructionSequence.compile(content) }.not_to raise_error
44
+ end
45
+
46
+ it 'performance spec has valid Ruby syntax' do
47
+ content = File.read("#{name}/spec/performance_spec.rb")
48
+ expect { RubyVM::InstructionSequence.compile(content) }.not_to raise_error
49
+ end
50
+ end
51
+
52
+ context 'with cucumber and selenium' do
53
+ let(:name) { 'lighthouse_cucumber_selenium' }
54
+
55
+ it 'creates performance_helper.rb' do
56
+ expect(File).to exist("#{name}/helpers/performance_helper.rb")
57
+ end
58
+
59
+ it 'creates performance.feature' do
60
+ expect(File).to exist("#{name}/features/performance.feature")
61
+ end
62
+
63
+ it 'creates performance_steps.rb' do
64
+ expect(File).to exist("#{name}/features/step_definitions/performance_steps.rb")
65
+ end
66
+ end
67
+
68
+ context 'with minitest and selenium' do
69
+ let(:name) { 'lighthouse_minitest_selenium' }
70
+
71
+ it 'creates performance_helper.rb' do
72
+ expect(File).to exist("#{name}/helpers/performance_helper.rb")
73
+ end
74
+
75
+ it 'creates test_performance.rb' do
76
+ expect(File).to exist("#{name}/test/test_performance.rb")
77
+ end
78
+
79
+ it 'performance test has valid Ruby syntax' do
80
+ content = File.read("#{name}/test/test_performance.rb")
81
+ expect { RubyVM::InstructionSequence.compile(content) }.not_to raise_error
82
+ end
83
+ end
84
+
85
+ context 'with rspec and watir' do
86
+ let(:name) { 'lighthouse_rspec_watir' }
87
+
88
+ it 'creates performance_helper.rb' do
89
+ expect(File).to exist("#{name}/helpers/performance_helper.rb")
90
+ end
91
+
92
+ it 'creates performance_spec.rb' do
93
+ expect(File).to exist("#{name}/spec/performance_spec.rb")
94
+ end
95
+ end
96
+
97
+ context 'with rspec and capybara' do
98
+ let(:name) { 'lighthouse_rspec_capybara' }
99
+
100
+ it 'creates performance_helper.rb' do
101
+ expect(File).to exist("#{name}/helpers/performance_helper.rb")
102
+ end
103
+
104
+ it 'creates performance_spec.rb' do
105
+ expect(File).to exist("#{name}/spec/performance_spec.rb")
106
+ end
107
+ end
108
+
109
+ context 'without performance flag' do
110
+ let(:name) { 'no_lighthouse_rspec_selenium' }
111
+
112
+ # rubocop:disable RSpec/BeforeAfterAll
113
+ before(:all) do
114
+ InvokeGenerators.generate_framework(
115
+ automation: 'selenium', framework: 'rspec', name: 'no_lighthouse_rspec_selenium'
116
+ )
117
+ end
118
+
119
+ after(:all) do
120
+ FileUtils.rm_rf('no_lighthouse_rspec_selenium')
121
+ end
122
+ # rubocop:enable RSpec/BeforeAfterAll
123
+
124
+ it 'does not create performance_helper.rb' do
125
+ expect(File).not_to exist("#{name}/helpers/performance_helper.rb")
126
+ end
127
+
128
+ it 'does not create performance_spec.rb' do
129
+ expect(File).not_to exist("#{name}/spec/performance_spec.rb")
130
+ end
131
+ end
132
+ end
@@ -61,10 +61,4 @@ describe MinitestGenerator do
61
61
  include_examples 'creates minitest files examples',
62
62
  "#{FrameworkIndex::MINITEST}_#{AutomationIndex::CROSS_PLATFORM}", 'pdp'
63
63
  end
64
-
65
- context 'with minitest and axe' do
66
- include_examples 'creates minitest files examples',
67
- "#{FrameworkIndex::MINITEST}_#{AutomationIndex::AXE}", 'login'
68
- include_examples 'creates test helper', "#{FrameworkIndex::MINITEST}_#{AutomationIndex::AXE}"
69
- end
70
64
  end
@@ -0,0 +1,159 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require_relative '../../../lib/generators/invoke_generators'
5
+
6
+ describe 'Reporter selection for project generation' do
7
+ include InvokeGenerators
8
+
9
+ after(:all) do # rubocop:disable RSpec/BeforeAfterAll
10
+ %w[reporter_allure_test reporter_junit_test reporter_both_test reporter_none_test].each do |name|
11
+ FileUtils.rm_rf(name)
12
+ end
13
+ end
14
+
15
+ describe 'reporter: allure' do
16
+ before(:all) do # rubocop:disable RSpec/BeforeAfterAll
17
+ InvokeGenerators.generate_framework(
18
+ automation: 'selenium', framework: 'rspec', name: 'reporter_allure_test', reporter: 'allure'
19
+ )
20
+ end
21
+
22
+ it 'generates allure_helper.rb' do
23
+ expect(File).to exist('reporter_allure_test/helpers/allure_helper.rb')
24
+ end
25
+
26
+ it 'creates allure-results directory' do
27
+ expect(File).to exist('reporter_allure_test/allure-results')
28
+ end
29
+
30
+ it 'includes allure gems in Gemfile' do
31
+ gemfile = File.read('reporter_allure_test/Gemfile')
32
+ expect(gemfile).to include('allure-rspec')
33
+ end
34
+
35
+ it 'does not include junit gem in Gemfile' do
36
+ gemfile = File.read('reporter_allure_test/Gemfile')
37
+ expect(gemfile).not_to include('rspec_junit_formatter')
38
+ end
39
+
40
+ it 'references AllureHelper in spec_helper' do
41
+ helper = File.read('reporter_allure_test/helpers/spec_helper.rb')
42
+ expect(helper).to include('AllureHelper')
43
+ end
44
+ end
45
+
46
+ describe 'reporter: junit' do
47
+ before(:all) do # rubocop:disable RSpec/BeforeAfterAll
48
+ InvokeGenerators.generate_framework(
49
+ automation: 'selenium', framework: 'rspec', name: 'reporter_junit_test', reporter: 'junit'
50
+ )
51
+ end
52
+
53
+ it 'does not generate allure_helper.rb' do
54
+ expect(File).not_to exist('reporter_junit_test/helpers/allure_helper.rb')
55
+ end
56
+
57
+ it 'does not create allure-results directory' do
58
+ expect(File).not_to exist('reporter_junit_test/allure-results')
59
+ end
60
+
61
+ it 'does not include allure gems in Gemfile' do
62
+ gemfile = File.read('reporter_junit_test/Gemfile')
63
+ expect(gemfile).not_to include('allure-rspec')
64
+ end
65
+
66
+ it 'includes junit gem in Gemfile' do
67
+ gemfile = File.read('reporter_junit_test/Gemfile')
68
+ expect(gemfile).to include('rspec_junit_formatter')
69
+ end
70
+
71
+ it 'includes junit formatter in spec_helper' do
72
+ helper = File.read('reporter_junit_test/helpers/spec_helper.rb')
73
+ expect(helper).to include('RspecJunitFormatter')
74
+ end
75
+
76
+ it 'does not reference AllureHelper in spec_helper' do
77
+ helper = File.read('reporter_junit_test/helpers/spec_helper.rb')
78
+ expect(helper).not_to include('AllureHelper')
79
+ end
80
+
81
+ it 'generates spec_helper.rb with valid syntax' do
82
+ helper = File.read('reporter_junit_test/helpers/spec_helper.rb')
83
+ expect { RubyVM::InstructionSequence.compile(helper) }.not_to raise_error
84
+ end
85
+ end
86
+
87
+ describe 'reporter: both' do
88
+ before(:all) do # rubocop:disable RSpec/BeforeAfterAll
89
+ InvokeGenerators.generate_framework(
90
+ automation: 'selenium', framework: 'rspec', name: 'reporter_both_test', reporter: 'both'
91
+ )
92
+ end
93
+
94
+ it 'generates allure_helper.rb' do
95
+ expect(File).to exist('reporter_both_test/helpers/allure_helper.rb')
96
+ end
97
+
98
+ it 'includes allure gems in Gemfile' do
99
+ gemfile = File.read('reporter_both_test/Gemfile')
100
+ expect(gemfile).to include('allure-rspec')
101
+ end
102
+
103
+ it 'includes junit gem in Gemfile' do
104
+ gemfile = File.read('reporter_both_test/Gemfile')
105
+ expect(gemfile).to include('rspec_junit_formatter')
106
+ end
107
+
108
+ it 'references AllureHelper in spec_helper' do
109
+ helper = File.read('reporter_both_test/helpers/spec_helper.rb')
110
+ expect(helper).to include('AllureHelper')
111
+ end
112
+
113
+ it 'includes junit formatter in spec_helper' do
114
+ helper = File.read('reporter_both_test/helpers/spec_helper.rb')
115
+ expect(helper).to include('RspecJunitFormatter')
116
+ end
117
+
118
+ it 'generates spec_helper.rb with valid syntax' do
119
+ helper = File.read('reporter_both_test/helpers/spec_helper.rb')
120
+ expect { RubyVM::InstructionSequence.compile(helper) }.not_to raise_error
121
+ end
122
+ end
123
+
124
+ describe 'reporter: none' do
125
+ before(:all) do # rubocop:disable RSpec/BeforeAfterAll
126
+ InvokeGenerators.generate_framework(
127
+ automation: 'selenium', framework: 'rspec', name: 'reporter_none_test', reporter: 'none'
128
+ )
129
+ end
130
+
131
+ it 'does not generate allure_helper.rb' do
132
+ expect(File).not_to exist('reporter_none_test/helpers/allure_helper.rb')
133
+ end
134
+
135
+ it 'does not create allure-results directory' do
136
+ expect(File).not_to exist('reporter_none_test/allure-results')
137
+ end
138
+
139
+ it 'does not include allure gems in Gemfile' do
140
+ gemfile = File.read('reporter_none_test/Gemfile')
141
+ expect(gemfile).not_to include('allure-rspec')
142
+ end
143
+
144
+ it 'does not include junit gem in Gemfile' do
145
+ gemfile = File.read('reporter_none_test/Gemfile')
146
+ expect(gemfile).not_to include('rspec_junit_formatter')
147
+ end
148
+
149
+ it 'does not reference AllureHelper in spec_helper' do
150
+ helper = File.read('reporter_none_test/helpers/spec_helper.rb')
151
+ expect(helper).not_to include('AllureHelper')
152
+ end
153
+
154
+ it 'generates spec_helper.rb with valid syntax' do
155
+ helper = File.read('reporter_none_test/helpers/spec_helper.rb')
156
+ expect { RubyVM::InstructionSequence.compile(helper) }.not_to raise_error
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,134 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require_relative '../../../lib/generators/invoke_generators'
5
+
6
+ describe 'Skip flags for project generation' do
7
+ include InvokeGenerators
8
+
9
+ after(:all) do # rubocop:disable RSpec/BeforeAfterAll
10
+ %w[skip_allure_test skip_video_test skip_ci_test skip_all_test].each do |name|
11
+ FileUtils.rm_rf(name)
12
+ end
13
+ end
14
+
15
+ describe '--skip-allure' do
16
+ before(:all) do # rubocop:disable RSpec/BeforeAfterAll
17
+ InvokeGenerators.generate_framework(
18
+ automation: 'selenium', framework: 'rspec', name: 'skip_allure_test', skip_allure: true
19
+ )
20
+ end
21
+
22
+ it 'does not generate allure_helper.rb' do
23
+ expect(File).not_to exist('skip_allure_test/helpers/allure_helper.rb')
24
+ end
25
+
26
+ it 'does not create allure-results directory' do
27
+ expect(File).not_to exist('skip_allure_test/allure-results')
28
+ end
29
+
30
+ it 'does not include allure gems in Gemfile' do
31
+ gemfile = File.read('skip_allure_test/Gemfile')
32
+ expect(gemfile).not_to include('allure-rspec')
33
+ expect(gemfile).not_to include('allure-ruby-commons')
34
+ end
35
+
36
+ it 'does not reference AllureHelper in spec_helper' do
37
+ helper = File.read('skip_allure_test/helpers/spec_helper.rb')
38
+ expect(helper).not_to include('allure_helper')
39
+ expect(helper).not_to include('AllureHelper')
40
+ end
41
+
42
+ it 'does not include allure-results in .gitignore' do
43
+ gitignore = File.read('skip_allure_test/.gitignore')
44
+ expect(gitignore).not_to include('allure-results')
45
+ end
46
+
47
+ it 'still generates spec_helper.rb with valid syntax' do
48
+ helper = File.read('skip_allure_test/helpers/spec_helper.rb')
49
+ expect { RubyVM::InstructionSequence.compile(helper) }.not_to raise_error
50
+ end
51
+
52
+ it 'still has rspec-retry config' do
53
+ helper = File.read('skip_allure_test/helpers/spec_helper.rb')
54
+ expect(helper).to include('rspec/retry')
55
+ end
56
+ end
57
+
58
+ describe '--skip-video' do
59
+ before(:all) do # rubocop:disable RSpec/BeforeAfterAll
60
+ InvokeGenerators.generate_framework(
61
+ automation: 'selenium', framework: 'rspec', name: 'skip_video_test', skip_video: true
62
+ )
63
+ end
64
+
65
+ it 'does not generate video_helper.rb' do
66
+ expect(File).not_to exist('skip_video_test/helpers/video_helper.rb')
67
+ end
68
+
69
+ it 'does not reference video_helper in spec_helper' do
70
+ helper = File.read('skip_video_test/helpers/spec_helper.rb')
71
+ expect(helper).not_to include('video_helper')
72
+ end
73
+
74
+ it 'still generates allure_helper.rb' do
75
+ expect(File).to exist('skip_video_test/helpers/allure_helper.rb')
76
+ end
77
+
78
+ it 'still generates spec_helper.rb with valid syntax' do
79
+ helper = File.read('skip_video_test/helpers/spec_helper.rb')
80
+ expect { RubyVM::InstructionSequence.compile(helper) }.not_to raise_error
81
+ end
82
+ end
83
+
84
+ describe '--skip-ci' do
85
+ before(:all) do # rubocop:disable RSpec/BeforeAfterAll
86
+ InvokeGenerators.generate_framework(
87
+ automation: 'selenium', framework: 'rspec', name: 'skip_ci_test',
88
+ ci_platform: 'github', skip_ci: true
89
+ )
90
+ end
91
+
92
+ it 'does not generate CI pipeline files' do
93
+ expect(File).not_to exist('skip_ci_test/.github')
94
+ end
95
+
96
+ it 'still generates the project' do
97
+ expect(File).to exist('skip_ci_test/Gemfile')
98
+ expect(File).to exist('skip_ci_test/helpers/spec_helper.rb')
99
+ end
100
+ end
101
+
102
+ describe 'all skip flags combined' do
103
+ before(:all) do # rubocop:disable RSpec/BeforeAfterAll
104
+ InvokeGenerators.generate_framework(
105
+ automation: 'selenium', framework: 'rspec', name: 'skip_all_test',
106
+ ci_platform: 'github', skip_ci: true, skip_allure: true, skip_video: true
107
+ )
108
+ end
109
+
110
+ it 'does not generate allure_helper.rb' do
111
+ expect(File).not_to exist('skip_all_test/helpers/allure_helper.rb')
112
+ end
113
+
114
+ it 'does not generate video_helper.rb' do
115
+ expect(File).not_to exist('skip_all_test/helpers/video_helper.rb')
116
+ end
117
+
118
+ it 'does not generate CI files' do
119
+ expect(File).not_to exist('skip_all_test/.github')
120
+ end
121
+
122
+ it 'still generates core project files' do
123
+ expect(File).to exist('skip_all_test/Gemfile')
124
+ expect(File).to exist('skip_all_test/Rakefile')
125
+ expect(File).to exist('skip_all_test/helpers/spec_helper.rb')
126
+ expect(File).to exist('skip_all_test/helpers/driver_helper.rb')
127
+ end
128
+
129
+ it 'generates spec_helper.rb with valid syntax' do
130
+ helper = File.read('skip_all_test/helpers/spec_helper.rb')
131
+ expect { RubyVM::InstructionSequence.compile(helper) }.not_to raise_error
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,148 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require_relative '../../../lib/generators/invoke_generators'
5
+ require_relative '../settings_helper'
6
+
7
+ describe 'Visual addon generation' do
8
+ include InvokeGenerators
9
+ include SettingsHelper
10
+
11
+ # rubocop:disable RSpec/BeforeAfterAll, RSpec/InstanceVariable
12
+ before(:all) do
13
+ @visual_projects = []
14
+ %w[rspec cucumber minitest].each do |framework|
15
+ %w[selenium watir capybara].each do |automation|
16
+ name = "visual_#{framework}_#{automation}"
17
+ @visual_projects << { name:, framework:, automation: }
18
+ InvokeGenerators.generate_framework(
19
+ automation:, framework:, name:, visual: true
20
+ )
21
+ end
22
+ end
23
+ end
24
+
25
+ after(:all) do
26
+ @visual_projects.each { |p| FileUtils.rm_rf(p[:name]) }
27
+ end
28
+ # rubocop:enable RSpec/BeforeAfterAll, RSpec/InstanceVariable
29
+
30
+ context 'with rspec and selenium' do
31
+ let(:name) { 'visual_rspec_selenium' }
32
+
33
+ it 'creates visual_helper.rb' do
34
+ expect(File).to exist("#{name}/helpers/visual_helper.rb")
35
+ end
36
+
37
+ it 'creates visual_spec.rb' do
38
+ expect(File).to exist("#{name}/spec/visual_spec.rb")
39
+ end
40
+
41
+ it 'includes chunky_png in Gemfile' do
42
+ gemfile = File.read("#{name}/Gemfile")
43
+ expect(gemfile).to include("gem 'chunky_png'")
44
+ end
45
+
46
+ it 'visual helper has valid Ruby syntax' do
47
+ content = File.read("#{name}/helpers/visual_helper.rb")
48
+ expect { RubyVM::InstructionSequence.compile(content) }.not_to raise_error
49
+ end
50
+
51
+ it 'visual spec has valid Ruby syntax' do
52
+ content = File.read("#{name}/spec/visual_spec.rb")
53
+ expect { RubyVM::InstructionSequence.compile(content) }.not_to raise_error
54
+ end
55
+ end
56
+
57
+ context 'with cucumber and selenium' do
58
+ let(:name) { 'visual_cucumber_selenium' }
59
+
60
+ it 'creates visual_helper.rb' do
61
+ expect(File).to exist("#{name}/helpers/visual_helper.rb")
62
+ end
63
+
64
+ it 'creates visual.feature' do
65
+ expect(File).to exist("#{name}/features/visual.feature")
66
+ end
67
+
68
+ it 'creates visual_steps.rb' do
69
+ expect(File).to exist("#{name}/features/step_definitions/visual_steps.rb")
70
+ end
71
+
72
+ it 'includes chunky_png in Gemfile' do
73
+ gemfile = File.read("#{name}/Gemfile")
74
+ expect(gemfile).to include("gem 'chunky_png'")
75
+ end
76
+ end
77
+
78
+ context 'with minitest and selenium' do
79
+ let(:name) { 'visual_minitest_selenium' }
80
+
81
+ it 'creates visual_helper.rb' do
82
+ expect(File).to exist("#{name}/helpers/visual_helper.rb")
83
+ end
84
+
85
+ it 'creates test_visual.rb' do
86
+ expect(File).to exist("#{name}/test/test_visual.rb")
87
+ end
88
+
89
+ it 'includes chunky_png in Gemfile' do
90
+ gemfile = File.read("#{name}/Gemfile")
91
+ expect(gemfile).to include("gem 'chunky_png'")
92
+ end
93
+
94
+ it 'visual test has valid Ruby syntax' do
95
+ content = File.read("#{name}/test/test_visual.rb")
96
+ expect { RubyVM::InstructionSequence.compile(content) }.not_to raise_error
97
+ end
98
+ end
99
+
100
+ context 'with rspec and watir' do
101
+ let(:name) { 'visual_rspec_watir' }
102
+
103
+ it 'creates visual_helper.rb' do
104
+ expect(File).to exist("#{name}/helpers/visual_helper.rb")
105
+ end
106
+
107
+ it 'creates visual_spec.rb' do
108
+ expect(File).to exist("#{name}/spec/visual_spec.rb")
109
+ end
110
+ end
111
+
112
+ context 'with rspec and capybara' do
113
+ let(:name) { 'visual_rspec_capybara' }
114
+
115
+ it 'creates visual_helper.rb' do
116
+ expect(File).to exist("#{name}/helpers/visual_helper.rb")
117
+ end
118
+
119
+ it 'creates visual_spec.rb' do
120
+ expect(File).to exist("#{name}/spec/visual_spec.rb")
121
+ end
122
+ end
123
+
124
+ context 'without visual flag' do
125
+ let(:name) { 'no_visual_rspec_selenium' }
126
+
127
+ # rubocop:disable RSpec/BeforeAfterAll
128
+ before(:all) do
129
+ InvokeGenerators.generate_framework(
130
+ automation: 'selenium', framework: 'rspec', name: 'no_visual_rspec_selenium'
131
+ )
132
+ end
133
+
134
+ after(:all) do
135
+ FileUtils.rm_rf('no_visual_rspec_selenium')
136
+ end
137
+ # rubocop:enable RSpec/BeforeAfterAll
138
+
139
+ it 'does not create visual_helper.rb' do
140
+ expect(File).not_to exist("#{name}/helpers/visual_helper.rb")
141
+ end
142
+
143
+ it 'does not include chunky_png in Gemfile' do
144
+ gemfile = File.read("#{name}/Gemfile")
145
+ expect(gemfile).not_to include("gem 'chunky_png'")
146
+ end
147
+ end
148
+ end