discourse/spec/system/user_page/user_preferences_profile_spec.rb
Ted Johansson b1321b985a
DEV: Allow enabling safe-mode even when missing required fields (#29310)
When a user is missing required fields, they are required to fill those up before continuing to interact with the forum. This applies to admins as well.

We keep a whitelist of paths that can still be visited in this mode: FAQ, About, 2FA setup, and any admin route for admins.

We concluded that admins should still be able to enable safe mode even with missing required fields. Since plugins etc. can potentially mess with the ability to fill those up.
2024-10-21 17:11:43 +08:00

92 lines
2.5 KiB
Ruby

# frozen_string_literal: true
describe "User preferences | Profile", type: :system do
fab!(:user) { Fabricate(:user, active: true) }
let(:user_preferences_profile_page) { PageObjects::Pages::UserPreferencesProfile.new }
let(:user_preferences_page) { PageObjects::Pages::UserPreferences.new }
before { sign_in(user) }
describe "changing bio" do
it "correctly updates the bio" do
user_preferences_profile_page.visit(user)
user_preferences_profile_page.expand_profile_details
user_preferences_profile_page.fill_bio(with: "I am a human.")
user_preferences_profile_page.save
expect(user_preferences_profile_page.cooked_bio).to have_text("I am a human.")
end
end
describe "enforcing required fields" do
before do
UserRequiredFieldsVersion.create!
UserField.create!(
field_type: "text",
name: "Favourite Pokemon",
description: "Hint: It's Mudkip.",
requirement: :for_all_users,
editable: true,
)
end
it "server-side redirects to the profile page to fill up required fields" do
visit("/")
expect(page).to have_current_path("/u/#{user.username}/preferences/profile")
expect(page).to have_selector(
".alert-error",
text: I18n.t("js.user.preferences.profile.enforced_required_fields"),
)
end
it "client-side redirects to the profile page to fill up required fields" do
visit("/faq")
expect(page).to have_current_path("/faq")
click_logo
expect(page).to have_current_path("/u/#{user.username}/preferences/profile")
expect(page).to have_selector(
".alert-error",
text: I18n.t("js.user.preferences.profile.enforced_required_fields"),
)
end
it "disables client-side routing while missing required fields" do
user_preferences_profile_page.visit(user)
click_logo
expect(page).to have_current_path("/u/#{user.username}/preferences/profile")
end
it "allows user to fill up required fields" do
user_preferences_profile_page.visit(user)
find(".user-field-favourite-pokemon input").fill_in(with: "Mudkip")
find(".save-button .btn-primary").click
expect(page).to have_selector(".pref-bio")
visit("/")
expect(page).to have_current_path("/")
end
it "allows enabling safe-mode" do
visit("/safe-mode")
expect(page).to have_current_path("/safe-mode")
page.find("#btn-enter-safe-mode").click
expect(page).to have_current_path("/u/#{user.username}/preferences/profile")
end
end
end