From f22ecd6309ee4becd2df19210b478adfa36f0c25 Mon Sep 17 00:00:00 2001 From: Andy Allan Date: Wed, 20 Dec 2023 11:03:22 +0000 Subject: [PATCH 1/2] Avoid running integration tests in every locale We have over 200 locales, and so this takes a long time. This reduces time taken from around 200 seconds to 6 to run these tests. --- test/integration/user_creation_test.rb | 198 +++++++++++-------------- 1 file changed, 85 insertions(+), 113 deletions(-) diff --git a/test/integration/user_creation_test.rb b/test/integration/user_creation_test.rb index 21e751bcaf..8ec0dc9bc0 100644 --- a/test/integration/user_creation_test.rb +++ b/test/integration/user_creation_test.rb @@ -18,149 +18,121 @@ def teardown end def test_create_user_form - I18n.with_locale "en" do - I18n.available_locales.each do |locale| - reset! - get "/user/new", :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s } - follow_redirect! - assert_response :success - assert_template "users/new" - end - end + get "/user/new" + follow_redirect! + assert_response :success + assert_template "users/new" end def test_user_create_submit_duplicate_email - I18n.with_locale "en" do - Locale.available.each do |locale| - dup_email = create(:user).email - display_name = "#{locale}_new_tester" - assert_difference("User.count", 0) do - assert_difference("ActionMailer::Base.deliveries.size", 0) do - perform_enqueued_jobs do - post "/user/new", - :params => { :user => { :email => dup_email, - :email_confirmation => dup_email, - :display_name => display_name, - :pass_crypt => "testtest", - :pass_crypt_confirmation => "testtest" } }, - :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s } - end - end + dup_email = create(:user).email + display_name = "new_tester" + assert_difference("User.count", 0) do + assert_difference("ActionMailer::Base.deliveries.size", 0) do + perform_enqueued_jobs do + post "/user/new", + :params => { :user => { :email => dup_email, + :email_confirmation => dup_email, + :display_name => display_name, + :pass_crypt => "testtest", + :pass_crypt_confirmation => "testtest" } } end - assert_response :success - assert_template "users/new" - assert_equal locale.to_s, response.headers["Content-Language"] - assert_select "form" - assert_select "form > div > input.is-invalid#user_email" - assert_no_missing_translations end end + assert_response :success + assert_template "users/new" + assert_select "form" + assert_select "form > div > input.is-invalid#user_email" end def test_user_create_submit_duplicate_username - I18n.with_locale "en" do - I18n.available_locales.each do |locale| - dup_display_name = create(:user).display_name - email = "#{locale}_new_tester" - assert_difference("User.count", 0) do - assert_difference("ActionMailer::Base.deliveries.size", 0) do - perform_enqueued_jobs do - post "/user/new", - :params => { :user => { :email => email, - :email_confirmation => email, - :display_name => dup_display_name, - :pass_crypt => "testtest", - :pass_crypt_confirmation => "testtest" } }, - :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s } - end - end + dup_display_name = create(:user).display_name + email = "new_tester" + assert_difference("User.count", 0) do + assert_difference("ActionMailer::Base.deliveries.size", 0) do + perform_enqueued_jobs do + post "/user/new", + :params => { :user => { :email => email, + :email_confirmation => email, + :display_name => dup_display_name, + :pass_crypt => "testtest", + :pass_crypt_confirmation => "testtest" } } end - assert_response :success - assert_template "users/new" - assert_select "form > div > input.is-invalid#user_display_name" - assert_no_missing_translations end end + assert_response :success + assert_template "users/new" + assert_select "form > div > input.is-invalid#user_display_name" end def test_user_create_success - I18n.with_locale "en" do - I18n.available_locales.each do |locale| - new_email = "#{locale}newtester@osm.org" - display_name = "#{locale}_new_tester" - - assert_difference("User.count", 0) do - assert_difference("ActionMailer::Base.deliveries.size", 0) do - perform_enqueued_jobs do - post "/user/new", - :params => { :user => { :email => new_email, - :email_confirmation => new_email, - :display_name => display_name, - :pass_crypt => "testtest", - :pass_crypt_confirmation => "testtest" } } - end - end + new_email = "newtester@osm.org" + display_name = "new_tester" + + assert_difference("User.count", 0) do + assert_difference("ActionMailer::Base.deliveries.size", 0) do + perform_enqueued_jobs do + post "/user/new", + :params => { :user => { :email => new_email, + :email_confirmation => new_email, + :display_name => display_name, + :pass_crypt => "testtest", + :pass_crypt_confirmation => "testtest" } } end + end + end - assert_redirected_to "/user/terms" - - assert_difference("User.count") do - assert_difference("ActionMailer::Base.deliveries.size", 1) do - perform_enqueued_jobs do - post "/user/save", - :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }, - :params => { :read_ct => 1, :read_tou => 1 } - follow_redirect! - end - end + assert_redirected_to "/user/terms" + + assert_difference("User.count") do + assert_difference("ActionMailer::Base.deliveries.size", 1) do + perform_enqueued_jobs do + post "/user/save", + :params => { :read_ct => 1, :read_tou => 1 } + follow_redirect! end + end + end - # Check the e-mail - register_email = ActionMailer::Base.deliveries.first + # Check the e-mail + register_email = ActionMailer::Base.deliveries.first - assert_equal register_email.to.first, new_email - # Check that the confirm account url is correct - assert_match(/#{@url}/, register_email.body.to_s) + assert_equal register_email.to.first, new_email + # Check that the confirm account url is correct + assert_match(/#{@url}/, register_email.body.to_s) - # Check the page - assert_response :success - assert_template "confirmations/confirm" + # Check the page + assert_response :success + assert_template "confirmations/confirm" - ActionMailer::Base.deliveries.clear - end - end + ActionMailer::Base.deliveries.clear end def test_user_create_no_tou_failure - I18n.with_locale "en" do - I18n.available_locales.each do |locale| - new_email = "#{locale}newtester@osm.org" - display_name = "#{locale}_new_tester" - - assert_difference("User.count", 0) do - assert_difference("ActionMailer::Base.deliveries.size", 0) do - perform_enqueued_jobs do - post "/user/new", - :params => { :user => { :email => new_email, - :email_confirmation => new_email, - :display_name => display_name, - :pass_crypt => "testtest", - :pass_crypt_confirmation => "testtest" } } - end - end - end - - assert_redirected_to "/user/terms" + new_email = "#newtester@osm.org" + display_name = "new_tester" + assert_difference("User.count", 0) do + assert_difference("ActionMailer::Base.deliveries.size", 0) do perform_enqueued_jobs do - post "/user/save", - :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s } - assert_redirected_to "/user/terms" + post "/user/new", + :params => { :user => { :email => new_email, + :email_confirmation => new_email, + :display_name => display_name, + :pass_crypt => "testtest", + :pass_crypt_confirmation => "testtest" } } end - - ActionMailer::Base.deliveries.clear end end + + assert_redirected_to "/user/terms" + + perform_enqueued_jobs do + post "/user/save" + assert_redirected_to "/user/terms" + end + + ActionMailer::Base.deliveries.clear end # Check that the user can successfully recover their password From abc58ed903450d6d36690fe518cde3441eeb492d Mon Sep 17 00:00:00 2001 From: Andy Allan Date: Wed, 20 Dec 2023 11:38:54 +0000 Subject: [PATCH 2/2] Reduce changeset comment rate limits further in tests This has an impact on how long the tests take to run. --- config/settings/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/settings/test.yml b/config/settings/test.yml index 0cfa74cd70..fe5aa5d897 100644 --- a/config/settings/test.yml +++ b/config/settings/test.yml @@ -20,8 +20,8 @@ trace_file_storage: "test" trace_image_storage: "test" trace_icon_storage: "test" # Lower some rate limits for testing -max_changeset_comments_per_hour: 30 -moderator_changeset_comments_per_hour: 60 +max_changeset_comments_per_hour: 10 +moderator_changeset_comments_per_hour: 15 # Private key for signing id_tokens doorkeeper_signing_key: | -----BEGIN PRIVATE KEY-----