Files
grecia/spec/system/account_spec.rb
Javi Martín f93c85bd2e Don't check the database during system tests
As mentioned in commits like a586ba806, a7664ad81, 006128da5, b41fbfa52
and c480cdd91, accessing the database after starting the browser with
the `visit` method sometimes results in database corruption and failing
tests on our CI due to the process running the test accessing the
database after the process running the browser has started.

IMHO this is also a bad practice for system tests, since these tests
should be checking what users experience.

So, just like we did a few commits ago with tests that reloaded records,
we're modifying the tests to check the results of user interactions from
the point of view of the users.

Also note we aren't changing tests with the `:no_js` tag, since these
tests don't run a real browser in a separate process. In the future, we
should also change most of these tests so they don't access the database
and they use a real browser.

Finally, note that one of the tests we're changing in the shared
`notifiable_in_app` file did not check the database content, but we're
also changing it for consistency.
2025-04-01 14:53:27 +02:00

253 lines
7.4 KiB
Ruby

require "rails_helper"
describe "Account" do
let(:user) { create(:user, username: "Manuela Colau") }
before do
login_as(user)
end
scenario "Show" do
visit root_path
click_link "My account"
expect(page).to have_current_path(account_path, ignore_query: true)
expect(page).to have_css "input[value='Manuela Colau']"
expect(page).to have_avatar "M", count: 1
end
scenario "Show organization" do
create(:organization, user: user, name: "Manuela Corp")
visit account_path
expect(page).to have_css "input[value='Manuela Corp']"
expect(page).not_to have_css "input[value='Manuela Colau']"
expect(page).to have_avatar "M", count: 1
end
scenario "Edit" do
visit account_path
fill_in "account_username", with: "Larry Bird"
check "account_email_on_comment"
check "account_email_on_comment_reply"
uncheck "account_email_digest"
uncheck "account_email_on_direct_message"
click_button "Save changes"
expect(page).to have_content "Changes saved"
refresh
expect(page).not_to have_content "Changes saved"
expect(page).to have_css "input[value='Larry Bird']"
expect(find("#account_email_on_comment")).to be_checked
expect(find("#account_email_on_comment_reply")).to be_checked
expect(find("#account_email_digest")).not_to be_checked
expect(find("#account_email_on_direct_message")).not_to be_checked
end
scenario "Edit email address" do
visit account_path
click_link "Change my login details"
fill_in "user_email", with: "new_user_email@example.com"
fill_in "user_password", with: "new_password"
fill_in "user_password_confirmation", with: "new_password"
fill_in "user_current_password", with: "judgmentday"
click_button "Update"
notice = "Your account has been updated successfully;" \
" however, we need to verify your new email address." \
" Please check your email and click on the link to" \
" complete the confirmation of your new email address."
expect(page).to have_content notice
open_last_email
visit_in_email("Confirm my account")
logout
login_through_form_with("new_user_email@example.com", password: "new_password")
expect(page).to have_content "You have been signed in successfully."
visit account_path
click_link "Change my login details"
expect(page).to have_css "input[value='new_user_email@example.com']"
end
scenario "Edit Organization" do
create(:organization, user: user, name: "Manuela Corp")
visit account_path
fill_in "account_organization_attributes_name", with: "Google"
check "account_email_on_comment"
check "account_email_on_comment_reply"
click_button "Save changes"
expect(page).to have_content "Changes saved"
refresh
expect(page).not_to have_content "Changes saved"
expect(page).to have_css "input[value='Google']"
expect(find("#account_email_on_comment")).to be_checked
expect(find("#account_email_on_comment_reply")).to be_checked
end
describe "Email digest checkbox" do
scenario "Appears when the proposals process is enabled" do
visit account_path
expect(page).to have_field "Receive a summary of proposal notifications", checked: true
end
scenario "Does not appear when the proposals process is disabled" do
Setting["process.proposals"] = false
visit account_path
expect(page).not_to have_field "Receive a summary of proposal notifications"
end
end
context "Option to display badge for official position" do
scenario "Users with official position of level 1" do
official_user = create(:user, official_level: 1)
login_as(official_user)
visit account_path
check "account_official_position_badge"
click_button "Save changes"
expect(page).to have_content "Changes saved"
refresh
expect(page).not_to have_content "Changes saved"
expect(find("#account_official_position_badge")).to be_checked
end
scenario "Users with official position of level 2 and above" do
official_user2 = create(:user, official_level: 2, username: "Official 2")
official_user3 = create(:user, official_level: 3, username: "Official 3")
login_as(official_user2)
visit account_path
expect(page).to have_field "Username", with: "Official 2"
expect(page).not_to have_css "#account_official_position_badge"
login_as(official_user3)
refresh
expect(page).to have_field "Username", with: "Official 3"
expect(page).not_to have_css "#account_official_position_badge"
end
end
scenario "Errors on edit" do
visit account_path
fill_in "account_username", with: ""
click_button "Save changes"
expect(page).to have_content error_message
end
scenario "Errors editing credentials" do
visit root_path
click_link "My account"
expect(page).to have_current_path(account_path, ignore_query: true)
click_link "Change my login details"
click_button "Update"
expect(page).to have_content error_message
end
scenario "Erasing account" do
visit account_path
click_link "Erase my account"
fill_in "user_erase_reason", with: "a test"
click_button "Erase my account"
expect(page).to have_content "Goodbye! Your account has been cancelled. We hope to see you again soon."
login_through_form_as(user)
expect(page).to have_content "Invalid Email or username or password"
end
scenario "Erasing an account removes all related roles" do
user.update!(username: "Admin")
administrators = [create(:administrator, user: user),
create(:administrator, user: create(:user, username: "Other admin"))]
other_user = administrators.last.user
budget = create(:budget, administrators: administrators)
visit admin_budget_budget_investments_path(budget)
expect(page).to have_select options: ["All administrators", "Admin", "Other admin"]
visit account_path
click_link "Erase my account"
fill_in "user_erase_reason", with: "I don't want my roles anymore!"
click_button "Erase my account"
expect(page).to have_content "Goodbye! Your account has been cancelled. We hope to see you again soon."
login_as(other_user)
visit admin_budget_budget_investments_path(budget)
expect(page).to have_select options: ["All administrators", "Other admin"]
end
context "Recommendations" do
scenario "are enabled by default" do
visit account_path
expect(page).to have_content "Recommendations"
expect(page).to have_field "Recommend debates to me", checked: true
expect(page).to have_field "Recommend proposals to me", checked: true
end
scenario "can be disabled through 'My account' page" do
visit account_path
expect(page).to have_content "Recommendations"
expect(page).to have_field "Recommend debates to me", checked: true
expect(page).to have_field "Recommend proposals to me", checked: true
uncheck "Recommend debates to me"
uncheck "Recommend proposals to me"
click_button "Save changes"
expect(page).to have_content "Changes saved"
expect(page).to have_field "Recommend debates to me", checked: false
expect(page).to have_field "Recommend proposals to me", checked: false
visit debates_path
expect(page).not_to have_link("recommendations")
visit proposals_path
expect(page).not_to have_link("recommendations")
end
end
end