7684217d68
This enforces the terms in the web application. These cases are specced: - Logging in: When terms are enforced, and a user logs in that has not accepted the terms, they are presented with the screen. They get directed to their customized root path afterwards. - Signing up: After signing up, the first screen the user is presented with the screen to accept the terms. After they accept they are directed to the dashboard. - While a session is active: - For a GET: The user will be directed to the terms page first, after they accept the terms, they will be directed to the page they were going to - For any other request: They are directed to the terms, after they accept the terms, they are directed back to the page they came from to retry the request. Any information entered would be persisted in localstorage and available on the page.
160 lines
5.3 KiB
Ruby
160 lines
5.3 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe 'Signup' do
|
|
include TermsHelper
|
|
|
|
let(:new_user) { build_stubbed(:user) }
|
|
|
|
describe 'username validation', :js do
|
|
before do
|
|
visit root_path
|
|
click_link 'Register'
|
|
end
|
|
|
|
it 'does not show an error border if the username is available' do
|
|
fill_in 'new_user_username', with: 'new-user'
|
|
wait_for_requests
|
|
|
|
expect(find('.username')).not_to have_css '.gl-field-error-outline'
|
|
end
|
|
|
|
it 'does not show an error border if the username contains dots (.)' do
|
|
fill_in 'new_user_username', with: 'new.user.username'
|
|
wait_for_requests
|
|
|
|
expect(find('.username')).not_to have_css '.gl-field-error-outline'
|
|
end
|
|
|
|
it 'shows an error border if the username already exists' do
|
|
existing_user = create(:user)
|
|
|
|
fill_in 'new_user_username', with: existing_user.username
|
|
wait_for_requests
|
|
|
|
expect(find('.username')).to have_css '.gl-field-error-outline'
|
|
end
|
|
|
|
it 'shows an error border if the username contains special characters' do
|
|
fill_in 'new_user_username', with: 'new$user!username'
|
|
wait_for_requests
|
|
|
|
expect(find('.username')).to have_css '.gl-field-error-outline'
|
|
end
|
|
end
|
|
|
|
context 'with no errors' do
|
|
context "when sending confirmation email" do
|
|
before do
|
|
stub_application_setting(send_user_confirmation_email: true)
|
|
end
|
|
|
|
it 'creates the user account and sends a confirmation email' do
|
|
visit root_path
|
|
|
|
fill_in 'new_user_name', with: new_user.name
|
|
fill_in 'new_user_username', with: new_user.username
|
|
fill_in 'new_user_email', with: new_user.email
|
|
fill_in 'new_user_email_confirmation', with: new_user.email
|
|
fill_in 'new_user_password', with: new_user.password
|
|
|
|
expect { click_button 'Register' }.to change { User.count }.by(1)
|
|
|
|
expect(current_path).to eq users_almost_there_path
|
|
expect(page).to have_content("Please check your email to confirm your account")
|
|
end
|
|
end
|
|
|
|
context "when sigining up with different cased emails" do
|
|
it "creates the user successfully" do
|
|
visit root_path
|
|
|
|
fill_in 'new_user_name', with: new_user.name
|
|
fill_in 'new_user_username', with: new_user.username
|
|
fill_in 'new_user_email', with: new_user.email
|
|
fill_in 'new_user_email_confirmation', with: new_user.email.capitalize
|
|
fill_in 'new_user_password', with: new_user.password
|
|
click_button "Register"
|
|
|
|
expect(current_path).to eq dashboard_projects_path
|
|
expect(page).to have_content("Welcome! You have signed up successfully.")
|
|
end
|
|
end
|
|
|
|
context "when not sending confirmation email" do
|
|
before do
|
|
stub_application_setting(send_user_confirmation_email: false)
|
|
end
|
|
|
|
it 'creates the user account and goes to dashboard' do
|
|
visit root_path
|
|
|
|
fill_in 'new_user_name', with: new_user.name
|
|
fill_in 'new_user_username', with: new_user.username
|
|
fill_in 'new_user_email', with: new_user.email
|
|
fill_in 'new_user_email_confirmation', with: new_user.email
|
|
fill_in 'new_user_password', with: new_user.password
|
|
click_button "Register"
|
|
|
|
expect(current_path).to eq dashboard_projects_path
|
|
expect(page).to have_content("Welcome! You have signed up successfully.")
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'with errors' do
|
|
it "displays the errors" do
|
|
existing_user = create(:user)
|
|
|
|
visit root_path
|
|
|
|
fill_in 'new_user_name', with: new_user.name
|
|
fill_in 'new_user_username', with: new_user.username
|
|
fill_in 'new_user_email', with: existing_user.email
|
|
fill_in 'new_user_password', with: new_user.password
|
|
click_button "Register"
|
|
|
|
expect(current_path).to eq user_registration_path
|
|
expect(page).to have_content("errors prohibited this user from being saved")
|
|
expect(page).to have_content("Email has already been taken")
|
|
expect(page).to have_content("Email confirmation doesn't match")
|
|
end
|
|
|
|
it 'does not redisplay the password' do
|
|
existing_user = create(:user)
|
|
|
|
visit root_path
|
|
|
|
fill_in 'new_user_name', with: new_user.name
|
|
fill_in 'new_user_username', with: new_user.username
|
|
fill_in 'new_user_email', with: existing_user.email
|
|
fill_in 'new_user_password', with: new_user.password
|
|
click_button "Register"
|
|
|
|
expect(current_path).to eq user_registration_path
|
|
expect(page.body).not_to match(/#{new_user.password}/)
|
|
end
|
|
end
|
|
|
|
context 'when terms are enforced' do
|
|
before do
|
|
enforce_terms
|
|
end
|
|
|
|
it 'asks the user to accept terms before going to the dashboard' do
|
|
visit root_path
|
|
|
|
fill_in 'new_user_name', with: new_user.name
|
|
fill_in 'new_user_username', with: new_user.username
|
|
fill_in 'new_user_email', with: new_user.email
|
|
fill_in 'new_user_email_confirmation', with: new_user.email
|
|
fill_in 'new_user_password', with: new_user.password
|
|
click_button "Register"
|
|
|
|
expect_to_be_on_terms_page
|
|
|
|
click_button 'Accept terms'
|
|
|
|
expect(current_path).to eq dashboard_projects_path
|
|
end
|
|
end
|
|
end
|