Files
grecia/spec/system/management/document_verifications_spec.rb
Javi Martín 1b8a079727 Don't reload records in 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.

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.
2025-04-01 14:53:26 +02:00

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