Fixed #267 Email verification feature (#268)

* <Implemented basic welcome email upon signup>

* <Added config option to enable>

* <Added verification link routing>

* <Added views for verify/resend and reconfigured routes>

* <Finished Verification System minus Rspec changes>

* <Fixed code style>

* <Modified dome rspec tests>

* <Switched sample env back to default>

* <Added test cases to increase code coverage>

* <Added test_helper>

* <Minor code changes>

* <Added requested changes>

* <Added requested changes>

* <see if this fixes migration>

* <see if this fixes migration>

* <fixed migrations>

* Delete .rake_tasks~

* Update _confirm_button.html.erb

* Update _resend_button.html.erb

* Update verify_email.html.erb

* Update verify_email.text.erb

* <Fixed bugs>

* <Added validation of verification link and fixed some code style>

* <Disabled updating email for omniauth>
This commit is contained in:
John Ma
2018-10-09 14:22:02 -04:00
committed by Jesus Federico
parent daaf305c30
commit 967c805836
26 changed files with 371 additions and 7 deletions

View File

@ -27,6 +27,7 @@ def random_valid_user_params
password: pass,
password_confirmation: pass,
accepted_terms: true,
email_verified: true,
},
}
end
@ -40,6 +41,7 @@ describe UsersController, type: :controller do
password: "pass",
password_confirmation: "invalid",
accepted_terms: false,
email_verified: false,
},
}
end
@ -56,6 +58,7 @@ describe UsersController, type: :controller do
describe "POST #create" do
context "allow greenlight accounts" do
before { allow(Rails.configuration).to receive(:allow_user_signup).and_return(true) }
before { allow(Rails.configuration).to receive(:enable_email_verification).and_return(false) }
it "redirects to user room on successful create" do
params = random_valid_user_params
@ -65,6 +68,7 @@ describe UsersController, type: :controller do
expect(u).to_not be_nil
expect(u.name).to eql(params[:user][:name])
expect(response).to redirect_to(room_path(u.main_room))
end
@ -125,4 +129,57 @@ describe UsersController, type: :controller do
expect(response).to render_template(:edit)
end
end
describe "GET | POST #resend" do
before { allow(Rails.configuration).to receive(:allow_user_signup).and_return(true) }
before { allow(Rails.configuration).to receive(:enable_email_verification).and_return(true) }
it "redirects to main room if verified" do
params = random_valid_user_params
post :create, params: params
u = User.find_by(name: params[:user][:name], email: params[:user][:email])
u.email_verified = false
get :resend
expect(response).to render_template(:verify)
end
it "resend email upon click if unverified" do
params = random_valid_user_params
post :create, params: params
u = User.find_by(name: params[:user][:name], email: params[:user][:email])
u.email_verified = false
expect { post :resend, params: { email_verified: false } }.to change { ActionMailer::Base.deliveries.count }.by(1)
expect(response).to render_template(:verify)
end
end
describe "GET | POST #confirm" do
before { allow(Rails.configuration).to receive(:allow_user_signup).and_return(true) }
before { allow(Rails.configuration).to receive(:enable_email_verification).and_return(true) }
it "redirects to main room if already verified" do
params = random_valid_user_params
post :create, params: params
u = User.find_by(name: params[:user][:name], email: params[:user][:email])
post :confirm, params: { user_uid: u.uid, email_verified: true }
expect(response).to redirect_to(room_path(u.main_room))
end
it "renders confirmation pane if unverified" do
params = random_valid_user_params
post :create, params: params
u = User.find_by(name: params[:user][:name], email: params[:user][:email])
u.email_verified = false
get :confirm, params: { user_uid: u.uid }
expect(response).to render_template(:verify)
end
end
end

View File

@ -28,6 +28,7 @@ FactoryBot.define do
password { password }
password_confirmation { password }
accepted_terms { true }
email_verified { true }
end
factory :room do