Consolidate system specs into single directory, use rspec tags for configuration (#30206)
This commit is contained in:
		
							parent
							
								
									164b09bfcc
								
							
						
					
					
						commit
						0d397db5dd
					
				|  | @ -186,6 +186,8 @@ jobs: | ||||||
|       DISABLE_SIMPLECOV: true |       DISABLE_SIMPLECOV: true | ||||||
|       RAILS_ENV: test |       RAILS_ENV: test | ||||||
|       BUNDLE_WITH: test |       BUNDLE_WITH: test | ||||||
|  |       LOCAL_DOMAIN: localhost:3000 | ||||||
|  |       LOCAL_HTTPS: false | ||||||
| 
 | 
 | ||||||
|     strategy: |     strategy: | ||||||
|       fail-fast: false |       fail-fast: false | ||||||
|  | @ -215,7 +217,7 @@ jobs: | ||||||
|       - name: Load database schema |       - name: Load database schema | ||||||
|         run: './bin/rails db:create db:schema:load db:seed' |         run: './bin/rails db:create db:schema:load db:seed' | ||||||
| 
 | 
 | ||||||
|       - run: bundle exec rake spec:system |       - run: bin/rspec spec/system --tag streaming --tag js | ||||||
| 
 | 
 | ||||||
|       - name: Archive logs |       - name: Archive logs | ||||||
|         uses: actions/upload-artifact@v4 |         uses: actions/upload-artifact@v4 | ||||||
|  |  | ||||||
|  | @ -70,7 +70,7 @@ Style/FetchEnvVar: | ||||||
|     - 'config/initializers/vapid.rb' |     - 'config/initializers/vapid.rb' | ||||||
|     - 'lib/mastodon/redis_config.rb' |     - 'lib/mastodon/redis_config.rb' | ||||||
|     - 'lib/tasks/repo.rake' |     - 'lib/tasks/repo.rake' | ||||||
|     - 'spec/features/profile_spec.rb' |     - 'spec/system/profile_spec.rb' | ||||||
| 
 | 
 | ||||||
| # This cop supports safe autocorrection (--autocorrect). | # This cop supports safe autocorrection (--autocorrect). | ||||||
| # Configuration parameters: EnforcedStyle, MaxUnannotatedPlaceholdersAllowed, AllowedMethods, AllowedPatterns. | # Configuration parameters: EnforcedStyle, MaxUnannotatedPlaceholdersAllowed, AllowedMethods, AllowedPatterns. | ||||||
|  |  | ||||||
|  | @ -1,13 +0,0 @@ | ||||||
| # frozen_string_literal: true |  | ||||||
| 
 |  | ||||||
| if Rake::Task.task_defined?('spec:system') |  | ||||||
|   namespace :spec do |  | ||||||
|     task :enable_system_specs do # rubocop:disable Rails/RakeEnvironment |  | ||||||
|       ENV['LOCAL_DOMAIN'] = 'localhost:3000' |  | ||||||
|       ENV['LOCAL_HTTPS'] = 'false' |  | ||||||
|       ENV['RUN_SYSTEM_SPECS'] = 'true' |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   Rake::Task['spec:system'].enhance ['spec:enable_system_specs'] |  | ||||||
| end |  | ||||||
|  | @ -3,12 +3,8 @@ | ||||||
| ENV['RAILS_ENV'] ||= 'test' | ENV['RAILS_ENV'] ||= 'test' | ||||||
| 
 | 
 | ||||||
| # This needs to be defined before Rails is initialized | # This needs to be defined before Rails is initialized | ||||||
| RUN_SYSTEM_SPECS = ENV.fetch('RUN_SYSTEM_SPECS', false) |  | ||||||
| 
 |  | ||||||
| if RUN_SYSTEM_SPECS |  | ||||||
| STREAMING_PORT = ENV.fetch('TEST_STREAMING_PORT', '4020') | STREAMING_PORT = ENV.fetch('TEST_STREAMING_PORT', '4020') | ||||||
| ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}" | ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}" | ||||||
| end |  | ||||||
| 
 | 
 | ||||||
| require File.expand_path('../config/environment', __dir__) | require File.expand_path('../config/environment', __dir__) | ||||||
| 
 | 
 | ||||||
|  | @ -26,10 +22,12 @@ require 'test_prof/recipes/rspec/before_all' | ||||||
| Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } | Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } | ||||||
| 
 | 
 | ||||||
