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,47 +65,45 @@ module Registrations ...@@ -36,47 +65,45 @@ 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
end
end
if experiment_enabled?(:trial_during_signup) def registration_onboarding_flow
if trial record_experiment_user(:trial_during_signup, trial_chosen: helpers.in_trial_during_signup_flow?, namespace_id: @group.id)
render_new && return unless create_lead && apply_trial
record_experiment_conversion_event(:trial_during_signup) if experiment_enabled?(:trial_during_signup)
end trial_during_signup_flow
else else
invite_members(@group) invite_on_create
end end
end end
redirect_to new_users_sign_up_project_path(url_params) def invite_on_create
end invite_members(@group)
protected
def show_confirm_warning? redirect_to new_users_sign_up_project_path(namespace_id: @group.id, trial: helpers.in_trial_during_signup_flow?)
false
end end
private def trial_during_signup_flow
if helpers.in_trial_during_signup_flow?
def check_signup_onboarding_enabled create_lead_and_apply_trial_flow
access_denied! unless helpers.signup_onboarding_enabled? else
redirect_to new_users_sign_up_project_path(namespace_id: @group.id, trial: helpers.in_trial_during_signup_flow?)
end end
def authorize_create_group!
access_denied! unless can?(current_user, :create_group)
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?)
else
render action: :new render action: :new
end end
end
def create_lead def create_lead
trial_params = { trial_params = {
......
...@@ -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