From 70df93860e44eaf413fa3f6712dbb13c9ff57366 Mon Sep 17 00:00:00 2001
From: Doug Stull <dstull@gitlab.com>
Date: Fri, 18 Sep 2020 02:42:06 +0000
Subject: [PATCH] Skip asking about what you will use for when invited

- simplify signup flow.
---
 ee/app/helpers/ee/registrations_helper.rb     |  4 ++
 .../welcome/_setup_for_company.html.haml      |  6 +-
 ...g-gitlab-question-in-signup-when-a-use.yml |  5 ++
 ee/spec/features/invites_spec.rb              | 56 +++++++++++++++++++
 .../helpers/ee/registrations_helper_spec.rb   | 19 +++++++
 spec/features/invites_spec.rb                 |  2 +-
 6 files changed, 90 insertions(+), 2 deletions(-)
 create mode 100644 ee/changelogs/unreleased/221028-skip-the-who-will-be-using-gitlab-question-in-signup-when-a-use.yml
 create mode 100644 ee/spec/features/invites_spec.rb

diff --git a/ee/app/helpers/ee/registrations_helper.rb b/ee/app/helpers/ee/registrations_helper.rb
index 2d42b01db0905..bb2baccc6a467 100644
--- a/ee/app/helpers/ee/registrations_helper.rb
+++ b/ee/app/helpers/ee/registrations_helper.rb
@@ -61,6 +61,10 @@ def onboarding_issues_experiment_enabled?
       experiment_enabled?(:onboarding_issues)
     end
 
+    def skip_setup_for_company?
+      current_user.members.any?
+    end
+
     private
 
     def redirect_path
diff --git a/ee/app/views/registrations/welcome/_setup_for_company.html.haml b/ee/app/views/registrations/welcome/_setup_for_company.html.haml
index 86b43a6799277..530dd772ff271 100644
--- a/ee/app/views/registrations/welcome/_setup_for_company.html.haml
+++ b/ee/app/views/registrations/welcome/_setup_for_company.html.haml
@@ -1,4 +1,8 @@
-- if Gitlab.com?
+- return unless Gitlab.dev_env_or_com?
+
+- if skip_setup_for_company?
+  = f.hidden_field :setup_for_company, value: true
+- else
   .row
     .form-group.col-sm-12
       = f.label :setup_for_company, setup_for_company_label_text, class: 'label-bold'
diff --git a/ee/changelogs/unreleased/221028-skip-the-who-will-be-using-gitlab-question-in-signup-when-a-use.yml b/ee/changelogs/unreleased/221028-skip-the-who-will-be-using-gitlab-question-in-signup-when-a-use.yml
new file mode 100644
index 0000000000000..5b60edf847a88
--- /dev/null
+++ b/ee/changelogs/unreleased/221028-skip-the-who-will-be-using-gitlab-question-in-signup-when-a-use.yml
@@ -0,0 +1,5 @@
+---
+title: Skip the who will be using GitLab question in signup when a user is invited
+merge_request: 42264
+author:
+type: changed
diff --git a/ee/spec/features/invites_spec.rb b/ee/spec/features/invites_spec.rb
new file mode 100644
index 0000000000000..7531450716c27
--- /dev/null
+++ b/ee/spec/features/invites_spec.rb
@@ -0,0 +1,56 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Group or Project invitations' do
+  let(:group) { create(:group, name: 'Owned') }
+  let(:project) { create(:project, :repository, namespace: group) }
+  let(:group_invite) { create(:group_member, :invited, group: group) }
+  let(:new_user) { build_stubbed(:user, email: group_invite.invite_email) }
+  let(:dev_env_or_com) { true }
+
+  before do
+    allow(::Gitlab).to receive(:dev_env_or_com?).and_return(dev_env_or_com)
+
+    visit invite_path(group_invite.raw_invite_token)
+  end
+
+  def fill_in_sign_up_form(user)
+    fill_in 'new_user_name', with: user.name
+    fill_in 'new_user_username', with: user.username
+    fill_in 'new_user_email', with: user.email
+    fill_in 'new_user_password', with: user.password
+    click_button 'Register'
+  end
+
+  context 'when on .com' do
+    context 'without setup question' do
+      it 'bypasses the setup_for_company question' do
+        fill_in_sign_up_form(new_user)
+
+        expect(find('input[name="user[setup_for_company]"]', visible: :hidden).value).to eq 'true'
+        expect(page).not_to have_content('My company or team')
+      end
+    end
+
+    context 'with setup question' do
+      let(:new_user) {  build_stubbed(:user, email: 'bogus@me.com') }
+
+      it 'has the setup question' do
+        fill_in_sign_up_form(new_user)
+
+        expect(page).to have_content('My company or team')
+      end
+    end
+  end
+
+  context 'when not on .com' do
+    let(:dev_env_or_com) { false }
+
+    it 'bypasses the setup_for_company question' do
+      fill_in_sign_up_form(new_user)
+
+      expect(page).not_to have_content('My company or team')
+    end
+  end
+end
diff --git a/ee/spec/helpers/ee/registrations_helper_spec.rb b/ee/spec/helpers/ee/registrations_helper_spec.rb
index 23facd1460a96..ff9155cee610e 100644
--- a/ee/spec/helpers/ee/registrations_helper_spec.rb
+++ b/ee/spec/helpers/ee/registrations_helper_spec.rb
@@ -244,4 +244,23 @@
       end
     end
   end
+
+  describe '#skip_setup_for_company?' do
+    let(:user) { create(:user) }
+
+    before do
+      allow(helper).to receive(:current_user).and_return(user)
+    end
+
+    it 'will skip the setup if memberships are found' do
+      member = create(:project_member, :invited)
+      member.accept_invite!(user)
+
+      expect(helper.skip_setup_for_company?).to be true
+    end
+
+    it 'will not skip the setup when a user has no memberships' do
+      expect(helper.skip_setup_for_company?).to be false
+    end
+  end
 end
diff --git a/spec/features/invites_spec.rb b/spec/features/invites_spec.rb
index 26b9b398692b2..3954de56eea06 100644
--- a/spec/features/invites_spec.rb
+++ b/spec/features/invites_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-RSpec.describe 'Invites', :aggregate_failures do
+RSpec.describe 'Group or Project invitations', :aggregate_failures do
   let(:user) { create(:user, email: 'user@example.com') }
   let(:owner) { create(:user, name: 'John Doe') }
   let(:group) { create(:group, name: 'Owned') }
-- 
GitLab