Commit d648b282 authored by Arturo Herrero's avatar Arturo Herrero

Merge branch '219544-eng-alternate-teammates-invitation-in-first-time-onboarding-2' into 'master'

Refactor groups registration for easier modification

See merge request gitlab-org/gitlab!54713
parents 3cb07a08 a3911576
...@@ -19,14 +19,43 @@ module Registrations ...@@ -19,14 +19,43 @@ module Registrations
def create def create
@group = Groups::CreateService.new(current_user, group_params).execute @group = Groups::CreateService.new(current_user, group_params).execute
render_new && return unless @group.persisted? if @group.persisted?
create_successful_flow
else
render action: :new
end
end
protected
def show_confirm_warning?
false
end
trial = params[:trial] == 'true' private
url_params = { namespace_id: @group.id, trial: trial }
def check_signup_onboarding_enabled
access_denied! unless helpers.signup_onboarding_enabled?
end
def create_successful_flow
if helpers.in_trial_onboarding_flow? if helpers.in_trial_onboarding_flow?
render_new && return unless apply_trial apply_trial_for_trial_onboarding_flow
else
registration_onboarding_flow
end
end
def authorize_create_group!
access_denied! unless can?(current_user, :create_group)
end
def group_params
params.require(:group).permit(:name, :path, :visibility_level)
end
def apply_trial_for_trial_onboarding_flow
if apply_trial
record_experiment_user(:remove_known_trial_form_fields, namespace_id: @group.id) record_experiment_user(:remove_known_trial_form_fields, namespace_id: @group.id)
record_experiment_user(:trimmed_skip_trial_copy, namespace_id: @group.id) record_experiment_user(:trimmed_skip_trial_copy, namespace_id: @group.id)
record_experiment_user(:trial_registration_with_social_signin, namespace_id: @group.id) record_experiment_user(:trial_registration_with_social_signin, namespace_id: @group.id)
...@@ -36,46 +65,44 @@ module Registrations ...@@ -36,46 +65,44 @@ module Registrations
record_experiment_conversion_event(:trial_registration_with_social_signin) record_experiment_conversion_event(:trial_registration_with_social_signin)
record_experiment_conversion_event(:trial_onboarding_issues) record_experiment_conversion_event(:trial_onboarding_issues)
url_params[:trial_onboarding_flow] = true redirect_to new_users_sign_up_project_path(namespace_id: @group.id, trial: helpers.in_trial_during_signup_flow?, trial_onboarding_flow: true)
else else
record_experiment_user(:trial_during_signup, trial_chosen: trial, namespace_id: @group.id) render action: :new
if experiment_enabled?(:trial_during_signup)
if trial
render_new && return unless create_lead && apply_trial
record_experiment_conversion_event(:trial_during_signup)
end
else
invite_members(@group)
end
end end
redirect_to new_users_sign_up_project_path(url_params)
end end
protected def registration_onboarding_flow
record_experiment_user(:trial_during_signup, trial_chosen: helpers.in_trial_during_signup_flow?, namespace_id: @group.id)
def show_confirm_warning? if experiment_enabled?(:trial_during_signup)
false trial_during_signup_flow
else
invite_on_create
end
end end
private def invite_on_create
invite_members(@group)
def check_signup_onboarding_enabled redirect_to new_users_sign_up_project_path(namespace_id: @group.id, trial: helpers.in_trial_during_signup_flow?)
access_denied! unless helpers.signup_onboarding_enabled?
end end
def authorize_create_group! def trial_during_signup_flow
access_denied! unless can?(current_user, :create_group) if helpers.in_trial_during_signup_flow?
create_lead_and_apply_trial_flow
else
redirect_to new_users_sign_up_project_path(namespace_id: @group.id, trial: helpers.in_trial_during_signup_flow?)
end
end end
def group_params def create_lead_and_apply_trial_flow
params.require(:group).permit(:name, :path, :visibility_level) if create_lead && apply_trial
end record_experiment_conversion_event(:trial_during_signup)
def render_new redirect_to new_users_sign_up_project_path(namespace_id: @group.id, trial: helpers.in_trial_during_signup_flow?)
render action: :new else
render action: :new
end
end end
def create_lead def create_lead
......
...@@ -5,7 +5,10 @@ module Registrations ...@@ -5,7 +5,10 @@ module Registrations
layout 'checkout' layout 'checkout'
before_action :check_signup_onboarding_enabled before_action :check_signup_onboarding_enabled
before_action :find_namespace, only: :new before_action only: [:new] do
set_namespace
authorize_create_project!
end
feature_category :navigation feature_category :navigation
...@@ -28,9 +31,10 @@ module Registrations ...@@ -28,9 +31,10 @@ module Registrations
record_experiment_user(:trial_onboarding_issues, trial_onboarding_context) record_experiment_user(:trial_onboarding_issues, trial_onboarding_context)
record_experiment_conversion_event(:trial_onboarding_issues) record_experiment_conversion_event(:trial_onboarding_issues)
redirect_to trial_getting_started_users_sign_up_welcome_path(learn_gitlab_project_id: learn_gitlab_project.id) redirect_to trial_getting_started_users_sign_up_welcome_path(learn_gitlab_project_id: learn_gitlab_project.id)
else else
redirect_to users_sign_up_experience_level_path(namespace_path: @project.namespace, trial_onboarding_flow: params[:trial_onboarding_flow]) redirect_to users_sign_up_experience_level_path(namespace_path: @project.namespace)
end end
else else
render :new render :new
...@@ -64,12 +68,14 @@ module Registrations ...@@ -64,12 +68,14 @@ module Registrations
learn_gitlab_project learn_gitlab_project
end end
def find_namespace def authorize_create_project!
@namespace = Namespace.find_by_id(params[:namespace_id])
access_denied! unless can?(current_user, :create_projects, @namespace) access_denied! unless can?(current_user, :create_projects, @namespace)
end end
def set_namespace
@namespace = Namespace.find_by_id(params[:namespace_id])
end
def project_params def project_params
params.require(:project).permit(project_params_attributes) params.require(:project).permit(project_params_attributes)
end end
......
...@@ -2,43 +2,35 @@ ...@@ -2,43 +2,35 @@
RSpec.shared_examples GroupInviteMembers do RSpec.shared_examples GroupInviteMembers do
context 'when inviting members', :snowplow do context 'when inviting members', :snowplow do
before do
allow(Gitlab::Tracking).to receive(:event) # rubocop:disable RSpec/ExpectGitlabTracking
end
context 'without valid emails in the params' do context 'without valid emails in the params' do
it 'only adds creator as member' do it 'no invites generated by default' do
expect { subject }.to change(Member, :count).by(1) subject
expect(assigns(:group).members.invite).to be_empty
end end
it 'does not track the event' do it 'does not track the event' do
subject subject
expect_no_snowplow_event expect(Gitlab::Tracking).not_to have_received(:event).with(anything, 'invite_members', label: 'new_group_form') # rubocop:disable RSpec/ExpectGitlabTracking
end end
end end
context 'with valid emails in the params' do context 'with valid emails in the params' do
before do let(:valid_emails) { %w[a@a.a b@b.b] }
group_params[:emails] = ['a@a.a', 'b@b.b', '', '', 'x', 'y']
end
it 'adds users with developer access and ignores blank emails' do
expect_next_instance_of(Group) do |group|
expect(group).to receive(:add_users).with(
%w[a@a.a b@b.b x y],
Gitlab::Access::DEVELOPER,
expires_at: nil,
current_user: user
).and_call_original
end
subject before do
group_params[:emails] = valid_emails + ['', '', 'x', 'y']
end end
it 'sends invitations to valid emails only' do it 'adds users with developer access and ignores blank and invalid emails' do
subject subject
emails = assigns(:group).members.pluck(:invite_email) expect(assigns(:group).members.invite.pluck(:invite_email)).to match_array(valid_emails)
expect(emails).to include('a@a.a', 'b@b.b')
expect(emails).not_to include('x', 'y')
end end
it 'tracks the event' do it 'tracks the event' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment