As mentioned in commits likea586ba806,a7664ad81,006128da5,b41fbfa52andc480cdd91, 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.
253 lines
7.4 KiB
Ruby
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
|