Consolidate system specs into single directory, use rspec tags for configuration (#30206)
This commit is contained in:
		
							
								
								
									
										4
									
								
								.github/workflows/test-ruby.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/test-ruby.yml
									
									
									
									
										vendored
									
									
								
							@@ -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)
 | 
					STREAMING_PORT = ENV.fetch('TEST_STREAMING_PORT', '4020')
 | 
				
			||||||
 | 
					ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}"
 | 
				
			||||||
if RUN_SYSTEM_SPECS
 | 
					 | 
				
			||||||
  STREAMING_PORT = ENV.fetch('TEST_STREAMING_PORT', '4020')
 | 
					 | 
				
			||||||
  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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user