Files
openfoodnetwork/spec/controllers/user_confirmations_controller_spec.rb
Luis Ramos 0f29806198 Adapt code to devise 3.2 where the reset_password_token stored in the db is a encrypted version of the token sent in the email
In this particular case, the user confirmations controller is redirecting to the reset password page but it doesnt know what is the raw reset_password_token

So we regenerate the reset password token so that it can know what's the raw value for the redirect

The method User#regenerate_reset_password_token is a proxy to the protected method in Devise::Recoverable
2020-07-31 09:05:42 +01:00

79 lines
2.9 KiB
Ruby

require 'spec_helper'
describe UserConfirmationsController, type: :controller do
include AuthenticationWorkflow
include OpenFoodNetwork::EmailHelper
let!(:user) { create_enterprise_user }
let!(:confirmed_user) { create_enterprise_user(confirmed_at: nil) }
let!(:unconfirmed_user) { create_enterprise_user(confirmed_at: nil) }
let!(:confirmed_token) { confirmed_user.confirmation_token }
before do
@request.env["devise.mapping"] = Devise.mappings[:spree_user]
confirmed_user.confirm!
end
context "confirming a user" do
context "that has already been confirmed" do
before do
spree_get :show, confirmation_token: confirmed_token
end
it "redirects the user to login" do
expect(response).to redirect_to login_path(validation: 'not_confirmed')
end
end
context "that has not been confirmed" do
it "confirms the user" do
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(unconfirmed_user.reload.confirmed_at).not_to eq(nil)
end
it "redirects the user to #/login by default" do
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(response).to redirect_to login_path(validation: 'confirmed')
end
it "redirects to previous url, if present" do
session[:confirmation_return_url] = producers_path + '#/login'
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(response).to redirect_to producers_path + '#/login?validation=confirmed'
end
it "redirects to previous url on /register path" do
session[:confirmation_return_url] = registration_path + '#/signup?after_login=%2Fregister'
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(response).to redirect_to registration_path + '#/signup?after_login=%2Fregister&validation=confirmed'
end
it "redirects to set password page, if user needs to reset their password" do
unconfirmed_user.reset_password_token = Devise.friendly_token
unconfirmed_user.save!
spree_get :show, confirmation_token: unconfirmed_user.confirmation_token
expect(response).to be_redirect
expect(response.body).to include spree.edit_spree_user_password_path
end
end
end
context "requesting confirmation instructions to be resent" do
before { setup_email }
it "redirects the user to login" do
spree_post :create, spree_user: { email: unconfirmed_user.email }
expect(response).to redirect_to login_path
expect(flash[:success]).to eq I18n.t('devise.user_confirmations.spree_user.confirmation_sent')
end
it "sends the confirmation email" do
performing_deliveries do
expect do
spree_post :create, spree_user: { email: unconfirmed_user.email }
end.to send_confirmation_instructions
end
end
end
end