ruby_raider 2.0.0 → 3.0.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 +58 -0
- data/.github/workflows/steep.yml +21 -0
- data/.gitignore +1 -1
- data/.reek.yml +46 -4
- data/.ruby-version +1 -1
- data/README.md +138 -77
- data/Steepfile +22 -0
- data/assets/ruby_raider_logo.svg +51 -0
- data/lib/adopter/adopt_menu.rb +11 -15
- data/lib/adopter/converters/base_converter.rb +1 -2
- data/lib/adopter/converters/identity_converter.rb +3 -6
- data/lib/adopter/migration_plan.rb +0 -1
- data/lib/adopter/plan_builder.rb +2 -5
- data/lib/adopter/project_analyzer.rb +1 -5
- data/lib/adopter/project_detector.rb +3 -5
- data/lib/commands/adopt_commands.rb +0 -1
- data/lib/commands/plugin_commands.rb +0 -2
- data/lib/commands/scaffolding_commands.rb +220 -37
- data/lib/commands/utility_commands.rb +82 -2
- data/lib/generators/automation/automation_generator.rb +0 -7
- data/lib/generators/automation/templates/partials/element.tt +1 -1
- data/lib/generators/automation/templates/partials/initialize_selector.tt +0 -7
- data/lib/generators/automation/templates/partials/url_methods.tt +0 -1
- data/lib/generators/common_generator.rb +12 -0
- data/lib/generators/cucumber/cucumber_generator.rb +36 -0
- data/lib/generators/cucumber/templates/accessibility_feature.tt +5 -0
- data/lib/generators/cucumber/templates/accessibility_steps.tt +21 -0
- data/lib/generators/cucumber/templates/cucumber.tt +8 -1
- data/lib/generators/cucumber/templates/feature.tt +0 -4
- data/lib/generators/cucumber/templates/partials/appium_env.tt +5 -0
- data/lib/generators/cucumber/templates/partials/capybara_env.tt +19 -1
- data/lib/generators/cucumber/templates/partials/driver_world.tt +1 -4
- data/lib/generators/cucumber/templates/partials/selenium_env.tt +22 -35
- data/lib/generators/cucumber/templates/partials/watir_env.tt +20 -1
- data/lib/generators/cucumber/templates/partials/web_steps.tt +6 -12
- data/lib/generators/cucumber/templates/performance_feature.tt +5 -0
- data/lib/generators/cucumber/templates/performance_steps.tt +17 -0
- data/lib/generators/cucumber/templates/visual_feature.tt +5 -0
- data/lib/generators/cucumber/templates/visual_steps.tt +19 -0
- data/lib/generators/generator.rb +38 -7
- data/lib/generators/helper_generator.rb +24 -7
- data/lib/generators/infrastructure/templates/github.tt +1 -1
- data/lib/generators/infrastructure/templates/github_appium.tt +2 -2
- data/lib/generators/infrastructure/templates/gitlab.tt +1 -1
- data/lib/generators/invoke_generators.rb +42 -9
- data/lib/generators/menu_generator.rb +120 -11
- data/lib/generators/minitest/minitest_generator.rb +16 -4
- data/lib/generators/minitest/templates/accessibility_test.tt +26 -0
- data/lib/generators/minitest/templates/performance_test.tt +18 -0
- data/lib/generators/minitest/templates/test.tt +5 -34
- data/lib/generators/minitest/templates/visual_test.tt +23 -0
- data/lib/generators/rspec/rspec_generator.rb +16 -4
- data/lib/generators/rspec/templates/accessibility_spec.tt +25 -0
- data/lib/generators/rspec/templates/performance_spec.tt +18 -0
- data/lib/generators/rspec/templates/spec.tt +5 -35
- data/lib/generators/rspec/templates/visual_spec.tt +20 -0
- data/lib/generators/template_renderer/partial_cache.rb +11 -1
- data/lib/generators/template_renderer/partial_resolver.rb +17 -10
- data/lib/generators/template_renderer.rb +17 -1
- data/lib/generators/templates/common/gemfile.tt +21 -6
- data/lib/generators/templates/common/git_ignore.tt +6 -1
- data/lib/generators/templates/common/partials/mobile_config.tt +5 -1
- data/lib/generators/templates/common/partials/web_config.tt +16 -7
- data/lib/generators/templates/common/rakefile.tt +36 -0
- data/lib/generators/templates/common/read_me.tt +41 -91
- data/lib/generators/templates/common/rspec.tt +3 -0
- data/lib/generators/templates/common/ruby_version.tt +1 -0
- data/lib/generators/templates/helpers/allure_helper.tt +11 -0
- data/lib/generators/templates/helpers/browser_helper.tt +12 -2
- data/lib/generators/templates/helpers/capybara_helper.tt +5 -1
- data/lib/generators/templates/helpers/debug_helper.tt +190 -0
- data/lib/generators/templates/helpers/driver_helper.tt +2 -10
- data/lib/generators/templates/helpers/partials/appium_driver.tt +0 -2
- data/lib/generators/templates/helpers/partials/debug_diagnostics.tt +7 -0
- data/lib/generators/templates/helpers/partials/debug_start.tt +7 -0
- data/lib/generators/templates/helpers/partials/driver_and_options.tt +1 -3
- data/lib/generators/templates/helpers/partials/selenium_driver.tt +8 -7
- data/lib/generators/templates/helpers/partials/video_start.tt +9 -0
- data/lib/generators/templates/helpers/partials/video_stop.tt +4 -0
- data/lib/generators/templates/helpers/performance_helper.tt +57 -0
- data/lib/generators/templates/helpers/spec_helper.tt +57 -8
- data/lib/generators/templates/helpers/test_helper.tt +69 -1
- data/lib/generators/templates/helpers/video_helper.tt +270 -0
- data/lib/generators/templates/helpers/visual_helper.tt +39 -46
- data/lib/llm/client.rb +79 -0
- data/lib/llm/config.rb +57 -0
- data/lib/llm/prompts.rb +84 -0
- data/lib/llm/provider.rb +27 -0
- data/lib/llm/providers/anthropic_provider.rb +43 -0
- data/lib/llm/providers/ollama_provider.rb +56 -0
- data/lib/llm/providers/openai_provider.rb +42 -0
- data/lib/llm/response_parser.rb +67 -0
- data/lib/plugin/plugin.rb +22 -20
- data/lib/plugin/plugin_exposer.rb +16 -38
- data/lib/ruby_raider.rb +47 -12
- data/lib/scaffolding/crud_generator.rb +94 -0
- data/lib/scaffolding/dry_run_presenter.rb +16 -0
- data/lib/scaffolding/name_normalizer.rb +63 -0
- data/lib/scaffolding/page_introspector.rb +45 -0
- data/lib/scaffolding/project_detector.rb +72 -0
- data/lib/scaffolding/scaffold_menu.rb +103 -0
- data/lib/scaffolding/scaffolding.rb +158 -11
- data/lib/scaffolding/templates/component.tt +30 -0
- data/lib/scaffolding/templates/feature.tt +4 -4
- data/lib/scaffolding/templates/helper.tt +15 -1
- data/lib/scaffolding/templates/page_from_url.tt +75 -0
- data/lib/scaffolding/templates/page_object.tt +50 -1
- data/lib/scaffolding/templates/spec.tt +33 -2
- data/lib/scaffolding/templates/spec_from_page.tt +31 -0
- data/lib/scaffolding/templates/spec_from_url.tt +46 -0
- data/lib/scaffolding/templates/steps.tt +17 -5
- data/lib/scaffolding/url_analyzer.rb +179 -0
- data/lib/utilities/desktop_downloader.rb +177 -0
- data/lib/utilities/logo.rb +83 -0
- data/lib/utilities/utilities.rb +53 -20
- data/lib/version +1 -1
- data/ruby_raider.gemspec +1 -0
- data/sig/adopter/adopt_menu.rbs +25 -0
- data/sig/adopter/converters/base_converter.rbs +23 -0
- data/sig/adopter/converters/identity_converter.rbs +16 -0
- data/sig/adopter/migration_plan.rbs +34 -0
- data/sig/adopter/migrator.rbs +21 -0
- data/sig/adopter/plan_builder.rbs +38 -0
- data/sig/adopter/project_analyzer.rbs +39 -0
- data/sig/adopter/project_detector.rbs +26 -0
- data/sig/commands/adopt_commands.rbs +8 -0
- data/sig/commands/loaded_commands.rbs +5 -0
- data/sig/commands/plugin_commands.rbs +9 -0
- data/sig/commands/scaffolding_commands.rbs +28 -0
- data/sig/commands/utility_commands.rbs +21 -0
- data/sig/generators/automation/automation_generator.rbs +20 -0
- data/sig/generators/common_generator.rbs +12 -0
- data/sig/generators/cucumber/cucumber_generator.rbs +16 -0
- data/sig/generators/generator.rbs +40 -0
- data/sig/generators/helper_generator.rbs +18 -0
- data/sig/generators/infrastructure/github_generator.rbs +5 -0
- data/sig/generators/infrastructure/gitlab_generator.rbs +4 -0
- data/sig/generators/invoke_generators.rbs +10 -0
- data/sig/generators/menu_generator.rbs +29 -0
- data/sig/generators/minitest/minitest_generator.rbs +8 -0
- data/sig/generators/rspec/rspec_generator.rbs +8 -0
- data/sig/generators/template_renderer/partial_cache.rbs +20 -0
- data/sig/generators/template_renderer/partial_resolver.rbs +20 -0
- data/sig/generators/template_renderer/template_error.rbs +19 -0
- data/sig/generators/template_renderer.rbs +10 -0
- data/sig/llm/client.rbs +15 -0
- data/sig/llm/config.rbs +20 -0
- data/sig/llm/prompts.rbs +8 -0
- data/sig/llm/provider.rbs +12 -0
- data/sig/llm/providers/anthropic_provider.rbs +16 -0
- data/sig/llm/providers/ollama_provider.rbs +18 -0
- data/sig/llm/providers/openai_provider.rbs +16 -0
- data/sig/llm/response_parser.rbs +13 -0
- data/sig/plugin/plugin.rbs +24 -0
- data/sig/plugin/plugin_exposer.rbs +20 -0
- data/sig/ruby_raider.rbs +15 -0
- data/sig/scaffolding/crud_generator.rbs +16 -0
- data/sig/scaffolding/dry_run_presenter.rbs +4 -0
- data/sig/scaffolding/name_normalizer.rbs +17 -0
- data/sig/scaffolding/page_introspector.rbs +14 -0
- data/sig/scaffolding/project_detector.rbs +14 -0
- data/sig/scaffolding/scaffold_menu.rbs +18 -0
- data/sig/scaffolding/scaffolding.rbs +55 -0
- data/sig/scaffolding/url_analyzer.rbs +28 -0
- data/sig/utilities/desktop_downloader.rbs +23 -0
- data/sig/utilities/logger.rbs +13 -0
- data/sig/utilities/logo.rbs +16 -0
- data/sig/utilities/utilities.rbs +30 -0
- data/sig/vendor/thor.rbs +34 -0
- data/sig/vendor/tty_prompt.rbs +15 -0
- data/spec/adopter/adopt_menu_spec.rb +12 -12
- data/spec/adopter/migration_plan_spec.rb +1 -1
- data/spec/adopter/migrator_spec.rb +2 -2
- data/spec/adopter/project_detector_spec.rb +1 -1
- data/spec/commands/raider_commands_spec.rb +129 -0
- data/spec/generators/generator_spec.rb +23 -0
- data/spec/integration/commands/scaffolding_commands_spec.rb +1 -1
- data/spec/integration/commands/utility_commands_spec.rb +23 -3
- data/spec/integration/content/ci_content_spec.rb +119 -0
- data/spec/integration/content/common_content_spec.rb +288 -0
- data/spec/integration/content/config_content_spec.rb +175 -0
- data/spec/integration/content/content_helper.rb +32 -0
- data/spec/integration/content/gemfile_content_spec.rb +209 -0
- data/spec/integration/content/helper_content_spec.rb +485 -0
- data/spec/integration/content/page_content_spec.rb +259 -0
- data/spec/integration/content/reporter_content_spec.rb +236 -0
- data/spec/integration/content/skip_flags_content_spec.rb +206 -0
- data/spec/integration/content/syntax_validation_spec.rb +30 -0
- data/spec/integration/content/test_content_spec.rb +266 -0
- data/spec/integration/end_to_end_features_spec.rb +690 -0
- data/spec/integration/end_to_end_spec.rb +52 -16
- data/spec/integration/generators/automation_generator_spec.rb +0 -12
- data/spec/integration/generators/axe_addon_spec.rb +150 -0
- data/spec/integration/generators/common_generator_spec.rb +12 -13
- data/spec/integration/generators/config_features_spec.rb +155 -0
- data/spec/integration/generators/debug_helper_spec.rb +68 -0
- data/spec/integration/generators/helpers_generator_spec.rb +0 -12
- data/spec/integration/generators/lighthouse_addon_spec.rb +132 -0
- data/spec/integration/generators/minitest_generator_spec.rb +0 -6
- data/spec/integration/generators/reporter_spec.rb +159 -0
- data/spec/integration/generators/skip_flags_spec.rb +134 -0
- data/spec/integration/generators/visual_addon_spec.rb +148 -0
- data/spec/integration/settings_helper.rb +0 -3
- data/spec/integration/spec_helper.rb +30 -13
- data/spec/llm/client_spec.rb +79 -0
- data/spec/llm/config_spec.rb +92 -0
- data/spec/llm/prompts_spec.rb +49 -0
- data/spec/llm/response_parser_spec.rb +92 -0
- data/spec/menus/adopter_adopt_menu_spec.rb +97 -0
- data/spec/menus/menu_generator_spec.rb +263 -0
- data/spec/scaffolding/name_normalizer_spec.rb +113 -0
- data/spec/scaffolding/page_introspector_spec.rb +82 -0
- data/spec/scaffolding/scaffold_project_detector_spec.rb +104 -0
- data/spec/scaffolding/scaffolding_features_spec.rb +311 -0
- data/spec/scaffolding/url_analyzer_spec.rb +110 -0
- data/spec/system/adopt_matrix_spec.rb +537 -0
- data/spec/system/adopt_spec.rb +225 -0
- data/spec/system/support/system_test_helper.rb +0 -2
- data/spec/utilities/desktop_downloader_spec.rb +92 -0
- metadata +150 -5
- data/lib/generators/automation/templates/visual_options.tt +0 -16
- data/lib/generators/templates/helpers/partials/axe_driver.tt +0 -10
- 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
|
|
@@ -5,7 +5,7 @@ require 'rspec'
|
|
|
5
5
|
require_relative '../../lib/generators/invoke_generators'
|
|
6
6
|
require_relative 'settings_helper'
|
|
7
7
|
|
|
8
|
-
AUTOMATION_TYPES = %w[android ios selenium watir cross_platform
|
|
8
|
+
AUTOMATION_TYPES = %w[android ios selenium watir cross_platform capybara].freeze
|
|
9
9
|
FRAMEWORKS = %w[cucumber rspec minitest].freeze
|
|
10
10
|
CI_PLATFORMS = [nil, 'github', 'gitlab'].freeze
|
|
11
11
|
|
|
@@ -22,36 +22,53 @@ module AutomationIndex
|
|
|
22
22
|
SELENIUM = AUTOMATION_TYPES[2]
|
|
23
23
|
WATIR = AUTOMATION_TYPES[3]
|
|
24
24
|
CROSS_PLATFORM = AUTOMATION_TYPES[4]
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
CAPYBARA = AUTOMATION_TYPES[5]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Lazy project generation — only generates a project the first time it's needed.
|
|
29
|
+
# Replaces the old before(:all) that generated all 54 combinations upfront.
|
|
30
|
+
module LazyProjectGenerator
|
|
31
|
+
GENERATED = Set.new
|
|
32
|
+
MUTEX = Mutex.new
|
|
33
|
+
|
|
34
|
+
def ensure_project(framework:, automation:, ci_platform: nil)
|
|
35
|
+
settings = create_settings(framework:, automation:, ci_platform:)
|
|
36
|
+
project_name = settings[:name]
|
|
37
|
+
|
|
38
|
+
MUTEX.synchronize do
|
|
39
|
+
unless GENERATED.include?(project_name)
|
|
40
|
+
generate_framework(settings)
|
|
41
|
+
GENERATED.add(project_name)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
project_name
|
|
46
|
+
end
|
|
28
47
|
end
|
|
29
48
|
|
|
30
49
|
RSpec.configure do |config|
|
|
31
50
|
config.include(InvokeGenerators)
|
|
32
51
|
config.include(SettingsHelper)
|
|
52
|
+
config.include(LazyProjectGenerator)
|
|
33
53
|
|
|
34
54
|
# rubocop:disable RSpec/BeforeAfterAll
|
|
35
55
|
config.before(:all) do
|
|
56
|
+
# Generate all projects upfront (preserves existing behavior).
|
|
57
|
+
# Individual specs can also call ensure_project() for on-demand generation.
|
|
36
58
|
FRAMEWORKS.each do |framework|
|
|
37
59
|
AUTOMATION_TYPES.each do |automation|
|
|
38
60
|
CI_PLATFORMS.each do |ci_platform|
|
|
39
|
-
|
|
40
|
-
generate_framework(settings)
|
|
61
|
+
ensure_project(framework:, automation:, ci_platform:)
|
|
41
62
|
end
|
|
42
63
|
end
|
|
43
64
|
end
|
|
44
65
|
end
|
|
45
66
|
|
|
46
67
|
config.after(:all) do
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
CI_PLATFORMS.each do |ci_platform|
|
|
50
|
-
settings = create_settings(framework:, automation:, ci_platform:)
|
|
51
|
-
FileUtils.rm_rf(settings[:name])
|
|
52
|
-
end
|
|
53
|
-
end
|
|
68
|
+
LazyProjectGenerator::GENERATED.each do |project_name|
|
|
69
|
+
FileUtils.rm_rf(project_name)
|
|
54
70
|
end
|
|
71
|
+
LazyProjectGenerator::GENERATED.clear
|
|
55
72
|
end
|
|
56
73
|
# rubocop:enable RSpec/BeforeAfterAll
|
|
57
74
|
end
|