diff --git a/app/services/users/signup_service.rb b/app/services/users/signup_service.rb index 1031cec44cb1d3ba8b2fa564be53fb208c18ba70..1087ae76216e5917d6e947ec7af69726f37f714f 100644 --- a/app/services/users/signup_service.rb +++ b/app/services/users/signup_service.rb @@ -27,7 +27,7 @@ def assign_attributes def inject_validators class << @user validates :role, presence: true - validates :setup_for_company, inclusion: { in: [true, false], message: :blank } + validates :setup_for_company, inclusion: { in: [true, false], message: :blank } if Gitlab.com? end end end diff --git a/app/views/registrations/welcome.html.haml b/app/views/registrations/welcome.html.haml index ef3e0b1b4c00a71dc21af79eed8dd4cd1f9e2e3c..bdde5de0f617487063e7c13334d9914f951a3f27 100644 --- a/app/views/registrations/welcome.html.haml +++ b/app/views/registrations/welcome.html.haml @@ -1,22 +1,26 @@ -- content_for(:page_title, _('Welcome to GitLab %{name}!') % { name: current_user.name }) -.text-center.mb-3 - = html_escape(_('In order to tailor your experience with GitLab we%{br_tag}would like to know a bit more about you.')) % { br_tag: '<br/>'.html_safe } -.signup-box.p-3.mb-2 - .signup-body - = form_for(current_user, url: users_sign_up_update_registration_path, html: { class: 'new_new_user gl-show-field-errors', 'aria-live' => 'assertive' }) do |f| - .devise-errors.mt-0 - = render 'devise/shared/error_messages', resource: current_user - .form-group - = f.label :role, _('Role'), class: 'label-bold' - = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, {}, class: 'form-control' - .form-group - = f.label :setup_for_company, _('Are you setting up GitLab for a company?'), class: 'label-bold' - .d-flex.justify-content-center - .w-25 - = f.radio_button :setup_for_company, true - = f.label :setup_for_company, _('Yes'), value: 'true' - .w-25 - = f.radio_button :setup_for_company, false - = f.label :setup_for_company, _('No'), value: 'false' - .submit-container.mt-3 - = f.submit _('Get started!'), class: 'btn-register btn btn-block mb-0 p-2' +- page_title _('Your profile') + +.row.gl-flex-grow-1.gl-bg-gray-10 + .d-flex.gl-flex-direction-column.gl-align-items-center.gl-w-full.gl-p-5 + .edit-profile.login-page.d-flex.flex-column.gl-align-items-center.pt-lg-3 + = render_if_exists "registrations/welcome/progress_bar" + %h2.gl-text-center= html_escape(_('Welcome to GitLab%{br_tag}%{name}!')) % { name: html_escape(current_user.first_name), br_tag: '<br/>'.html_safe } + %p + .gl-text-center= html_escape(_('In order to personalize your experience with GitLab%{br_tag}we would like to know a bit more about you.')) % { br_tag: '<br/>'.html_safe } + + = form_for(current_user, url: users_sign_up_update_registration_path, html: { class: 'card gl-w-full! gl-p-5', 'aria-live' => 'assertive' }) do |f| + .devise-errors + = render 'devise/shared/error_messages', resource: current_user + .row + .form-group.col-sm-12 + = f.label :role, _('Role'), class: 'label-bold' + = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, {}, class: 'form-control', autofocus: true + .form-text.gl-text-gray-500.gl-mt-3= _('This will help us personalize your onboarding experience.') + = render_if_exists "registrations/welcome/setup_for_company", f: f + .row + .form-group.col-sm-12.gl-mb-0 + - if partial_exists? "registrations/welcome/button" + = render "registrations/welcome/button" + - else + = f.submit _('Get started!'), class: 'btn-register btn btn-block gl-mb-0 gl-p-3' + diff --git a/ee/app/views/registrations/welcome.html.haml b/ee/app/views/registrations/welcome.html.haml deleted file mode 100644 index c00924771dec1027ca8e0859e9f3d5efa4b1a24e..0000000000000000000000000000000000000000 --- a/ee/app/views/registrations/welcome.html.haml +++ /dev/null @@ -1,34 +0,0 @@ -- page_title _('Your profile') -- onboarding_issues_experiment_enabled = experiment_enabled?(:onboarding_issues) - -.row.flex-grow-1.bg-gray-light - .d-flex.flex-column.align-items-center.w-100.gl-p-5 - .edit-profile.login-page.d-flex.flex-column.align-items-center.pt-lg-3 - - if in_subscription_flow? || (onboarding_issues_experiment_enabled && !in_invitation_flow? && !in_oauth_flow? && !in_trial_flow?) - #progress-bar{ data: { is_in_subscription_flow: in_subscription_flow?.to_s, is_onboarding_issues_experiment_enabled: onboarding_issues_experiment_enabled.to_s } } - %h2.center= html_escape(_('Welcome to GitLab.com%{br_tag}@%{name}!')) % { name: html_escape(current_user.first_name), br_tag: '<br/>'.html_safe } - %p - .center= html_escape(_('In order to personalize your experience with GitLab%{br_tag}we would like to know a bit more about you.')) % { br_tag: '<br/>'.html_safe } - - = form_for(current_user, url: users_sign_up_update_registration_path, html: { class: 'card w-100 gl-p-5', 'aria-live' => 'assertive' }) do |f| - .devise-errors - = render 'devise/shared/error_messages', resource: current_user - .row - .form-group.col-sm-12 - = f.label :role, _('Role'), class: 'label-bold' - = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, {}, class: 'form-control input-lg', autofocus: true - .form-text.text-muted= _('This will help us personalize your onboarding experience.') - .row - .form-group.col-sm-12 - = f.label :setup_for_company, setup_for_company_label_text, class: 'label-bold' - .d-flex.flex-column.flex-lg-row - .flex-grow-1 - = f.radio_button :setup_for_company, true - = f.label :setup_for_company, _('My company or team'), class: 'normal', value: 'true' - .flex-grow-1 - = f.radio_button :setup_for_company, false - = f.label :setup_for_company, _('Just me'), class: 'normal', value: 'false' - .row - .form-group.col-sm-12.mb-0 - = button_tag class: %w[btn btn-success w-100] do - = in_subscription_flow? || in_trial_flow? || (onboarding_issues_experiment_enabled && !in_invitation_flow? && !in_oauth_flow?) ? _('Continue') : _('Get started!') diff --git a/ee/app/views/registrations/welcome/_button.html.haml b/ee/app/views/registrations/welcome/_button.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..e400161e2c3cfe872282f3363e0a2445671dda2e --- /dev/null +++ b/ee/app/views/registrations/welcome/_button.html.haml @@ -0,0 +1,4 @@ +- onboarding_issues_experiment_enabled = experiment_enabled?(:onboarding_issues) + += button_tag class: %w[btn btn-success w-100] do + = in_subscription_flow? || in_trial_flow? || (onboarding_issues_experiment_enabled && !in_invitation_flow? && !in_oauth_flow?) ? _('Continue') : _('Get started!') diff --git a/ee/app/views/registrations/welcome/_progress_bar.html.haml b/ee/app/views/registrations/welcome/_progress_bar.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..3bbea356570b413d05d1c3ac92af73f291faeff4 --- /dev/null +++ b/ee/app/views/registrations/welcome/_progress_bar.html.haml @@ -0,0 +1,5 @@ +- onboarding_issues_experiment_enabled = experiment_enabled?(:onboarding_issues) + +- if in_subscription_flow? || (onboarding_issues_experiment_enabled && !in_invitation_flow? && !in_oauth_flow? && !in_trial_flow?) + #progress-bar{ data: { is_in_subscription_flow: in_subscription_flow?.to_s, is_onboarding_issues_experiment_enabled: onboarding_issues_experiment_enabled.to_s } } + diff --git a/ee/app/views/registrations/welcome/_setup_for_company.html.haml b/ee/app/views/registrations/welcome/_setup_for_company.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..86b43a6799277e73e270128f91174c2c19d5d33f --- /dev/null +++ b/ee/app/views/registrations/welcome/_setup_for_company.html.haml @@ -0,0 +1,11 @@ +- if Gitlab.com? + .row + .form-group.col-sm-12 + = f.label :setup_for_company, setup_for_company_label_text, class: 'label-bold' + .d-flex.flex-column.flex-lg-row + .flex-grow-1 + = f.radio_button :setup_for_company, true + = f.label :setup_for_company, _('My company or team'), class: 'normal', value: 'true' + .flex-grow-1 + = f.radio_button :setup_for_company, false + = f.label :setup_for_company, _('Just me'), class: 'normal', value: 'false' diff --git a/ee/spec/features/registrations/user_sees_new_onboarding_flow_spec.rb b/ee/spec/features/registrations/user_sees_new_onboarding_flow_spec.rb index 6715e0207b92839c271c9a5db48db72fc5dfeba4..3dc44d72572968747b17cf40b105f56ceffdc3dc 100644 --- a/ee/spec/features/registrations/user_sees_new_onboarding_flow_spec.rb +++ b/ee/spec/features/registrations/user_sees_new_onboarding_flow_spec.rb @@ -12,7 +12,7 @@ end it 'shows the expected pages' do - expect(page).to have_content('Welcome to GitLab.com') + expect(page).to have_content('Welcome to GitLab') expect(page).to have_content('Your profile Your GitLab group Your first project') expect(page).to have_css('li.current', text: 'Your profile') diff --git a/ee/spec/features/registrations/welcome_spec.rb b/ee/spec/features/registrations/welcome_spec.rb index f454a81b03f7bac64b936ce62c8207e779bce048..799b0bfd65d651a18715c7fa42f715a1640c9159 100644 --- a/ee/spec/features/registrations/welcome_spec.rb +++ b/ee/spec/features/registrations/welcome_spec.rb @@ -23,7 +23,7 @@ end it 'shows the welcome page without a progress bar' do - expect(page).to have_content('Welcome to GitLab.com') + expect(page).to have_content('Welcome to GitLab') expect(page).not_to have_content('Your profile') end diff --git a/ee/spec/features/signup_spec.rb b/ee/spec/features/signup_spec.rb index 4b7c08fcbf4556e1e39a8dcb893fee1e02ccd60a..d8984f1dd507938649068d1304ac971cfb361665 100644 --- a/ee/spec/features/signup_spec.rb +++ b/ee/spec/features/signup_spec.rb @@ -48,6 +48,36 @@ expect(user.email_opted_in_at).to be_nil end end + + context 'when role is required' do + before do + stub_experiment(signup_flow: true) + stub_experiment_for_user(signup_flow: true) + end + + it 'redirects to step 2 of the signup process, sets the role and setup for company and redirects back' do + visit new_user_registration_path + + fill_in 'new_user_first_name', with: user_attrs[:name].split(' ').first + fill_in 'new_user_last_name', with: user_attrs[:name].split(' ').last + fill_in 'new_user_username', with: user_attrs[:username] + fill_in 'new_user_email', with: user_attrs[:email] + fill_in 'new_user_password', with: user_attrs[:password] + click_button 'Register' + visit new_project_path + + expect(page).to have_current_path(users_sign_up_welcome_path) + + select 'Software Developer', from: 'user_role' + choose 'user_setup_for_company_true' + click_button 'Get started!' + user = User.find_by_username(user_attrs[:username]) + + expect(user.software_developer_role?).to be_truthy + expect(user.setup_for_company).to be_truthy + expect(page).to have_current_path(new_project_path) + end + end end context 'not for Gitlab.com' do diff --git a/ee/spec/views/registrations/welcome.html.haml_spec.rb b/ee/spec/views/registrations/welcome.html.haml_spec.rb index 1d7048f6ff56dacf8f42af728c7e1c6511e639ec..349d186c544718a2f2ddf81d00188a8612829d28 100644 --- a/ee/spec/views/registrations/welcome.html.haml_spec.rb +++ b/ee/spec/views/registrations/welcome.html.haml_spec.rb @@ -14,6 +14,7 @@ allow(view).to receive(:in_invitation_flow?).and_return(in_invitation_flow) allow(view).to receive(:in_oauth_flow?).and_return(in_oauth_flow) allow(view).to receive(:experiment_enabled?).with(:onboarding_issues).and_return(onboarding_issues_experiment_enabled) + allow(Gitlab).to receive(:com?).and_return(true) render end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index dc3e6580b26e91894294fe94dee762b5410c9987..14d275f0be1ff320900646265aae724195fbf5cb 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -3214,9 +3214,6 @@ msgstr "" msgid "Are you ABSOLUTELY SURE you wish to delete this project?" msgstr "" -msgid "Are you setting up GitLab for a company?" -msgstr "" - msgid "Are you sure that you want to archive this project?" msgstr "" @@ -13136,9 +13133,6 @@ msgstr "" msgid "In order to personalize your experience with GitLab%{br_tag}we would like to know a bit more about you." msgstr "" -msgid "In order to tailor your experience with GitLab we%{br_tag}would like to know a bit more about you." -msgstr "" - msgid "In progress" msgstr "" @@ -27982,15 +27976,12 @@ msgstr "" msgid "Welcome to GitLab" msgstr "" -msgid "Welcome to GitLab %{name}!" +msgid "Welcome to GitLab%{br_tag}%{name}!" msgstr "" msgid "Welcome to GitLab, %{first_name}!" msgstr "" -msgid "Welcome to GitLab.com%{br_tag}@%{name}!" -msgstr "" - msgid "Welcome to the guided GitLab tour" msgstr "" diff --git a/spec/features/users/signup_spec.rb b/spec/features/users/signup_spec.rb index 332be05502778f38aff8b6c7e9016b8f8ad98e0f..522ad708f427bc4177ffde261ca7aa7693ff46d2 100644 --- a/spec/features/users/signup_spec.rb +++ b/spec/features/users/signup_spec.rb @@ -485,8 +485,8 @@ it_behaves_like 'Signup name validation', 'new_user_first_name', 127 it_behaves_like 'Signup name validation', 'new_user_last_name', 127 - describe 'when role is required' do - it 'after registering, it redirects to step 2 of the signup process, sets the name and role and then redirects to the original requested url' do + context 'when role is required' do + it 'redirects to step 2 of the signup process, sets the role and redirects back' do new_user = build_stubbed(:user) visit new_user_registration_path fill_in 'new_user_first_name', with: new_user.first_name @@ -500,12 +500,11 @@ expect(page).to have_current_path(users_sign_up_welcome_path) select 'Software Developer', from: 'user_role' - choose 'user_setup_for_company_true' click_button 'Get started!' new_user = User.find_by_username(new_user.username) expect(new_user.software_developer_role?).to be_truthy - expect(new_user.setup_for_company).to be_truthy + expect(new_user.setup_for_company).to be_nil expect(page).to have_current_path(new_project_path) end end @@ -521,14 +520,13 @@ it 'terms are checked by default' do new_user = build_stubbed(:user) - visit new_user_registration_path - fill_in 'new_user_username', with: new_user.username - fill_in 'new_user_email', with: new_user.email + visit new_user_registration_path fill_in 'new_user_first_name', with: new_user.first_name fill_in 'new_user_last_name', with: new_user.last_name + fill_in 'new_user_username', with: new_user.username + fill_in 'new_user_email', with: new_user.email fill_in 'new_user_password', with: new_user.password - click_button 'Register' expect(current_path).to eq users_sign_up_welcome_path diff --git a/spec/services/users/signup_service_spec.rb b/spec/services/users/signup_service_spec.rb index cc234309817a229cc070706678933bd5132e46f0..7169401ab34c32a0066ac0accd609f936816b7ab 100644 --- a/spec/services/users/signup_service_spec.rb +++ b/spec/services/users/signup_service_spec.rb @@ -48,12 +48,27 @@ expect(user.reload.setup_for_company).to be(false) end - it 'returns an error result when setup_for_company is missing' do - result = update_user(user, setup_for_company: '') + context 'when on .com' do + before do + allow(Gitlab).to receive(:com?).and_return(true) + end - expect(user.reload.setup_for_company).not_to be_blank - expect(result[:status]).to eq(:error) - expect(result[:message]).to eq("Setup for company can't be blank") + it 'returns an error result when setup_for_company is missing' do + result = update_user(user, setup_for_company: '') + + expect(user.reload.setup_for_company).not_to be_blank + expect(result[:status]).to eq(:error) + expect(result[:message]).to eq("Setup for company can't be blank") + end + end + + context 'when not on .com' do + it 'returns success when setup_for_company is blank' do + result = update_user(user, setup_for_company: '') + + expect(result).to eq(status: :success) + expect(user.reload.setup_for_company).to be(nil) + end end end diff --git a/spec/views/registrations/welcome.html.haml_spec.rb b/spec/views/registrations/welcome.html.haml_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..56a7784a1344cfd4fe6a781fe37352b7a3c0fa12 --- /dev/null +++ b/spec/views/registrations/welcome.html.haml_spec.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'registrations/welcome' do + using RSpec::Parameterized::TableSyntax + + let_it_be(:user) { User.new } + + before do + allow(view).to receive(:current_user).and_return(user) + allow(view).to receive(:in_subscription_flow?).and_return(false) + allow(view).to receive(:in_trial_flow?).and_return(false) + allow(view).to receive(:in_invitation_flow?).and_return(false) + allow(view).to receive(:in_oauth_flow?).and_return(false) + allow(view).to receive(:experiment_enabled?).with(:onboarding_issues).and_return(false) + allow(Gitlab).to receive(:com?).and_return(false) + + render + end + + subject { rendered } + + it { is_expected.not_to have_selector('label[for="user_setup_for_company"]') } + it { is_expected.to have_button('Get started!') } +end