| ActiveRecord::Migration.maintain_test_schema! | ActiveRecord::Migration.maintain_test_schema! | ||||||
| WebMock.disable_net_connect!(allow: Chewy.settings[:host], allow_localhost: RUN_SYSTEM_SPECS) | WebMock.disable_net_connect!( | ||||||
|  |   allow_localhost: true, | ||||||
|  |   allow: Chewy.settings[:host] | ||||||
|  | ) | ||||||
| Sidekiq.logger = nil | Sidekiq.logger = nil | ||||||
| 
 | 
 | ||||||
| # System tests config |  | ||||||
| DatabaseCleaner.strategy = [:deletion] | DatabaseCleaner.strategy = [:deletion] | ||||||
| 
 | 
 | ||||||
| Devise::Test::ControllerHelpers.module_eval do | Devise::Test::ControllerHelpers.module_eval do | ||||||
|  | @ -49,16 +47,14 @@ Devise::Test::ControllerHelpers.module_eval do | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| RSpec.configure do |config| | RSpec.configure do |config| | ||||||
|   # This is set before running spec:system, see lib/tasks/tests.rake |   # By default, skip specs that need full JS browser | ||||||
|   config.filter_run_excluding type: lambda { |type| |   config.filter_run_excluding :js | ||||||
|     case type |  | ||||||
|     when :system |  | ||||||
|       !RUN_SYSTEM_SPECS |  | ||||||
|     end |  | ||||||
|   } |  | ||||||
| 
 | 
 | ||||||
|   # By default, skip the elastic search integration specs |   # By default, skip specs that need elastic search server | ||||||
|   config.filter_run_excluding search: true |   config.filter_run_excluding :search | ||||||
|  | 
 | ||||||
|  |   # By default, skip specs that need the streaming server | ||||||
|  |   config.filter_run_excluding :streaming | ||||||
| 
 | 
 | ||||||
