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. For example, one of these tests has recently failed on our CI: ``` 3) Users Create a level 3 user with email from scratch Failure/Error: expect(user.reload).to be_confirmed expected `#<User id: 2060, email: "pepe@gmail.com", created_at: "2025-03-12 19:51:03.688867000 +0100", updated_...d_debates: true, recommended_proposals: true, subscriptions_token: nil, registering_from_web: false>.confirmed?` to be truthy, got false ``` IMHO this is also a bad practice for system tests, since these tests should be checking what users experience. So we're modifying the tests to check the results of users interaction from the point of view of the users. For example, instead of checking that a user is now level 3 verified in the database, we're checking that the user interface states that the user is level 3 verified. Note we're adding an offset when editing the map marker by clicking on `map-location` with `.click(x: 30, y: 30)`. This way we make sure that both the latitude and longitude change from the original values; we used to clicking in the middle (no offset), which didn't change the longitude and changed the latitude just by coincidence. 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.
113 lines
4.0 KiB
Ruby
113 lines
4.0 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "DocumentVerifications" do
|
|
scenario "Verifying a level 3 user shows an 'already verified' page" do
|
|
user = create(:user, :level_three)
|
|
|
|
login_as_manager
|
|
visit management_document_verifications_path
|
|
fill_in "document_verification_document_number", with: user.document_number
|
|
click_button "Check document"
|
|
|
|
expect(page).to have_content "already verified"
|
|
end
|
|
|
|
scenario "Verifying a level 2 user displays the verification form" do
|
|
user = create(:user, :level_two)
|
|
|
|
login_as_manager
|
|
visit management_document_verifications_path
|
|
fill_in "document_verification_document_number", with: user.document_number
|
|
click_button "Check document"
|
|
|
|
expect(page).to have_content "Vote for budget projects"
|
|
|
|
click_button "Verify"
|
|
|
|
expect(page).to have_content "already verified"
|
|
|
|
visit management_document_verifications_path
|
|
fill_in "document_verification_document_number", with: user.document_number
|
|
click_button "Check document"
|
|
|
|
expect(page).to have_content "already verified"
|
|
end
|
|
|
|
describe "Verifying througth Census" do
|
|
context "Census API" do
|
|
scenario "Verifying a user which does not exist and is not in the census shows an error" do
|
|
expect_any_instance_of(Verification::Management::Document)
|
|
.to receive(:in_census?)
|
|
.and_return(false)
|
|
|
|
login_as_manager
|
|
visit management_document_verifications_path
|
|
fill_in "document_verification_document_number", with: "inexisting"
|
|
click_button "Check document"
|
|
|
|
expect(page).to have_content "This document is not registered"
|
|
end
|
|
|
|
scenario "Verifying a user who exists in the census but not in the db allows sending an email" do
|
|
login_as_manager
|
|
visit management_document_verifications_path
|
|
fill_in "document_verification_document_number", with: "12345678Z"
|
|
click_button "Check document"
|
|
|
|
expect(page).to have_content "Please introduce the email used on the account"
|
|
end
|
|
end
|
|
|
|
context "Remote Census API", :remote_census do
|
|
scenario "Verifying a user which does not exist and is not in the census shows an error" do
|
|
expect_any_instance_of(Verification::Management::Document)
|
|
.to receive(:in_census?)
|
|
.and_return(false)
|
|
|
|
login_as_manager
|
|
visit management_document_verifications_path
|
|
fill_in "document_verification_document_number", with: "12345678Z"
|
|
fill_in "Date of birth", with: Date.new(1980, 12, 31)
|
|
fill_in "document_verification_postal_code", with: "inexisting"
|
|
click_button "Check document"
|
|
|
|
expect(page).to have_content "This document is not registered"
|
|
end
|
|
|
|
scenario "Verifying a user which does exists in the census but not in the db
|
|
redirects allows sending an email" do
|
|
mock_valid_remote_census_response
|
|
|
|
login_as_manager
|
|
visit management_document_verifications_path
|
|
fill_in "document_verification_document_number", with: "12345678Z"
|
|
fill_in "Date of birth", with: Date.new(1980, 12, 31)
|
|
fill_in "document_verification_postal_code", with: "28013"
|
|
click_button "Check document"
|
|
|
|
expect(page).to have_content "Please introduce the email used on the account"
|
|
end
|
|
end
|
|
end
|
|
|
|
scenario "Document number is format-standarized" do
|
|
login_as_manager
|
|
visit management_document_verifications_path
|
|
fill_in "document_verification_document_number", with: "12345 - h"
|
|
click_button "Check document"
|
|
|
|
expect(page).to have_content "Document number: 12345H"
|
|
end
|
|
|
|
scenario "User age is checked" do
|
|
expect_any_instance_of(Verification::Management::Document).to receive(:under_age?).and_return(true)
|
|
|
|
login_as_manager
|
|
visit management_document_verifications_path
|
|
fill_in "document_verification_document_number", with: "12345678Z"
|
|
click_button "Check document"
|
|
|
|
expect(page).to have_content "You don't have the required age to verify your account."
|
|
end
|
|
end
|