diff --git a/test/integration/gems_test.rb b/test/integration/gems_test.rb index 96b88046d55..e86d46dd6bd 100644 --- a/test/integration/gems_test.rb +++ b/test/integration/gems_test.rb @@ -67,180 +67,3 @@ class GemsTest < ActionDispatch::IntegrationTest assert_response :success end end - -class GemsSystemTest < SystemTest - setup do - @user = create(:user) - @rubygem = create(:rubygem, name: "sandworm", number: "1.0.0") - @version = create(:version, rubygem: @rubygem, number: "1.1.1") - end - - test "version navigation" do - visit rubygem_version_path(@rubygem.slug, "1.0.0") - click_link "Next version →" - - assert_equal page.current_path, rubygem_version_path(@rubygem.slug, "1.1.1") - click_link "← Previous version" - - assert_equal page.current_path, rubygem_version_path(@rubygem.slug, "1.0.0") - end - - test "subscribe to a gem" do - visit rubygem_path(@rubygem.slug, as: @user.id) - - assert page.has_css?("a#subscribe") - - click_link "Subscribe" - - assert page.has_content? "Unsubscribe" - assert_equal @user.subscribed_gems.first, @rubygem - end - - test "unsubscribe to a gem" do - create(:subscription, rubygem: @rubygem, user: @user) - - visit rubygem_path(@rubygem.slug, as: @user.id) - - assert page.has_css?("a#unsubscribe") - - click_link "Unsubscribe" - - assert page.has_content? "Subscribe" - assert_empty @user.subscribed_gems - end - - test "shows enable MFA instructions when logged in as owner with MFA disabled" do - create(:ownership, rubygem: @rubygem, user: @user) - - visit rubygem_path(@rubygem.slug, as: @user.id) - - assert page.has_selector?(".gem__users__mfa-disabled .gem__users a") - assert page.has_content? "Please consider enabling multi-factor" - end - - test "shows owners without mfa when logged in as owner" do - @user.enable_totp!("some-seed", "ui_and_api") - user_without_mfa = create(:user) - - create(:ownership, rubygem: @rubygem, user: @user) - create(:ownership, rubygem: @rubygem, user: user_without_mfa) - - visit rubygem_path(@rubygem.slug, as: @user.id) - - assert page.has_selector?(".gem__users__mfa-disabled .gem__users a") - assert page.has_selector?(".gem__users__mfa-text.mfa-warn") - end - - test "show mfa enabled when logged in as owner but everyone has mfa enabled" do - @user.enable_totp!("some-seed", "ui_and_api") - user_with_mfa = create(:user) - user_with_mfa.enable_totp!("some-seed", "ui_and_api") - - create(:ownership, rubygem: @rubygem, user: @user) - create(:ownership, rubygem: @rubygem, user: user_with_mfa) - - visit rubygem_path(@rubygem.slug, as: @user.id) - - assert page.has_no_selector?(".gem__users__mfa-text.mfa-warn") - assert page.has_selector?(".gem__users__mfa-text.mfa-info") - end - - test "does not show owners without mfa when not logged in as owner" do - @user.enable_totp!("some-seed", "ui_and_api") - user_without_mfa = create(:user) - - create(:ownership, rubygem: @rubygem, user: @user) - create(:ownership, rubygem: @rubygem, user: user_without_mfa) - - visit rubygem_path(@rubygem.slug) - - assert page.has_no_selector?(".gem__users__mfa-disabled .gem__users a") - assert page.has_no_selector?(".gem__users__mfa-text.mfa-warn") - assert page.has_no_selector?(".gem__users__mfa-text.mfa-info") - end - - test "shows github link when source_code_uri is set" do - github_link = "http://github.com/user/project" - create(:version, number: "3.0.1", rubygem: @rubygem, metadata: { "source_code_uri" => github_link }) - - visit rubygem_path(@rubygem.slug) - - assert page.has_selector?(".github-btn") - end - - test "shows github link when homepage_uri is set" do - github_link = "http://github.com/user/project" - create(:version, number: "3.0.1", rubygem: @rubygem, metadata: { "homepage_uri" => github_link }) - - visit rubygem_path(@rubygem.slug) - - assert page.has_selector?(".github-btn") - end - - test "does not show github link when homepage_uri is not github" do - notgithub_link = "http://notgithub.com/user/project" - create(:version, number: "3.0.1", rubygem: @rubygem, metadata: { "homepage_uri" => notgithub_link }) - - visit rubygem_path(@rubygem.slug) - - assert page.has_no_selector?(".github-btn") - end - - test "shows both mfa headers if latest AND viewed version require MFA" do - @version.update_attribute :metadata, { "rubygems_mfa_required" => "true" } - create(:version, :mfa_required, rubygem: @rubygem, number: "0.1.1") - - visit rubygem_version_path(@rubygem.slug, "0.1.1") - - assert page.has_content? "New versions require MFA" - assert page.has_content? "Version published with MFA" - end - - test "shows 'new' mfa header only if latest requires MFA but viewed version doesn't" do - @version.update_attribute :metadata, { "rubygems_mfa_required" => "true" } - create(:version, rubygem: @rubygem, number: "0.1.1") - - visit rubygem_version_path(@rubygem.slug, "0.1.1") - - assert page.has_content? "New versions require MFA" - refute page.has_content? "Version published with MFA" - end - - test "shows 'version' mfa header only if latest does not require MFA but viewed version does" do - @version.update_attribute :metadata, { "rubygems_mfa_required" => "false" } - create(:version, :mfa_required, rubygem: @rubygem, number: "0.1.1") - - visit rubygem_version_path(@rubygem.slug, "0.1.1") - - refute page.has_content? "New versions require MFA" - assert page.has_content? "Version published with MFA" - end - - test "does not show either mfa header if neither latest or viewed version require MFA" do - @version.update_attribute :metadata, { "rubygems_mfa_required" => "false" } - create(:version, rubygem: @rubygem, number: "0.1.1") - - visit rubygem_version_path(@rubygem.slug, "0.1.1") - - refute page.has_content? "New versions require MFA" - refute page.has_content? "Version published with MFA" - end - - test "shows both mfa headers if MFA enabled for latest version and viewing latest version" do - @version.update_attribute :metadata, { "rubygems_mfa_required" => "true" } - - visit rubygem_path(@rubygem.slug) - - assert page.has_content? "New versions require MFA" - assert page.has_content? "Version published with MFA" - end - - test "shows neither mfa header if MFA disabled for latest version and viewing latest version" do - @version.update_attribute :metadata, { "rubygems_mfa_required" => "false" } - - visit rubygem_path(@rubygem.slug) - - refute page.has_content? "New versions require MFA" - refute page.has_content? "Version published with MFA" - end -end diff --git a/test/integration/email_confirmation_test.rb b/test/system/email_confirmation_test.rb similarity index 97% rename from test/integration/email_confirmation_test.rb rename to test/system/email_confirmation_test.rb index ee3ee6cb1f2..10e96af5373 100644 --- a/test/integration/email_confirmation_test.rb +++ b/test/system/email_confirmation_test.rb @@ -1,7 +1,7 @@ -require "test_helper" +require "application_system_test_case" require "helpers/email_helpers" -class EmailConfirmationTest < SystemTest +class EmailConfirmationTest < ApplicationSystemTestCase include ActiveJob::TestHelper setup do diff --git a/test/system/gems_test.rb b/test/system/gems_test.rb new file mode 100644 index 00000000000..a8b89b54a6f --- /dev/null +++ b/test/system/gems_test.rb @@ -0,0 +1,178 @@ +require "application_system_test_case" + +class GemsSystemTest < ApplicationSystemTestCase + setup do + @user = create(:user) + @rubygem = create(:rubygem, name: "sandworm", number: "1.0.0") + @version = create(:version, rubygem: @rubygem, number: "1.1.1") + end + + test "version navigation" do + visit rubygem_version_path(@rubygem.slug, "1.0.0") + click_link "Next version →" + + assert_equal page.current_path, rubygem_version_path(@rubygem.slug, "1.1.1") + click_link "← Previous version" + + assert_equal page.current_path, rubygem_version_path(@rubygem.slug, "1.0.0") + end + + test "subscribe to a gem" do + visit rubygem_path(@rubygem.slug, as: @user.id) + + assert page.has_css?("a#subscribe") + + click_link "Subscribe" + + assert page.has_content? "Unsubscribe" + assert_equal @user.subscribed_gems.first, @rubygem + end + + test "unsubscribe to a gem" do + create(:subscription, rubygem: @rubygem, user: @user) + + visit rubygem_path(@rubygem.slug, as: @user.id) + + assert page.has_css?("a#unsubscribe") + + click_link "Unsubscribe" + + assert page.has_content? "Subscribe" + assert_empty @user.subscribed_gems + end + + test "shows enable MFA instructions when logged in as owner with MFA disabled" do + create(:ownership, rubygem: @rubygem, user: @user) + + visit rubygem_path(@rubygem.slug, as: @user.id) + + assert page.has_selector?(".gem__users__mfa-disabled .gem__users a") + assert page.has_content? "Please consider enabling multi-factor" + end + + test "shows owners without mfa when logged in as owner" do + @user.enable_totp!("some-seed", "ui_and_api") + user_without_mfa = create(:user) + + create(:ownership, rubygem: @rubygem, user: @user) + create(:ownership, rubygem: @rubygem, user: user_without_mfa) + + visit rubygem_path(@rubygem.slug, as: @user.id) + + assert page.has_selector?(".gem__users__mfa-disabled .gem__users a") + assert page.has_selector?(".gem__users__mfa-text.mfa-warn") + end + + test "show mfa enabled when logged in as owner but everyone has mfa enabled" do + @user.enable_totp!("some-seed", "ui_and_api") + user_with_mfa = create(:user) + user_with_mfa.enable_totp!("some-seed", "ui_and_api") + + create(:ownership, rubygem: @rubygem, user: @user) + create(:ownership, rubygem: @rubygem, user: user_with_mfa) + + visit rubygem_path(@rubygem.slug, as: @user.id) + + assert page.has_no_selector?(".gem__users__mfa-text.mfa-warn") + assert page.has_selector?(".gem__users__mfa-text.mfa-info") + end + + test "does not show owners without mfa when not logged in as owner" do + @user.enable_totp!("some-seed", "ui_and_api") + user_without_mfa = create(:user) + + create(:ownership, rubygem: @rubygem, user: @user) + create(:ownership, rubygem: @rubygem, user: user_without_mfa) + + visit rubygem_path(@rubygem.slug) + + assert page.has_no_selector?(".gem__users__mfa-disabled .gem__users a") + assert page.has_no_selector?(".gem__users__mfa-text.mfa-warn") + assert page.has_no_selector?(".gem__users__mfa-text.mfa-info") + end + + test "shows github link when source_code_uri is set" do + github_link = "http://github.com/user/project" + create(:version, number: "3.0.1", rubygem: @rubygem, metadata: { "source_code_uri" => github_link }) + + visit rubygem_path(@rubygem.slug) + + assert page.has_selector?(".github-btn") + end + + test "shows github link when homepage_uri is set" do + github_link = "http://github.com/user/project" + create(:version, number: "3.0.1", rubygem: @rubygem, metadata: { "homepage_uri" => github_link }) + + visit rubygem_path(@rubygem.slug) + + assert page.has_selector?(".github-btn") + end + + test "does not show github link when homepage_uri is not github" do + notgithub_link = "http://notgithub.com/user/project" + create(:version, number: "3.0.1", rubygem: @rubygem, metadata: { "homepage_uri" => notgithub_link }) + + visit rubygem_path(@rubygem.slug) + + assert page.has_no_selector?(".github-btn") + end + + test "shows both mfa headers if latest AND viewed version require MFA" do + @version.update_attribute :metadata, { "rubygems_mfa_required" => "true" } + create(:version, :mfa_required, rubygem: @rubygem, number: "0.1.1") + + visit rubygem_version_path(@rubygem.slug, "0.1.1") + + assert page.has_content? "New versions require MFA" + assert page.has_content? "Version published with MFA" + end + + test "shows 'new' mfa header only if latest requires MFA but viewed version doesn't" do + @version.update_attribute :metadata, { "rubygems_mfa_required" => "true" } + create(:version, rubygem: @rubygem, number: "0.1.1") + + visit rubygem_version_path(@rubygem.slug, "0.1.1") + + assert page.has_content? "New versions require MFA" + refute page.has_content? "Version published with MFA" + end + + test "shows 'version' mfa header only if latest does not require MFA but viewed version does" do + @version.update_attribute :metadata, { "rubygems_mfa_required" => "false" } + create(:version, :mfa_required, rubygem: @rubygem, number: "0.1.1") + + visit rubygem_version_path(@rubygem.slug, "0.1.1") + + refute page.has_content? "New versions require MFA" + assert page.has_content? "Version published with MFA" + end + + test "does not show either mfa header if neither latest or viewed version require MFA" do + @version.update_attribute :metadata, { "rubygems_mfa_required" => "false" } + create(:version, rubygem: @rubygem, number: "0.1.1") + + visit rubygem_version_path(@rubygem.slug, "0.1.1") + + refute page.has_content? "New versions require MFA" + refute page.has_content? "Version published with MFA" + end + + test "shows both mfa headers if MFA enabled for latest version and viewing latest version" do + @version.update_attribute :metadata, { "rubygems_mfa_required" => "true" } + + visit rubygem_path(@rubygem.slug) + + assert page.has_content? "New versions require MFA" + assert page.has_content? "Version published with MFA" + end + + test "shows neither mfa header if MFA disabled for latest version and viewing latest version" do + @version.update_attribute :metadata, { "rubygems_mfa_required" => "false" } + + visit rubygem_path(@rubygem.slug) + + refute page.has_content? "New versions require MFA" + refute page.has_content? "Version published with MFA" + end +end diff --git a/test/integration/locale_test.rb b/test/system/locale_test.rb similarity index 83% rename from test/integration/locale_test.rb rename to test/system/locale_test.rb index 217ebf30c4d..4edd83bdd18 100644 --- a/test/integration/locale_test.rb +++ b/test/system/locale_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class LocaleTest < SystemTest +class LocaleTest < ApplicationSystemTestCase test "html lang attribute is set from locale" do I18n.available_locales.each do |locale| visit root_path(locale: locale) diff --git a/test/integration/notification_settings_test.rb b/test/system/notification_settings_test.rb similarity index 96% rename from test/integration/notification_settings_test.rb rename to test/system/notification_settings_test.rb index 8b52edd7287..ba3e077e9e8 100644 --- a/test/integration/notification_settings_test.rb +++ b/test/system/notification_settings_test.rb @@ -1,7 +1,7 @@ -require "test_helper" +require "application_system_test_case" require "capybara/minitest" -class NotificationSettingsTest < SystemTest +class NotificationSettingsTest < ApplicationSystemTestCase include Capybara::Minitest::Assertions test "changing email notification settings" do diff --git a/test/integration/owner_test.rb b/test/system/owner_test.rb similarity index 99% rename from test/integration/owner_test.rb rename to test/system/owner_test.rb index ef1f5188738..d631833f241 100644 --- a/test/integration/owner_test.rb +++ b/test/system/owner_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class OwnerTest < SystemTest +class OwnerTest < ApplicationSystemTestCase include ActiveJob::TestHelper include RubygemsHelper diff --git a/test/integration/page_params_test.rb b/test/system/page_params_test.rb similarity index 96% rename from test/integration/page_params_test.rb rename to test/system/page_params_test.rb index 95260aad9cd..13b85c465cc 100644 --- a/test/integration/page_params_test.rb +++ b/test/system/page_params_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class PageParamsTest < SystemTest +class PageParamsTest < ApplicationSystemTestCase include SearchKickHelper test "stats with page param more than 10" do diff --git a/test/integration/pages_test.rb b/test/system/pages_test.rb similarity index 93% rename from test/integration/pages_test.rb rename to test/system/pages_test.rb index d326d207682..3eab5c27be4 100644 --- a/test/integration/pages_test.rb +++ b/test/system/pages_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class PagesTest < SystemTest +class PagesTest < ApplicationSystemTestCase test "gracefully fails on unknown page" do assert_raises(ActionController::RoutingError) do visit "/pages/not-existing-one" diff --git a/test/integration/password_reset_test.rb b/test/system/password_reset_test.rb similarity index 98% rename from test/integration/password_reset_test.rb rename to test/system/password_reset_test.rb index 02d8e851905..5370bc4f385 100644 --- a/test/integration/password_reset_test.rb +++ b/test/system/password_reset_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class PasswordResetTest < SystemTest +class PasswordResetTest < ApplicationSystemTestCase include ActiveJob::TestHelper def password_reset_link diff --git a/test/integration/policies_test.rb b/test/system/policies_test.rb similarity index 90% rename from test/integration/policies_test.rb rename to test/system/policies_test.rb index 5d16f9175d5..0c670b1997d 100644 --- a/test/integration/policies_test.rb +++ b/test/system/policies_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class PoliciesTest < SystemTest +class PoliciesTest < ApplicationSystemTestCase test "gracefully fails on unknown page" do assert_raises(ActionController::RoutingError) do visit "/policies/not-existing-one" diff --git a/test/system/profile_test.rb b/test/system/profile_test.rb index 0988e056b94..ca96b232d96 100644 --- a/test/system/profile_test.rb +++ b/test/system/profile_test.rb @@ -1,5 +1,4 @@ require "application_system_test_case" -require "test_helper" class ProfileTest < ApplicationSystemTestCase include ActiveJob::TestHelper diff --git a/test/integration/search_test.rb b/test/system/search_test.rb similarity index 97% rename from test/integration/search_test.rb rename to test/system/search_test.rb index ad5c2c91b6f..128533ebd19 100644 --- a/test/integration/search_test.rb +++ b/test/system/search_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class SearchTest < SystemTest +class SearchTest < ApplicationSystemTestCase include SearchKickHelper test "searching for a gem" do diff --git a/test/integration/sign_in_test.rb b/test/system/sign_in_test.rb similarity index 99% rename from test/integration/sign_in_test.rb rename to test/system/sign_in_test.rb index da222320e5d..8b24432b1f9 100644 --- a/test/integration/sign_in_test.rb +++ b/test/system/sign_in_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class SignInTest < SystemTest +class SignInTest < ApplicationSystemTestCase setup do @user = create(:user, email: "nick@example.com", password: PasswordHelpers::SECURE_TEST_PASSWORD, handle: nil) @mfa_user = create(:user, email: "john@example.com", password: PasswordHelpers::SECURE_TEST_PASSWORD, diff --git a/test/integration/sign_up_test.rb b/test/system/sign_up_test.rb similarity index 97% rename from test/integration/sign_up_test.rb rename to test/system/sign_up_test.rb index 625b95fe92c..c5e99b00e08 100644 --- a/test/integration/sign_up_test.rb +++ b/test/system/sign_up_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class SignUpTest < SystemTest +class SignUpTest < ApplicationSystemTestCase test "sign up" do visit sign_up_path diff --git a/test/integration/subscriptions_test.rb b/test/system/subscriptions_test.rb similarity index 90% rename from test/integration/subscriptions_test.rb rename to test/system/subscriptions_test.rb index 6e7d65644bb..a2c710c6f67 100644 --- a/test/integration/subscriptions_test.rb +++ b/test/system/subscriptions_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class SubscriptionsTest < SystemTest +class SubscriptionsTest < ApplicationSystemTestCase setup do @user = create(:user) @rubygem = create(:rubygem, name: "sandworm", number: "1.0.0") diff --git a/test/integration/yank_test.rb b/test/system/yank_test.rb similarity index 97% rename from test/integration/yank_test.rb rename to test/system/yank_test.rb index 3d433b0da4d..a447539670c 100644 --- a/test/integration/yank_test.rb +++ b/test/system/yank_test.rb @@ -1,6 +1,6 @@ -require "test_helper" +require "application_system_test_case" -class YankTest < SystemTest +class YankTest < ApplicationSystemTestCase setup do @user = create(:user, password: PasswordHelpers::SECURE_TEST_PASSWORD) @rubygem = create(:rubygem, name: "sandworm") diff --git a/test/test_helper.rb b/test/test_helper.rb index fb8a3b72224..f366e3e1c8b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -296,17 +296,6 @@ def refute_signed_in # Force loading of ActionDispatch::SystemTesting::* helpers _ = ActionDispatch::SystemTestCase -class SystemTest < ActionDispatch::IntegrationTest - include Capybara::DSL - include Capybara::Minitest::Assertions - include ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper - include ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown - - setup do - Capybara.current_driver = :rack_test - end -end - class AdminPolicyTestCase < ActiveSupport::TestCase def setup requires_avo_pro