|   config.fixture_paths = [ |   config.fixture_paths = [ | ||||||
|     Rails.root.join('spec', 'fixtures'), |     Rails.root.join('spec', 'fixtures'), | ||||||
|  | @ -81,7 +77,7 @@ RSpec.configure do |config| | ||||||
|   config.include Devise::Test::ControllerHelpers, type: :controller |   config.include Devise::Test::ControllerHelpers, type: :controller | ||||||
|   config.include Devise::Test::ControllerHelpers, type: :helper |   config.include Devise::Test::ControllerHelpers, type: :helper | ||||||
|   config.include Devise::Test::ControllerHelpers, type: :view |   config.include Devise::Test::ControllerHelpers, type: :view | ||||||
|   config.include Devise::Test::IntegrationHelpers, type: :feature |   config.include Devise::Test::IntegrationHelpers, type: :system | ||||||
|   config.include Devise::Test::IntegrationHelpers, type: :request |   config.include Devise::Test::IntegrationHelpers, type: :request | ||||||
|   config.include ActionMailer::TestHelper |   config.include ActionMailer::TestHelper | ||||||
|   config.include Paperclip::Shoulda::Matchers |   config.include Paperclip::Shoulda::Matchers | ||||||
|  | @ -111,10 +107,6 @@ RSpec.configure do |config| | ||||||
|     stub_reset_connection_pools |     stub_reset_connection_pools | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   config.before :each, type: :feature do |  | ||||||
|     Capybara.current_driver = :rack_test |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   config.before do |example| |   config.before do |example| | ||||||
|     allow(Resolv::DNS).to receive(:open).and_raise('Real DNS queries are disabled, stub Resolv::DNS as needed') unless example.metadata[:type] == :system |     allow(Resolv::DNS).to receive(:open).and_raise('Real DNS queries are disabled, stub Resolv::DNS as needed') unless example.metadata[:type] == :system | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  | @ -23,7 +23,7 @@ describe 'Content-Security-Policy' do | ||||||
|     <<~CSP.split("\n").map(&:strip) |     <<~CSP.split("\n").map(&:strip) | ||||||
|       base-uri 'none' |       base-uri 'none' | ||||||
|       child-src 'self' blob: https://cb6e6126.ngrok.io |       child-src 'self' blob: https://cb6e6126.ngrok.io | ||||||
|       connect-src 'self' data: blob: https://cb6e6126.ngrok.io ws://cb6e6126.ngrok.io:4000 |       connect-src 'self' data: blob: https://cb6e6126.ngrok.io #{Rails.configuration.x.streaming_api_base_url} | ||||||
|       default-src 'none' |       default-src 'none' | ||||||
|       font-src 'self' https://cb6e6126.ngrok.io |       font-src 'self' https://cb6e6126.ngrok.io | ||||||
|       form-action 'self' |       form-action 'self' | ||||||
|  |  | ||||||
|  | @ -26,6 +26,10 @@ Capybara.javascript_driver = :headless_chrome | ||||||
| 
 | 
 | ||||||
| RSpec.configure do |config| | RSpec.configure do |config| | ||||||
|   config.before(:each, type: :system) do |   config.before(:each, type: :system) do | ||||||
|  |     driven_by :rack_test | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   config.before(:each, :js, type: :system) do | ||||||
|     driven_by Capybara.javascript_driver |     driven_by Capybara.javascript_driver | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| # frozen_string_literal: true | # frozen_string_literal: true | ||||||
| 
 | 
 | ||||||
| RSpec.configure do |config| | RSpec.configure do |config| | ||||||
|   config.after(:each, type: :system) do |   config.after(:each, :js, type: :system) do | ||||||
|     errors = page.driver.browser.logs.get(:browser) |     errors = page.driver.browser.logs.get(:browser) | ||||||
|     if errors.present? |     if errors.present? | ||||||
|       aggregate_failures 'javascript errrors' do |       aggregate_failures 'javascript errrors' do | ||||||
|  |  | ||||||
|  | @ -95,7 +95,7 @@ RSpec.configure do |config| | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   config.around :each, type: :system do |example| |   config.around :each, :streaming, type: :system do |example| | ||||||
|     # Streaming server needs DB access but `use_transactional_tests` rolls back |     # Streaming server needs DB access but `use_transactional_tests` rolls back | ||||||
|     # every transaction. Disable this feature for streaming tests, and use |     # every transaction. Disable this feature for streaming tests, and use | ||||||
|     # DatabaseCleaner to clean the database tables between each test. |     # DatabaseCleaner to clean the database tables between each test. | ||||||
|  | @ -125,6 +125,6 @@ RSpec.configure do |config| | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def streaming_examples_present? |   def streaming_examples_present? | ||||||
|     RUN_SYSTEM_SPECS |     RSpec.world.filtered_examples.values.flatten.any? { |example| example.metadata[:streaming] == true } | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| require 'rails_helper' | require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| describe 'NewStatuses', :sidekiq_inline do | describe 'NewStatuses', :js, :sidekiq_inline, :streaming do | ||||||
|   include ProfileStories |   include ProfileStories | ||||||
| 
 | 
 | ||||||
|   subject { page } |   subject { page } | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| require 'rails_helper' | require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| describe 'Using OAuth from an external app' do | describe 'Using OAuth from an external app', :js, :streaming do | ||||||
|   let(:client_app) { Doorkeeper::Application.create!(name: 'test', redirect_uri: about_url(host: Rails.application.config.x.local_domain), scopes: 'read') } |   let(:client_app) { Doorkeeper::Application.create!(name: 'test', redirect_uri: about_url(host: Rails.application.config.x.local_domain), scopes: 'read') } | ||||||
| 
 | 
 | ||||||
|   context 'when the user is already logged in' do |   context 'when the user is already logged in' do | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| require 'rails_helper' | require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| describe 'OCR', :paperclip_processing, :sidekiq_inline do | describe 'OCR', :js, :paperclip_processing, :sidekiq_inline, :streaming do | ||||||
|   include ProfileStories |   include ProfileStories | ||||||
| 
 | 
 | ||||||
|   let(:email)               { 'test@example.com' } |   let(:email)               { 'test@example.com' } | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| require 'rails_helper' | require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| describe 'report interface', :paperclip_processing do | describe 'report interface', :js, :paperclip_processing, :streaming do | ||||||
|   include ProfileStories |   include ProfileStories | ||||||
| 
 | 
 | ||||||
|   let(:email)               { 'admin@example.com' } |   let(:email)               { 'admin@example.com' } | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| require 'rails_helper' | require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| describe 'ShareEntrypoint' do | describe 'ShareEntrypoint', :js, :streaming do | ||||||
|   include ProfileStories |   include ProfileStories | ||||||
| 
 | 
 | ||||||
|   subject { page } |   subject { page } | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| require 'rails_helper' | require 'rails_helper' | ||||||
| 
 | 
 | ||||||
| describe 'UnloggedBrowsing' do | describe 'UnloggedBrowsing', :js, :streaming do | ||||||
|   subject { page } |   subject { page } | ||||||
| 
 | 
 | ||||||
|   before do |   before do | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue