diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d1630d532d..e2523d7d42 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -257,7 +257,7 @@ jobs: run: RAILS_ENV=test bundle exec rake karma:run - name: Run all other tests - run: bundle exec rspec --profile --pattern "engines/*/spec/{,/*/**}/*_spec.rb,spec/{helpers, initializers, jobs, mailers, queries, requests, services, validators, views}/{,/*/**}/*_spec.rb" + run: bundle exec rake ofn:specs:run:excluding_folders["models,controllers,serializers,features,lib"] test-the-rest: runs-on: ubuntu-18.04 @@ -297,5 +297,5 @@ jobs: bundle exec rake db:create RAILS_ENV=test bundle exec rake db:schema:load RAILS_ENV=test - - name: Run admin feature folders, serializers, jobs, lib - run: bundle exec rspec --profile --pattern "spec/features/admin/*/*_spec.rb,spec/lib/{,/*/**}/*_spec.rb" + - name: Run admin feature folders, engines, lib + run: bundle exec rspec --profile --pattern "engines/*/spec/{,/*/**}/*_spec.rb,spec/features/admin/*/*_spec.rb,spec/lib/{,/*/**}/*_spec.rb" diff --git a/lib/tasks/specs.rake b/lib/tasks/specs.rake index e1b91c22a3..a575d894a1 100644 --- a/lib/tasks/specs.rake +++ b/lib/tasks/specs.rake @@ -1,5 +1,31 @@ namespace :ofn do namespace :specs do + namespace :run do + def spec_folders + Pathname("spec/").children.select(&:directory?).map { |p| + p.split.last.to_s + }.reject { |p| %w(support factories javascripts performance).include?(p) } + end + + def execute_rspec_for_pattern(pattern) + system "bundle exec rspec --profile --pattern \"#{pattern}\"" + end + + def execute_rspec_for_spec_folder(folder) + execute_rspec_for_pattern("spec/#{folder}/{,/*/**}/*_spec.rb") + end + + def execute_rspec_for_spec_folders(folders) + folders = folders.join(",") if folders.is_a?(Array) + execute_rspec_for_pattern("spec/{#{folders}}/{,/*/**}/*_spec.rb") + end + + desc "Run Rspec tests excluding folders" + task :excluding_folders, [:folders] do |_task, args| + execute_rspec_for_spec_folders(spec_folders - (args[:folders].split(",") + args.extras)) + end + end + namespace :engines do def detect_engine_paths Pathname("engines/").children.select(&:directory?)