This commit is contained in:
Matt Jankowski 2024-05-07 12:26:38 +00:00 committed by GitHub
commit 0af31bbc75
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
30 changed files with 28 additions and 40 deletions

View file

@ -184,6 +184,8 @@ jobs:
DISABLE_SIMPLECOV: true
RAILS_ENV: test
BUNDLE_WITH: test
LOCAL_DOMAIN: localhost:3000
LOCAL_HTTPS: false
strategy:
fail-fast: false
@ -213,7 +215,7 @@ jobs:
- name: Load database schema
run: './bin/rails db:create db:schema:load db:seed'
- run: bundle exec rake spec:system
- run: bin/rspec spec/system --tag fullstack
- name: Archive logs
uses: actions/upload-artifact@v4

View file

@ -74,7 +74,7 @@ Style/FetchEnvVar:
- 'config/initializers/vapid.rb'
- 'lib/mastodon/redis_config.rb'
- 'lib/tasks/repo.rake'
- 'spec/features/profile_spec.rb'
- 'spec/system/profile_spec.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, MaxUnannotatedPlaceholdersAllowed, AllowedMethods, AllowedPatterns.

View file

@ -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

View file

@ -2,13 +2,9 @@
ENV['RAILS_ENV'] ||= 'test'
# 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')
ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}"
end
# This needs to be defined before Rails is initialized (used by full stack system specs)
STREAMING_PORT = ENV.fetch('TEST_STREAMING_PORT', '4020')
ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}"
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 }
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
# System tests config
DatabaseCleaner.strategy = [:deletion]
Devise::Test::ControllerHelpers.module_eval do
@ -49,13 +47,9 @@ Devise::Test::ControllerHelpers.module_eval do
end
RSpec.configure do |config|
# This is set before running spec:system, see lib/tasks/tests.rake
config.filter_run_excluding type: lambda { |type|
case type
when :system
!RUN_SYSTEM_SPECS
end
}
# By default, skip "full stack" specs with higher startup cost (streaming
# server spin up) and slower execution (full JS browser). Run from CI only.
config.filter_run_excluding fullstack: true
# By default, skip the elastic search integration specs
config.filter_run_excluding search: true
@ -78,10 +72,15 @@ RSpec.configure do |config|
metadata[:search] = true
end
# Set `fullstack` metadata true for all specs in spec/system/fullstack/
config.define_derived_metadata(file_path: Regexp.new('spec/system/fullstack/*')) do |metadata|
metadata[:fullstack] = true
end
config.include Devise::Test::ControllerHelpers, type: :controller
config.include Devise::Test::ControllerHelpers, type: :helper
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 ActionMailer::TestHelper
config.include Paperclip::Shoulda::Matchers
@ -111,10 +110,6 @@ RSpec.configure do |config|
stub_reset_connection_pools
end
config.before :each, type: :feature do
Capybara.current_driver = :rack_test
end
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
end

View file

@ -23,7 +23,7 @@ describe 'Content-Security-Policy' do
<<~CSP.split("\n").map(&:strip)
base-uri 'none'
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'
font-src 'self' https://cb6e6126.ngrok.io
form-action 'self'

View file

@ -26,6 +26,10 @@ Capybara.javascript_driver = :headless_chrome
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :rack_test
end
config.before(:each, :fullstack, type: :system) do
driven_by Capybara.javascript_driver
end
end

View file

@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.configure do |config|
config.after(:each, type: :system) do
config.after(:each, :fullstack, type: :system) do
errors = page.driver.browser.logs.get(:browser)
if errors.present?
aggregate_failures 'javascript errrors' do

View file

@ -95,7 +95,7 @@ RSpec.configure do |config|
end
end
config.around :each, type: :system do |example|
config.around :each, :fullstack, type: :system do |example|
# Streaming server needs DB access but `use_transactional_tests` rolls back
# every transaction. Disable this feature for streaming tests, and use
# DatabaseCleaner to clean the database tables between each test.
@ -125,6 +125,6 @@ RSpec.configure do |config|
end
def streaming_examples_present?
RUN_SYSTEM_SPECS
RSpec.world.filtered_examples.values.flatten.any? { |example| example.metadata[:fullstack] == true }
end
end