Files
nairobi/spec/system/verification/email_spec.rb
Javi Martín 92fc45cbb4 Don't destroy records during a system test
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.

In this case, however, I haven't found a way to destroy the VerifiedUser
record using the interface, so we're stubbing `VerifiedUser` instead.
Note we can't stub it since the beginning of the test because we're
testing what happens when clicking the "Send code" button doesn't work,
and we wouldn't be able to access the page containing the "Send code" if
we stubbed `VerifiedUser` since the beginning of the test.
2025-04-01 14:53:27 +02:00

67 lines
2.0 KiB
Ruby

require "rails_helper"
describe "Verify email" do
scenario "Verify" do
user = create(:user,
residence_verified_at: Time.current,
document_number: "12345678Z",
document_type: "dni")
verified_user = create(:verified_user,
document_number: "12345678Z",
document_type: "dni",
email: "rock@example.com")
login_as(user)
visit verified_user_path
within("#verified_user_#{verified_user.id}_email") do
expect(page).to have_content "roc*@example.com"
click_button "Send code"
end
expect(page).to have_content "We have sent a confirmation email to your account: rock@example.com"
sent_token = /.*email_verification_token=(.*)".*/.match(ActionMailer::Base.deliveries.last.body.to_s)[1]
visit email_path(email_verification_token: sent_token)
expect(page).to have_content "You are a verified user"
expect(page).not_to have_link "Verify my account"
expect(page).to have_content "Account verified"
end
scenario "Errors on token verification" do
user = create(:user, residence_verified_at: Time.current)
login_as(user)
visit email_path(email_verification_token: "1234")
expect(page).to have_content "Verification code incorrect"
end
scenario "Errors on sending confirmation email" do
user = create(:user,
residence_verified_at: Time.current,
document_number: "12345678Z",
document_type: "dni")
create(:verified_user,
document_number: "12345678Z",
document_type: "dni",
email: "rock@example.com")
login_as(user)
visit verified_user_path
expect(page).to have_button "Send code"
allow(VerifiedUser).to receive(:by_user).and_return(VerifiedUser.none)
click_button "Send code"
expect(page).to have_content "There was a problem with sending an email to your account"
end
end